summaryrefslogtreecommitdiffstats
path: root/include/endianness.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/endianness.h')
-rw-r--r--include/endianness.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/include/endianness.h b/include/endianness.h
new file mode 100644
index 0000000..88b63db
--- /dev/null
+++ b/include/endianness.h
@@ -0,0 +1,123 @@
1#ifndef ENDIANNESS_H
2#define ENDIANNESS_H
3
4#ifndef __LITTLE_ENDIAN
5#define __LITTLE_ENDIAN 1234
6#endif
7
8#ifndef __BIG_ENDIAN
9#define __BIG_ENDIAN 4321
10#endif
11
12#ifndef __BYTE_ORDER
13#ifdef __LITTLE_ENDIAN__
14#define __BYTE_ORDER __LITTLE_ENDIAN
15#else
16#ifdef __BIG_ENDIAN__
17#define __BYTE_ORDER __BIG_ENDIAN
18#endif
19#endif
20#endif
21
22#ifndef be16toh
23#if __BYTE_ORDER == __BIG_ENDIAN
24#define be16toh(x) (x)
25#else
26#define be16toh(x) ((((x) & 0xFF00) >> 8) | (((x) & 0x00FF) << 8))
27#endif
28#endif
29
30#ifndef htobe16
31#define htobe16 be16toh
32#endif
33
34#ifndef le16toh
35#if __BYTE_ORDER == __BIG_ENDIAN
36#define le16toh(x) ((((x) & 0xFF00) >> 8) | (((x) & 0x00FF) << 8))
37#else
38#define le16toh(x) (x)
39#endif
40#endif
41
42#ifndef htole16
43#define htole16 le16toh
44#endif
45
46#ifndef __bswap_32
47#define __bswap_32(x) ((((x) & 0xFF000000) >> 24) \
48 | (((x) & 0x00FF0000) >> 8) \
49 | (((x) & 0x0000FF00) << 8) \
50 | (((x) & 0x000000FF) << 24))
51#endif
52
53#ifndef be32toh
54#if __BYTE_ORDER == __BIG_ENDIAN
55#define be32toh(x) (x)
56#else
57#define be32toh(x) __bswap_32(x)
58#endif
59#endif
60
61#ifndef htobe32
62#define htobe32 be32toh
63#endif
64
65#ifndef le32toh
66#if __BYTE_ORDER == __BIG_ENDIAN
67#define le32toh(x) __bswap_32(x)
68#else
69#define le32toh(x) (x)
70#endif
71#endif
72
73#ifndef htole32
74#define htole32 le32toh
75#endif
76
77#ifndef __bswap_64
78#define __bswap_64(x) ((((x) & 0xFF00000000000000ull) >> 56) \
79 | (((x) & 0x00FF000000000000ull) >> 40) \
80 | (((x) & 0x0000FF0000000000ull) >> 24) \
81 | (((x) & 0x000000FF00000000ull) >> 8) \
82 | (((x) & 0x00000000FF000000ull) << 8) \
83 | (((x) & 0x0000000000FF0000ull) << 24) \
84 | (((x) & 0x000000000000FF00ull) << 40) \
85 | (((x) & 0x00000000000000FFull) << 56))
86#endif
87
88#ifndef htobe64
89#if __BYTE_ORDER == __BIG_ENDIAN
90#define htobe64(x) (x)
91#else
92#define htobe64(x) __bswap_64(x)
93#endif
94#endif
95
96#ifndef be64toh
97#define be64toh htobe64
98#endif
99
100#ifndef le64toh
101#if __BYTE_ORDER == __LITTLE_ENDIAN
102#define le64toh(x) (x)
103#else
104#define le64toh(x) __bswap_64(x)
105#endif
106#endif
107
108#ifndef htole64
109#define htole64 le64toh
110#endif
111
112#if (defined(__BIG_ENDIAN__) \
113 && !defined(__FLOAT_WORD_ORDER__)) \
114 || (defined(__FLOAT_WORD_ORDER__) \
115 && __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__)
116#define float_bswap64(x) __bswap_64(x)
117#define float_bswap32(x) __bswap_32(x)
118#else
119#define float_bswap64(x) (x)
120#define float_bswap32(x) (x)
121#endif
122
123#endif /* ENDIANNESS_H */