| /* COPYRIGHT (c) 2017 Obsidian Research Corporation. | |
| Licensed under BSD (MIT variant) or GPLv2. See COPYING. */ | |
| #ifndef _SPARSE_ENDIAN_H_ | |
| #define _SPARSE_ENDIAN_H_ | |
| #include_next <endian.h> | |
| #include <util/compiler.h> | |
| #undef htobe16 | |
| #undef htole16 | |
| #undef be16toh | |
| #undef le16toh | |
| #undef htobe32 | |
| #undef htole32 | |
| #undef be32toh | |
| #undef le32toh | |
| #undef htobe64 | |
| #undef htole64 | |
| #undef be64toh | |
| #undef le64toh | |
| /* These do not actually work, but this trivially ensures that sparse sees all | |
| * the types. */ | |
| #define htobe16(x) ((__force __be16)__builtin_bswap16(x)) | |
| #define htole16(x) ((__force __le16)__builtin_bswap16(x)) | |
| #define be16toh(x) ((uint16_t)__builtin_bswap16((__force uint16_t)(__be16)(x))) | |
| #define le16toh(x) ((uint16_t)__builtin_bswap16((__force uint16_t)(__le16)(x))) | |
| #define htobe32(x) ((__force __be32)__builtin_bswap32(x)) | |
| #define htole32(x) ((__force __le32)__builtin_bswap32(x)) | |
| #define be32toh(x) ((uint32_t)__builtin_bswap32((__force uint32_t)(__be32)(x))) | |
| #define le32toh(x) ((uint32_t)__builtin_bswap32((__force uint32_t)(__le32)(x))) | |
| #define htobe64(x) ((__force __be64)__builtin_bswap64(x)) | |
| #define htole64(x) ((__force __le64)__builtin_bswap64(x)) | |
| #define be64toh(x) ((uint64_t)__builtin_bswap64((__force uint64_t)(__be64)(x))) | |
| #define le64toh(x) ((uint64_t)__builtin_bswap64((__force uint64_t)(__le64)(x))) | |
| #endif |