1 | #ifndef ETHERBOOT_BYTESWAP_H |
---|
2 | #define ETHERBOOT_BYTESWAP_H |
---|
3 | |
---|
4 | FILE_LICENCE ( GPL2_OR_LATER ); |
---|
5 | |
---|
6 | #include "endian.h" |
---|
7 | #include "bits/byteswap.h" |
---|
8 | |
---|
9 | #define __bswap_constant_16(x) \ |
---|
10 | ((uint16_t)((((uint16_t)(x) & 0x00ff) << 8) | \ |
---|
11 | (((uint16_t)(x) & 0xff00) >> 8))) |
---|
12 | |
---|
13 | #define __bswap_constant_32(x) \ |
---|
14 | ((uint32_t)((((uint32_t)(x) & 0x000000ffU) << 24) | \ |
---|
15 | (((uint32_t)(x) & 0x0000ff00U) << 8) | \ |
---|
16 | (((uint32_t)(x) & 0x00ff0000U) >> 8) | \ |
---|
17 | (((uint32_t)(x) & 0xff000000U) >> 24))) |
---|
18 | |
---|
19 | #define __bswap_constant_64(x) \ |
---|
20 | ((uint64_t)((((uint64_t)(x) & 0x00000000000000ffULL) << 56) | \ |
---|
21 | (((uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \ |
---|
22 | (((uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \ |
---|
23 | (((uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \ |
---|
24 | (((uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \ |
---|
25 | (((uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \ |
---|
26 | (((uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \ |
---|
27 | (((uint64_t)(x) & 0xff00000000000000ULL) >> 56))) |
---|
28 | |
---|
29 | #define __bswap_16(x) \ |
---|
30 | ((uint16_t)(__builtin_constant_p(x) ? \ |
---|
31 | __bswap_constant_16(x) : \ |
---|
32 | __bswap_variable_16(x))) |
---|
33 | |
---|
34 | #define __bswap_32(x) \ |
---|
35 | ((uint32_t)(__builtin_constant_p(x) ? \ |
---|
36 | __bswap_constant_32(x) : \ |
---|
37 | __bswap_variable_32(x))) |
---|
38 | |
---|
39 | #define __bswap_64(x) \ |
---|
40 | ((uint64_t)(__builtin_constant_p(x) ? \ |
---|
41 | __bswap_constant_64(x) : \ |
---|
42 | __bswap_variable_64(x))) |
---|
43 | |
---|
44 | #if __BYTE_ORDER == __LITTLE_ENDIAN |
---|
45 | #include "little_bswap.h" |
---|
46 | #endif |
---|
47 | #if __BYTE_ORDER == __BIG_ENDIAN |
---|
48 | #include "big_bswap.h" |
---|
49 | #endif |
---|
50 | |
---|
51 | /* Make routines available to all */ |
---|
52 | #define swap64(x) __bswap_64(x) |
---|
53 | #define swap32(x) __bswap_32(x) |
---|
54 | #define swap16(x) __bswap_16(x) |
---|
55 | #define bswap_64(x) __bswap_64(x) |
---|
56 | #define bswap_32(x) __bswap_32(x) |
---|
57 | #define bswap_16(x) __bswap_16(x) |
---|
58 | |
---|
59 | #endif /* ETHERBOOT_BYTESWAP_H */ |
---|