diff options
author | Rich Felker <dalias@aerifal.cx> | 2012-04-22 11:08:01 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012-04-22 11:08:01 -0400 |
commit | 8705a0f1afdf6e6eb5d2e325dafb3be7e58f259c (patch) | |
tree | 73a4ecd8bef28cd229a42d585bc3173a9e4b1bd8 | |
parent | b1b3d3525bbc50a6781f57bfe423c7e18d64f625 (diff) | |
download | musl-8705a0f1afdf6e6eb5d2e325dafb3be7e58f259c.tar.gz musl-8705a0f1afdf6e6eb5d2e325dafb3be7e58f259c.tar.bz2 musl-8705a0f1afdf6e6eb5d2e325dafb3be7e58f259c.tar.xz musl-8705a0f1afdf6e6eb5d2e325dafb3be7e58f259c.zip |
add some ugly byte swapping cruft in endian.h
-rw-r--r-- | include/endian.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/include/endian.h b/include/endian.h index bcf67662..6e14716e 100644 --- a/include/endian.h +++ b/include/endian.h @@ -8,10 +8,69 @@ #include <bits/endian.h> #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + #define BIG_ENDIAN __BIG_ENDIAN #define LITTLE_ENDIAN __LITTLE_ENDIAN #define PDP_ENDIAN __PDP_ENDIAN #define BYTE_ORDER __BYTE_ORDER + +#include <stdint.h> + +static inline uint16_t __bswap16(uint16_t __x) +{ + return __x<<8 | __x>>8; +} + +static inline uint32_t __bswap32(uint32_t __x) +{ + return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24; +} + +static inline uint64_t __bswap64(uint64_t __x) +{ + return __bswap_32(__x)+0ULL<<32 | __bswap_32(__x>>32); +} + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define htobe16(x) __bswap16(x) +#define be16toh(x) __bswap16(x) +#define betoh16(x) __bswap16(x) +#define htobe32(x) __bswap32(x) +#define be32toh(x) __bswap32(x) +#define betoh32(x) __bswap32(x) +#define htobe64(x) __bswap64(x) +#define be64toh(x) __bswap64(x) +#define betoh64(x) __bswap64(x) +#define htole16(x) (uint16_t)(x) +#define le16toh(x) (uint16_t)(x) +#define letoh16(x) (uint16_t)(x) +#define htole32(x) (uint32_t)(x) +#define le32toh(x) (uint32_t)(x) +#define letoh32(x) (uint32_t)(x) +#define htole64(x) (uint64_t)(x) +#define le64toh(x) (uint64_t)(x) +#define letoh64(x) (uint64_t)(x) +#else +#define htobe16(x) (uint16_t)(x) +#define be16toh(x) (uint16_t)(x) +#define betoh16(x) (uint16_t)(x) +#define htobe32(x) (uint32_t)(x) +#define be32toh(x) (uint32_t)(x) +#define betoh32(x) (uint32_t)(x) +#define htobe64(x) (uint64_t)(x) +#define be64toh(x) (uint64_t)(x) +#define betoh64(x) (uint64_t)(x) +#define htole16(x) __bswap16(x) +#define le16toh(x) __bswap16(x) +#define letoh16(x) __bswap16(x) +#define htole32(x) __bswap32(x) +#define le32toh(x) __bswap32(x) +#define letoh32(x) __bswap32(x) +#define htole64(x) __bswap64(x) +#define le64toh(x) __bswap64(x) +#define letoh64(x) __bswap64(x) +#endif + #endif #endif |