|
9 | 9 | #ifndef LLVM_LIBC_MACROS_ENDIAN_MACROS_H
|
10 | 10 | #define LLVM_LIBC_MACROS_ENDIAN_MACROS_H
|
11 | 11 |
|
| 12 | +#include "stdint-macros.h" |
| 13 | + |
12 | 14 | #define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
|
13 | 15 | #define BIG_ENDIAN __ORDER_BIG_ENDIAN__
|
14 | 16 | #define BYTE_ORDER __BYTE_ORDER__
|
15 | 17 |
|
| 18 | +#if BYTE_ORDER == LITTLE_ENDIAN |
| 19 | + |
| 20 | +#define htobe16(x) __builtin_bswap16((x)) |
| 21 | +#define htobe32(x) __builtin_bswap32((x)) |
| 22 | +#define htobe64(x) __builtin_bswap64((x)) |
| 23 | +#define htole16(x) ((uint16_t)(x)) |
| 24 | +#define htole32(x) ((uint32_t)(x)) |
| 25 | +#define htole64(x) ((uint64_t)(x)) |
| 26 | +#define be16toh(x) __builtin_bswap16((x)) |
| 27 | +#define be32toh(x) __builtin_bswap32((x)) |
| 28 | +#define be64toh(x) __builtin_bswap64((x)) |
| 29 | +#define le16toh(x) ((uint16_t)(x)) |
| 30 | +#define le32toh(x) ((uint32_t)(x)) |
| 31 | +#define le64toh(x) ((uint64_t)(x)) |
| 32 | + |
| 33 | +#else |
| 34 | + |
| 35 | +#define htobe16(x) ((uint16_t)(x)) |
| 36 | +#define htobe32(x) ((uint32_t)(x)) |
| 37 | +#define htobe64(x) ((uint64_t)(x)) |
| 38 | +#define htole16(x) __builtin_bswap16((x)) |
| 39 | +#define htole32(x) __builtin_bswap32((x)) |
| 40 | +#define htole64(x) __builtin_bswap64((x)) |
| 41 | +#define be16toh(x) ((uint16_t)(x)) |
| 42 | +#define be32toh(x) ((uint32_t)(x)) |
| 43 | +#define be64toh(x) ((uint64_t)(x)) |
| 44 | +#define le16toh(x) __builtin_bswap16((x)) |
| 45 | +#define le32toh(x) __builtin_bswap32((x)) |
| 46 | +#define le64toh(x) __builtin_bswap64((x)) |
| 47 | + |
| 48 | +#endif |
| 49 | + |
16 | 50 | #endif // LLVM_LIBC_MACROS_ENDIAN_MACROS_H
|
0 commit comments