26 #ifndef CACAO_ENDIANESS_
27 #define CACAO_ENDIANESS_ 1
36 #if defined(__I386__) || defined(__X86_64__)
40 static inline uint8_t
read_u1_le(
const uint8_t *src) {
return *src; }
41 static inline uint16_t
read_u2_le(
const uint8_t *src) {
return *((uint16_t*) src); }
42 static inline uint32_t
read_u4_le(
const uint8_t *src) {
return *((uint32_t*) src); }
43 static inline uint64_t
read_u8_le(
const uint8_t *src) {
return *((uint64_t*) src); }
45 #else // defined(__I386__) || defined(__X86_64__)
52 return (((uint16_t) src[1]) << 8) +
57 return (((uint32_t) src[3]) << 24) +
58 (((uint32_t) src[2]) << 16) +
59 (((uint32_t) src[1]) << 8) +
64 return (((uint64_t) src[7]) << 56) +
65 (((uint64_t) src[6]) << 48) +
66 (((uint64_t) src[5]) << 40) +
67 (((uint64_t) src[4]) << 32) +
68 (((uint64_t) src[3]) << 24) +
69 (((uint64_t) src[2]) << 16) +
70 (((uint64_t) src[1]) << 8) +
74 #endif // defined(__I386__) || defined(__X86_64__)
99 return (((uint16_t) src[0]) << 8) +
105 return (((uint32_t) src[0]) << 24) +
106 (((uint32_t) src[1]) << 16) +
107 (((uint32_t) src[2]) << 8) +
113 return (((uint64_t) src[0]) << 56) +
114 (((uint64_t) src[1]) << 48) +
115 (((uint64_t) src[2]) << 40) +
116 (((uint64_t) src[3]) << 32) +
117 (((uint64_t) src[4]) << 24) +
118 (((uint64_t) src[5]) << 16) +
119 (((uint64_t) src[6]) << 8) +
144 #if WORDS_BIGENDIAN == 0
147 for (
int i = 0;
i < 4;
i++)
150 MCOPY((uint8_t *) (&f), buffer,
u1, 4);
152 MCOPY((uint8_t *) (&f), src,
u1, 4);
163 #if WORDS_BIGENDIAN == 0
166 # if defined(__ARM__) && defined(__ARMEL__) && !defined(__VFP_FP__)
172 for (
int i = 0;
i < 4;
i++)
174 for (
int i = 0;
i < 4;
i++)
177 for (
int i = 0;
i < 8;
i++)
181 MCOPY((uint8_t *) (&d), buffer,
u1, 8);
183 MCOPY((uint8_t *) (&d), src,
u1, 8);
190 #endif // CACAO_ENDIANESS_
static int64_t read_s8_be(const uint8_t *src)
read int64_t from pointer big endian
static uint64_t read_u8_le(const uint8_t *src)
static uint64_t read_u8_be(const uint8_t *src)
read uint64_t from pointer big endian
static int16_t read_s2_le(const uint8_t *src)
read int16_t from pointer little endian
static uint8_t read_u1_be(const uint8_t *src)
read uint8_t from pointer big endian
static int8_t read_s1_le(const uint8_t *src)
read int8_t from pointer little endian
static int16_t read_s2_be(const uint8_t *src)
read int16_t from pointer big endian
static double read_double_be(const uint8_t *src)
static int64_t read_s8_le(const uint8_t *src)
read int64_t from pointer little endian
static uint16_t read_u2_be(const uint8_t *src)
read uint16_t from pointer big endian
static int32_t read_s4_le(const uint8_t *src)
read int32_t from pointer little endian
#define EXPENSIVE_ASSERT(EXPR)
An assertion that performs computations too expensive even for a normal debug build.
static uint8_t read_u1_le(const uint8_t *src)
static float read_float_be(const uint8_t *src)
static uint16_t read_u2_le(const uint8_t *src)
Additional assertion macros.
#define MCOPY(dest, src, type, num)
static uint32_t read_u4_le(const uint8_t *src)
static int32_t read_s4_be(const uint8_t *src)
read int32_t from pointer big endian
static uint32_t read_u4_be(const uint8_t *src)
read uint32_t from pointer big endian
static int8_t read_s1_be(const uint8_t *src)
read int8_t from pointer big endian