1 #ifndef _WIMLIB_ENDIANNESS_H
2 #define _WIMLIB_ENDIANNESS_H
8 /* Changes the endianness of a 32-bit value. */
9 static inline uint32_t bswap32(uint32_t n)
11 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
12 return __builtin_bswap32(n);
14 return (n << 24) | ((n & 0xff00) << 8) | ((n & 0xff0000) >> 8) |
19 #ifdef WORDS_BIGENDIAN
23 /* Changes the endianness of a 16-bit value. */
24 static inline uint16_t bswap16(uint16_t n)
26 return (n << 8) | (n >> 8);
30 /* Changes the endianness of a 64-bit value. */
31 static inline uint64_t bswap64(uint64_t n)
34 return __builtin_bswap64(n);
36 return (n << 56) | ((n & 0xff00) << 40) | ((n & 0xff0000) << 24) |
37 ((n & 0xff000000) << 8) | ((n & 0xff00000000) >> 8) |
38 ((n & 0xff0000000000) >> 24) |
39 ((n & 0xff000000000000) >> 40) | (n >> 56);
44 #define to_le16(n) bswap16(n)
45 #define to_le32(n) bswap32(n)
46 #define to_le64(n) bswap64(n)
47 #define to_be16(n) (n)
48 #define to_be32(n) (n)
49 #define to_be64(n) (n)
51 #define le16_to_cpu(n) bswap16(n)
52 #define le32_to_cpu(n) bswap32(n)
53 #define le64_to_cpu(n) bswap64(n)
56 #define TO_LE16(n) ((n) = to_le16(n))
57 #define TO_LE32(n) ((n) = to_le32(n))
58 #define TO_LE64(n) ((n) = to_le64(n))
60 static inline void array_to_le16(uint16_t *p, uint64_t n)
65 static inline void array_to_le32(uint32_t *p, uint64_t n)
70 static inline void array_to_le64(uint64_t *p, uint64_t n)
81 #define to_le16(n) (n)
82 #define to_le32(n) (n)
83 #define to_le64(n) (n)
85 #define le16_to_cpu(n) (n)
86 #define le32_to_cpu(n) (n)
87 #define le64_to_cpu(n) (n)
89 #define to_be16(n) (bswap16(n))
90 #define to_be32(n) (bswap32(n))
91 #define to_be64(n) (bswap64(n))
98 #define array_to_le16(p, n)
99 #define array_to_le32(p, n)
100 #define array_to_le64(p, n)
105 #endif /* _WIMLIB_ENDIANNESS_H */