/* 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 #include #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