214 for( i = 0; i < len; i ++ ) {
215 size_t j = len - i - 1;
216 uint8_t s = ((uint8_t*)src)[j];
218 ((uint8_t*)dst)[i] = s;
225 #if __BYTE_ORDER == __LITTLE_ENDIAN
226 memcpy( dst, src, len );
227 #elif __BYTE_ORDER == __BIG_ENDIAN
230 #error "Unknown Endian Convention"
236 #if __BYTE_ORDER == __LITTLE_ENDIAN
238 #elif __BYTE_ORDER == __BIG_ENDIAN
239 memcpy( dst, src, len );
241 #error "Unknown Endian Convention"
254 #define AA_ENDCONV_MAKE_REVERSE( type, suffix ) \
255 static inline type aa_endconv_reverse_##suffix( type x ) { \
260 for( i = 0 ; i < 8*sizeof(type); i+=8 ) { \
261 j = (type) (8*sizeof(type) - i - 8); \
262 v = (type) (((x >> i) & 0xff) << j); \
270 #if __BYTE_ORDER == __LITTLE_ENDIAN
273 #define AA_ENDCONV_MAKE_H_TO_LE( type, suffix ) \
274 static inline type aa_endconv_h_to_le_##suffix( type v ) { return v; }
276 #define AA_ENDCONV_MAKE_H_TO_BE( type, suffix ) \
277 static inline type aa_endconv_h_to_be_##suffix( type v ) { \
278 return aa_endconv_reverse_##suffix( v ); \
282 #define AA_ENDCONV_MAKE_LE_TO_H( type, suffix ) \
283 static inline type aa_endconv_le_to_h_##suffix( type v ) { return v; }
285 #define AA_ENDCONV_MAKE_BE_TO_H( type, suffix ) \
286 static inline type aa_endconv_be_to_h_##suffix( type v ) { \
287 return aa_endconv_reverse_##suffix( v ); \
290 #elif __BYTE_ORDER == __BIG_ENDIAN
292 #define AA_ENDCONV_MAKE_H_TO_LE( type, suffix ) \
293 static inline type aa_endconv_h_to_le_##suffix( type v ) { \
294 return aa_endconv_reverse_##suffix( v ); \
296 #define AA_ENDCONV_MAKE_H_TO_BE( type, suffix ) \
297 static inline type aa_endconv_h_to_le_##suffix( type v ) { return v; }
299 #define AA_ENDCONV_MAKE_LE_TO_H( type, suffix ) \
300 static inline type aa_endconv_le_to_h_##suffix( type v ) { \
301 return aa_endconv_reverse_##suffix( v ); \
303 #define AA_ENDCONV_MAKE_BE_TO_H( type, suffix ) \
304 static inline type aa_endconv_be_to_h_##suffix( type v ) { return v; }
307 #error "Unknown Endian Convention"
311 #define AA_ENDCONV_MAKE_LDST_DEF(type,suffix) \
312 static inline void aa_endconv_st_le_##suffix( void *dst, type src ) { \
313 aa_endconv_st_le( dst, &src, sizeof(type) ); } \
314 static inline void aa_endconv_st_be_##suffix( void *dst, type src ) { \
315 aa_endconv_st_be( dst, &src, sizeof(type) ); } \
316 static inline type aa_endconv_ld_le_##suffix( void *src ) { \
318 aa_endconv_st_le( &r, src, sizeof(type) ); \
320 static inline type aa_endconv_ld_be_##suffix( void *src ) { \
322 aa_endconv_st_be( &r, src, sizeof(type) ); \
324 #define AA_ENDCONV_MAKE_CONV_DEF(type,suffix) \
326 AA_ENDCONV_MAKE_REVERSE( type, suffix ) \
327 AA_ENDCONV_MAKE_H_TO_LE( type, suffix ) \
328 AA_ENDCONV_MAKE_H_TO_BE( type, suffix ) \
329 AA_ENDCONV_MAKE_LE_TO_H( type, suffix ) \
330 AA_ENDCONV_MAKE_BE_TO_H( type, suffix ) \
static uint16_t aa_endconv_be_to_h_u16(uint16_t i_be)
convert big-endian representation to native
static int32_t aa_endconv_le_to_h_i32(int32_t i_le)
convert little-endian representation to native
static uint32_t aa_endconv_le_to_h_u32(uint32_t i_le)
convert little-endian representation to native
static void aa_endconv_st_be(void *dst, void *src, size_t len)
st src to dst with dst being big endian
static uint64_t aa_endconv_le_to_h_u64(uint64_t i_le)
convert little-endian representation to native
static uint32_t aa_endconv_be_to_h_u32(uint32_t i_be)
convert big-endian representation to native
static void aa_endconv_st_be_s(void *dst, float src)
convert native src to big-endian dst
static void aa_endconv_st_le_s(void *dst, float src)
convert native to src to little-endian dst
static uint64_t aa_endconv_be_to_h_u64(uint64_t i_be)
convert big-endian representation to native
static int32_t aa_endconv_h_to_be_i32(int32_t i_host)
convert native representation to big-endian
static uint64_t aa_endconv_h_to_le_u64(uint64_t i_host)
convert native representation to little-endian
static int64_t aa_endconv_h_to_le_i64(int64_t i_host)
convert native representation to little-endian
static void aa_endconv_reverse(void *dst, void *src, size_t len)
copy src to dst in reverse byte order
static void aa_endconv_st_le_i16(void *dst, int16_t src)
convert native to src to little-endian dst
#define AA_ENDCONV_MAKE_LDST_DEF(type, suffix)
macro make to load/store function defs
static int16_t aa_endconv_ld_le_i16(void *src)
Memory Load: convert little endian src to native type.
static int32_t aa_endconv_h_to_le_i32(int32_t i_host)
convert native representation to little-endian
static float aa_endconv_ld_be_s(void *src)
Memory Load: convert big-endian src to native.
static int64_t aa_endconv_le_to_h_i64(int64_t i_le)
convert little-endian representation to native
static void aa_endconv_st_le_u32(void *dst, uint32_t src)
convert native to src to little-endian dst
static int16_t aa_endconv_h_to_be_i16(int16_t i_host)
convert native representation to big-endian
static int32_t aa_endconv_ld_le_i32(void *src)
Memory Load: convert little endian src to native type.
static void aa_endconv_st_le(void *dst, void *src, size_t len)
st src to dst with dst being little endian
#define AA_ENDCONV_MAKE_CONV_DEF(type, suffix)
macro to make conversion function defs
static uint32_t aa_endconv_h_to_le_u32(uint32_t i_host)
convert native representation to little-endian
static int16_t aa_endconv_le_to_h_i16(int16_t i_le)
convert little-endian representation to native
static uint16_t aa_endconv_ld_le_u16(void *src)
Memory Load: convert little endian src to native type.
static int16_t aa_endconv_h_to_le_i16(int16_t i_host)
convert native representation to little-endian
static void aa_endconv_st_be_i16(void *dst, int16_t src)
convert native src to big-endian dst
static int16_t aa_endconv_be_to_h_i16(int16_t i_be)
convert big-endian representation to native
static int64_t aa_endconv_ld_le_i64(void *src)
PROTOTYPES.
static void aa_endconv_st_be_d(void *dst, double src)
convert native src to big-endian dst
static uint64_t aa_endconv_h_to_be_u64(uint64_t i_host)
convert native representation to big-endian
static void aa_endconv_st_le_i32(void *dst, int32_t src)
convert native to src to little-endian dst
static int16_t aa_endconv_ld_be_i16(void *src)
Memory Load: convert big-endian src to native.
static uint64_t aa_endconv_ld_be_u64(void *src)
Memory Load: convert big-endian src to native.
static float aa_endconv_ld_le_s(void *src)
Memory Load: convert little endian src to native type.
static int64_t aa_endconv_h_to_be_i64(int64_t i_host)
convert native representation to big-endian
static void aa_endconv_st_be_u32(void *dst, uint32_t src)
convert native src to big-endian dst
static uint32_t aa_endconv_h_to_be_u32(uint32_t i_host)
convert native representation to big-endian
static int32_t aa_endconv_be_to_h_i32(int32_t i_be)
convert big-endian representation to native
static uint16_t aa_endconv_ld_be_u16(void *src)
Memory Load: convert big-endian src to native.
static void aa_endconv_st_be_u64(void *dst, uint64_t src)
convert native src to big-endian dst
static void aa_endconv_st_le_u64(void *dst, uint64_t src)
convert native to src to little-endian dst
static double aa_endconv_ld_be_d(void *src)
Memory Load: convert big-endian src to native.
static void aa_endconv_st_le_u16(void *dst, uint16_t src)
convert native to src to little-endian dst
static void aa_endconv_st_be_i64(void *dst, int64_t src)
convert native src to big-endian dst
static uint16_t aa_endconv_h_to_be_u16(uint16_t i_host)
convert native representation to big-endian
static void aa_endconv_st_le_i64(void *dst, int64_t src)
convert native to src to little-endian dst
static double aa_endconv_ld_le_d(void *src)
Memory Load: convert little endian src to native type.
static int64_t aa_endconv_be_to_h_i64(int64_t i_be)
convert big-endian representation to native
static uint32_t aa_endconv_ld_le_u32(void *src)
Memory Load: convert little endian src to native type.
static int32_t aa_endconv_ld_be_i32(void *src)
Memory Load: convert big-endian src to native.
static void aa_endconv_st_be_u16(void *dst, uint16_t src)
convert native src to big-endian dst
static uint16_t aa_endconv_le_to_h_u16(uint16_t i_le)
convert little-endian representation to native
static uint32_t aa_endconv_ld_be_u32(void *src)
Memory Load: convert big-endian src to native.
static void aa_endconv_st_be_i32(void *dst, int32_t src)
convert native src to big-endian dst
static uint64_t aa_endconv_ld_le_u64(void *src)
Memory Load: convert little endian src to native type.
static void aa_endconv_st_le_d(void *dst, double src)
convert native to src to little-endian dst
static int64_t aa_endconv_ld_be_i64(void *src)
Memory Load: convert big-endian src to native.
static uint16_t aa_endconv_h_to_le_u16(uint16_t i_host)
convert native representation to little-endian