27 #ifndef INCLUDED_BYTE_ORDER
28 #define INCLUDED_BYTE_ORDER
34 # define LITTLE_ENDIAN 0x4321
35 # define BIG_ENDIAN 0x1234
36 # if ARCH_IA32 || ARCH_IA64 || ARCH_AMD64 || ARCH_ALPHA || ARCH_ARM || ARCH_MIPS || defined(__LITTLE_ENDIAN__)
37 # define BYTE_ORDER LITTLE_ENDIAN
39 # define BYTE_ORDER BIG_ENDIAN
48 #define FOURCC(a,b,c,d) // real definition is below
61 #define FOURCC_BE(a,b,c,d) ( ((u32)(u8)a) << 24 | ((u32)(u8)b) << 16 | \
62 ((u32)(u8)c) << 8 | ((u32)(u8)d) << 0 )
65 #define FOURCC_LE(a,b,c,d) ( ((u32)(u8)a) << 0 | ((u32)(u8)b) << 8 | \
66 ((u32)(u8)c) << 16 | ((u32)(u8)d) << 24 )
68 #if BYTE_ORDER == BIG_ENDIAN
69 # define FOURCC FOURCC_BE
71 # define FOURCC FOURCC_LE
75 #if BYTE_ORDER == BIG_ENDIAN
77 # define to_le16(x) swap16(x)
78 # define to_le32(x) swap32(x)
79 # define to_le64(x) swap64(x)
81 # define to_be16(x) (x)
82 # define to_be32(x) (x)
83 # define to_be64(x) (x)
84 #else // LITTLE_ENDIAN
86 # define to_le16(x) (x)
87 # define to_le32(x) (x)
88 # define to_le64(x) (x)
90 # define to_be16(x) swap16(x)
91 # define to_be32(x) swap32(x)
92 # define to_be64(x) swap64(x)
131 #define swap32 _bswap
132 #define swap64 _bswap64
134 extern unsigned short _byteswap_ushort(
unsigned short);
135 extern unsigned long _byteswap_ulong(
unsigned long);
136 extern unsigned __int64 _byteswap_uint64(
unsigned __int64);
137 #pragma intrinsic(_byteswap_ushort)
138 #pragma intrinsic(_byteswap_ulong)
139 #pragma intrinsic(_byteswap_uint64)
140 # define swap16 _byteswap_ushort
141 # define swap32 _byteswap_ulong
142 # define swap64 _byteswap_uint64
144 # include <asm/byteorder.h>
145 # if defined(__arch__swab16) && !defined(swap16)
146 # define swap16 __arch__swab16
148 # if defined(__arch__swab32) && !defined(swap32)
149 # define swap32 __arch__swab32
151 # if defined(__arch__swab64) && !defined(swap64)
152 # define swap64 __arch__swab64
166 #endif // #ifndef INCLUDED_BYTE_ORDER
u32 read_le32(const void *p)
void write_be32(void *p, u32 x)
void write_le64(void *p, u64 x)
see write_le16
u64 read_le64(const void *p)
see read_le16
void write_be64(void *p, u64 x)
see write_be16
i64 movsx_le64(const u8 *p, size_t size_bytes)
sign-extend <size> (truncated to 8) bytes of little-endian data to i64, starting at address <p> (need...
u64 movzx_be64(const u8 *p, size_t size_bytes)
u32 read_be32(const void *p)
i64 movsx_be64(const u8 *p, size_t size_bytes)
u16 read_le16(const void *p)
read a little-endian number from memory into native byte order.
void write_be16(void *p, u16 x)
see write_le16
u16 read_be16(const void *p)
see read_le16
u64 read_be64(const void *p)
see read_be16
void write_le16(void *p, u16 x)
see read_be16
u64 movzx_le64(const u8 *p, size_t size_bytes)
see write_be16
void write_le32(void *p, u32 x)