|
9 | 9 | // |
10 | 10 | // Unaligned access |
11 | 11 | // |
| 12 | + |
| 13 | +#if !defined(NO_COMPILER_UAA) |
12 | 14 | #define UAA16(p, i) (((PACKED16*)p)->val[i]) |
13 | 15 | #define UAA32(p, i) (((PACKED32*)p)->val[i]) |
14 | 16 | #define UAA64(p, i) (((PACKED64*)p)->val[i]) |
15 | | - |
16 | | -#define UA64(p) UAA64(p, 0) |
17 | | -#define UA32(p) UAA32(p, 0) |
18 | | -#define UA16(p) UAA16(p, 0) |
| 17 | +#endif |
19 | 18 |
|
20 | 19 | // |
21 | 20 | //Byteswap: Use compiler support if available |
22 | 21 | // |
| 22 | +#ifndef NO_COMPILER_UAA |
23 | 23 | #ifdef __has_builtin // Clang supports this |
24 | 24 |
|
25 | 25 | #if __has_builtin(__builtin_bswap16) |
|
56 | 56 | #endif // GNU C > 4.7 |
57 | 57 | #endif // __GNUC__ > 4 |
58 | 58 | #endif // __GNUC__ |
| 59 | +#endif // NO_COMPILER_UAA |
59 | 60 |
|
60 | 61 | // |
61 | 62 | // Byteorder |
|
198 | 199 | #define __BE64(x) BS64(x) |
199 | 200 | #define __LE64(x) (x) |
200 | 201 |
|
| 202 | +#define PUT_UA16(p, v) PUT_UA16LE(p, v) |
| 203 | +#define PUT_UA32(p, v) PUT_UA32LE(p, v) |
| 204 | +#define PUT_UA64(p, v) PUT_UA64LE(p, v) |
| 205 | + |
201 | 206 | #else // __BYTE_ORDER == __BIG_ENDIAN |
202 | 207 |
|
203 | 208 | #define __BE16(x) (x) |
|
207 | 212 | #define __BE64(x) (x) |
208 | 213 | #define __LE64(x) BS64(x) |
209 | 214 |
|
| 215 | +#define PUT_UA16(p, v) PUT_UA16BE(p, v) |
| 216 | +#define PUT_UA32(p, v) PUT_UA32BE(p, v) |
| 217 | +#define PUT_UA64(p, v) PUT_UA64BE(p, v) |
| 218 | + |
210 | 219 | #endif // __BYTE_ORDER |
211 | 220 |
|
| 221 | +#define BE16(x) __BE16(x) |
| 222 | +#define LE16(x) __LE16(x) |
| 223 | +#define BE32(x) __BE32(x) |
| 224 | +#define LE32(x) __LE32(x) |
| 225 | +#define BE64(x) __BE64(x) |
| 226 | +#define LE64(x) __LE64(x) |
| 227 | + |
| 228 | +#else |
| 229 | + |
| 230 | +extern unsigned short BE16(unsigned short x); |
| 231 | + |
| 232 | +extern unsigned short LE16(unsigned short x); |
| 233 | + |
| 234 | +extern unsigned int BE32(unsigned int x); |
| 235 | + |
| 236 | +extern unsigned int LE32(unsigned int x); |
| 237 | + |
| 238 | +extern unsigned long long BE64(unsigned long long x); |
| 239 | + |
| 240 | +extern unsigned long long LE64(unsigned long long x); |
| 241 | + |
| 242 | +#endif // defined(__BYTE_ORDER) |
| 243 | + |
| 244 | +#if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) \ |
| 245 | + && defined(BS16) && defined(BS32) && defined(BS64) &&!defined(NO_COMPILER_UAA) |
| 246 | + |
212 | 247 | #define PUT_UAA64BE(p, v, i) ( UAA64(p, i) = __BE64(v) ) |
213 | 248 | #define PUT_UAA32BE(p, v, i) ( UAA32(p, i) = __BE32(v) ) |
214 | 249 | #define PUT_UAA16BE(p, v, i) ( UAA16(p, i) = __BE16(v) ) |
|
225 | 260 | #define GET_UAA32LE(p, i) __LE32(UAA32(p, i)) |
226 | 261 | #define GET_UAA16LE(p, i) __LE16(UAA16(p, i)) |
227 | 262 |
|
228 | | -#define BE16(x) __BE16(x) |
229 | | -#define LE16(x) __LE16(x) |
230 | | -#define BE32(x) __BE32(x) |
231 | | -#define LE32(x) __LE32(x) |
232 | | -#define BE64(x) __BE64(x) |
233 | | -#define LE64(x) __LE64(x) |
234 | 263 |
|
235 | 264 | #else // ! defined(__BYTE_ORDER) |
236 | 265 |
|
237 | | -extern void PUT_UAA64BE(void *p, unsigned long long v, unsigned int i); |
| 266 | +extern void PUT_UAA64BE(void* p, unsigned long long v, unsigned int i); |
238 | 267 |
|
239 | | -extern void PUT_UAA32BE(void *p, unsigned int v, unsigned int i); |
| 268 | +extern void PUT_UAA32BE(void* p, unsigned int v, unsigned int i); |
240 | 269 |
|
241 | | -extern void PUT_UAA16BE(void *p, unsigned short v, unsigned int i); |
| 270 | +extern void PUT_UAA16BE(void* p, unsigned short v, unsigned int i); |
242 | 271 |
|
243 | 272 |
|
244 | | -extern void PUT_UAA64LE(void *p, unsigned long long v, unsigned int i); |
| 273 | +extern void PUT_UAA64LE(void* p, unsigned long long v, unsigned int i); |
245 | 274 |
|
246 | | -extern void PUT_UAA32LE(void *p, unsigned int v, unsigned int i); |
| 275 | +extern void PUT_UAA32LE(void* p, unsigned int v, unsigned int i); |
247 | 276 |
|
248 | | -extern void PUT_UAA16LE(void *p, unsigned short v, unsigned int i); |
| 277 | +extern void PUT_UAA16LE(void* p, unsigned short v, unsigned int i); |
249 | 278 |
|
250 | 279 |
|
251 | | -extern unsigned long long GET_UAA64BE(void *p, unsigned int i); |
| 280 | +extern unsigned long long GET_UAA64BE(void* p, unsigned int i); |
252 | 281 |
|
253 | | -extern unsigned int GET_UAA32BE(void *p, unsigned int i); |
| 282 | +extern unsigned int GET_UAA32BE(void* p, unsigned int i); |
254 | 283 |
|
255 | | -extern unsigned short GET_UAA16BE(void *p, unsigned int i); |
| 284 | +extern unsigned short GET_UAA16BE(void* p, unsigned int i); |
256 | 285 |
|
257 | 286 |
|
258 | | -extern unsigned long long GET_UAA64LE(void *p, unsigned int i); |
| 287 | +extern unsigned long long GET_UAA64LE(void* p, unsigned int i); |
259 | 288 |
|
260 | | -extern unsigned int GET_UAA32LE(void *p, unsigned int i); |
| 289 | +extern unsigned int GET_UAA32LE(void* p, unsigned int i); |
261 | 290 |
|
262 | | -extern unsigned short GET_UAA16LE(void *p, unsigned int i); |
263 | | - |
264 | | - |
265 | | -extern unsigned short BE16(unsigned short x); |
266 | | - |
267 | | -extern unsigned short LE16(unsigned short x); |
268 | | - |
269 | | -extern unsigned int BE32(unsigned int x); |
270 | | - |
271 | | -extern unsigned int LE32(unsigned int x); |
272 | | - |
273 | | -extern unsigned long long BE64(unsigned long long x); |
274 | | - |
275 | | -extern unsigned long long LE64(unsigned long long x); |
| 291 | +extern unsigned short GET_UAA16LE(void* p, unsigned int i); |
| 292 | +#endif |
276 | 293 |
|
277 | | -#endif // defined(__BYTE_ORDER) |
278 | 294 |
|
279 | 295 |
|
280 | 296 | #define PUT_UA64BE(p, v) PUT_UAA64BE(p, v, 0) |
|
0 commit comments