28 #ifndef __CDIO_BYTESEX_H__
29 #define __CDIO_BYTESEX_H__
36 #define UINT16_SWAP_LE_BE_C(val) ((uint16_t) ( \
37 (((uint16_t) (val) & (uint16_t) 0x00ffU) << 8) | \
38 (((uint16_t) (val) & (uint16_t) 0xff00U) >> 8)))
41 #define UINT32_SWAP_LE_BE_C(val) ((uint32_t) ( \
42 (((uint32_t) (val) & (uint32_t) 0x000000ffU) << 24) | \
43 (((uint32_t) (val) & (uint32_t) 0x0000ff00U) << 8) | \
44 (((uint32_t) (val) & (uint32_t) 0x00ff0000U) >> 8) | \
45 (((uint32_t) (val) & (uint32_t) 0xff000000U) >> 24)))
48 #define UINT64_SWAP_LE_BE_C(val) ((uint64_t) ( \
49 (((uint64_t) (val) & (uint64_t) UINT64_C(0x00000000000000ff)) << 56) | \
50 (((uint64_t) (val) & (uint64_t) UINT64_C(0x000000000000ff00)) << 40) | \
51 (((uint64_t) (val) & (uint64_t) UINT64_C(0x0000000000ff0000)) << 24) | \
52 (((uint64_t) (val) & (uint64_t) UINT64_C(0x00000000ff000000)) << 8) | \
53 (((uint64_t) (val) & (uint64_t) UINT64_C(0x000000ff00000000)) >> 8) | \
54 (((uint64_t) (val) & (uint64_t) UINT64_C(0x0000ff0000000000)) >> 24) | \
55 (((uint64_t) (val) & (uint64_t) UINT64_C(0x00ff000000000000)) >> 40) | \
56 (((uint64_t) (val) & (uint64_t) UINT64_C(0xff00000000000000)) >> 56)))
58 #ifndef UINT16_SWAP_LE_BE
59 # define UINT16_SWAP_LE_BE UINT16_SWAP_LE_BE_C
62 #ifndef UINT32_SWAP_LE_BE
63 # define UINT32_SWAP_LE_BE UINT32_SWAP_LE_BE_C
66 #ifndef UINT64_SWAP_LE_BE
67 # define UINT64_SWAP_LE_BE UINT64_SWAP_LE_BE_C
71 uint16_t uint16_swap_le_be (
const uint16_t val)
77 uint32_t uint32_swap_le_be (
const uint32_t val)
83 uint64_t uint64_swap_le_be (
const uint64_t val)
88 # define UINT8_TO_BE(val) ((uint8_t) (val))
89 # define UINT8_TO_LE(val) ((uint8_t) (val))
90 #ifdef WORDS_BIGENDIAN
91 # define UINT16_TO_BE(val) ((uint16_t) (val))
92 # define UINT16_TO_LE(val) ((uint16_t) UINT16_SWAP_LE_BE(val))
94 # define UINT32_TO_BE(val) ((uint32_t) (val))
95 # define UINT32_TO_LE(val) ((uint32_t) UINT32_SWAP_LE_BE(val))
97 # define UINT64_TO_BE(val) ((uint64_t) (val))
98 # define UINT64_TO_LE(val) ((uint64_t) UINT64_SWAP_LE_BE(val))
100 # define UINT16_TO_BE(val) ((uint16_t) UINT16_SWAP_LE_BE(val))
101 # define UINT16_TO_LE(val) ((uint16_t) (val))
103 # define UINT32_TO_BE(val) ((uint32_t) UINT32_SWAP_LE_BE(val))
104 # define UINT32_TO_LE(val) ((uint32_t) (val))
106 # define UINT64_TO_BE(val) ((uint64_t) UINT64_SWAP_LE_BE(val))
107 # define UINT64_TO_LE(val) ((uint64_t) (val))
111 #define UINT8_FROM_BE(val) (UINT8_TO_BE (val))
112 #define UINT8_FROM_LE(val) (UINT8_TO_LE (val))
113 #define UINT16_FROM_BE(val) (UINT16_TO_BE (val))
114 #define UINT16_FROM_LE(val) (UINT16_TO_LE (val))
115 #define UINT32_FROM_BE(val) (UINT32_TO_BE (val))
116 #define UINT32_FROM_LE(val) (UINT32_TO_LE (val))
117 #define UINT64_FROM_BE(val) (UINT64_TO_BE (val))
118 #define UINT64_FROM_LE(val) (UINT64_TO_LE (val))
121 #define CVT_TO_FUNC(bits) \
122 static inline uint ## bits ## _t \
123 uint ## bits ## _to_be (uint ## bits ## _t val) \
124 { return UINT ## bits ## _TO_BE (val); } \
125 static inline uint ## bits ## _t \
126 uint ## bits ## _to_le (uint ## bits ## _t val) \
127 { return UINT ## bits ## _TO_LE (val); } \
136 #define uint8_from_be(val) (uint8_to_be (val))
137 #define uint8_from_le(val) (uint8_to_le (val))
138 #define uint16_from_be(val) (uint16_to_be (val))
139 #define uint16_from_le(val) (uint16_to_le (val))
140 #define uint32_from_be(val) (uint32_to_be (val))
141 #define uint32_from_le(val) (uint32_to_le (val))
142 #define uint64_from_be(val) (uint64_to_be (val))
143 #define uint64_from_le(val) (uint64_to_le (val))
148 #define to_711(i) uint8_to_le(i)
151 #define from_711(i) uint8_from_le(i)
154 #define to_721(i) uint16_to_le(i)
157 #define from_721(i) uint16_from_le(i)
160 #define to_722(i) uint16_to_be(i)
163 #define from_722(i) uint16_from_be(i)
166 static inline uint32_t
169 return uint32_swap_le_be(i) | i;
173 static inline uint16_t
174 from_723 (uint32_t p)
176 if (uint32_swap_le_be (p) != p)
177 cdio_warn (
"from_723: broken byte order");
183 #define to_731(i) uint32_to_le(i)
186 #define from_731(i) uint32_from_le(i)
189 #define to_732(i) uint32_to_be(i)
192 #define from_732(i) uint32_from_be(i)
195 static inline uint64_t
198 return uint64_swap_le_be(i) | i;
202 static inline uint32_t
203 from_733 (uint64_t p)
205 if (uint64_swap_le_be (p) != p)
206 cdio_warn (
"from_733: broken byte order");