14 #ifndef LLVM_SUPPORT_ENDIAN_H
15 #define LLVM_SUPPORT_ENDIAN_H
31 template<
class T,
int alignment>
38 template<
typename value_type, endianness endian>
45 template<
typename value_type,
47 std::size_t alignment>
48 inline value_type
read(
const void *memory) {
55 return byte_swap<value_type, endian>(ret);
58 template<
typename value_type,
60 std::size_t alignment>
61 inline void write(
void *memory, value_type value) {
62 value = byte_swap<value_type, endian>(value);
71 template<
typename value_type,
73 std::size_t alignment>
75 operator value_type()
const {
76 return endian::read<value_type, endian, alignment>(
77 (
const void*)
Value.buffer);
81 endian::write<value_type, endian, alignment>(
82 (
void*)
Value.buffer, newValue);
87 sizeof(value_type)>
Value;
91 typedef detail::packed_endian_specific_integral
detail::packed_endian_specific_integral< int8_t, big, unaligned > big8_t
detail::packed_endian_specific_integral< uint16_t, native, unaligned > unaligned_uint16_t
detail::packed_endian_specific_integral< int64_t, native, unaligned > unaligned_int64_t
#define LLVM_ASSUME_ALIGNED(p, a)
Returns a pointer with an assumed alignment.
value_type read(const void *memory)
detail::packed_endian_specific_integral< uint64_t, big, aligned > aligned_ubig64_t
detail::packed_endian_specific_integral< int8_t, big, aligned > aligned_big8_t
Helper for building an aligned character array type.
detail::packed_endian_specific_integral< int16_t, little, aligned > aligned_little16_t
detail::packed_endian_specific_integral< uint64_t, big, unaligned > ubig64_t
detail::packed_endian_specific_integral< uint32_t, big, unaligned > ubig32_t
detail::packed_endian_specific_integral< uint16_t, big, aligned > aligned_ubig16_t
detail::packed_endian_specific_integral< int64_t, little, unaligned > little64_t
detail::packed_endian_specific_integral< uint8_t, little, aligned > aligned_ulittle8_t
detail::packed_endian_specific_integral< int32_t, big, aligned > aligned_big32_t
value_type byte_swap(value_type value)
detail::packed_endian_specific_integral< int16_t, big, aligned > aligned_big16_t
detail::packed_endian_specific_integral< uint8_t, big, unaligned > ubig8_t
detail::packed_endian_specific_integral< int8_t, little, unaligned > little8_t
detail::packed_endian_specific_integral< uint8_t, little, unaligned > ulittle8_t
detail::packed_endian_specific_integral< int64_t, little, aligned > aligned_little64_t
detail::packed_endian_specific_integral< int16_t, native, unaligned > unaligned_int16_t
detail::packed_endian_specific_integral< uint8_t, big, aligned > aligned_ubig8_t
detail::packed_endian_specific_integral< uint32_t, big, aligned > aligned_ubig32_t
detail::packed_endian_specific_integral< int32_t, little, aligned > aligned_little32_t
detail::packed_endian_specific_integral< uint32_t, little, aligned > aligned_ulittle32_t
detail::packed_endian_specific_integral< uint64_t, little, aligned > aligned_ulittle64_t
detail::packed_endian_specific_integral< int8_t, little, aligned > aligned_little8_t
detail::packed_endian_specific_integral< int32_t, little, unaligned > little32_t
detail::packed_endian_specific_integral< int32_t, big, unaligned > big32_t
unsigned char SwapByteOrder(unsigned char C)
detail::packed_endian_specific_integral< int16_t, little, unaligned > little16_t
detail::packed_endian_specific_integral< uint64_t, native, unaligned > unaligned_uint64_t
detail::packed_endian_specific_integral< uint16_t, little, unaligned > ulittle16_t
void write(void *memory, value_type value)
static const bool IsBigEndianHost
detail::packed_endian_specific_integral< uint64_t, little, unaligned > ulittle64_t
void operator=(value_type newValue)
detail::packed_endian_specific_integral< uint16_t, big, unaligned > ubig16_t
detail::packed_endian_specific_integral< int16_t, big, unaligned > big16_t
detail::packed_endian_specific_integral< int64_t, big, aligned > aligned_big64_t
detail::packed_endian_specific_integral< uint32_t, little, unaligned > ulittle32_t
LLVM Value Representation.
detail::packed_endian_specific_integral< int64_t, big, unaligned > big64_t
detail::packed_endian_specific_integral< int32_t, native, unaligned > unaligned_int32_t
detail::packed_endian_specific_integral< uint32_t, native, unaligned > unaligned_uint32_t
::value is either alignment, or alignof(T) if alignment is 0.
detail::packed_endian_specific_integral< uint16_t, little, aligned > aligned_ulittle16_t