From f47373c950e812208f5db14cf728a54c31f750bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= Date: Wed, 26 Dec 2012 14:30:48 -0300 Subject: [PATCH 1/2] include/bitops.h: Use the operating system byteswapping functions There is no need to reinvent the wheel. --- include/bitops.h | 69 +++++++++++++++----------------------------------------- 1 file changed, 18 insertions(+), 51 deletions(-) diff --git a/include/bitops.h b/include/bitops.h index 81375d0..89b418c 100644 --- a/include/bitops.h +++ b/include/bitops.h @@ -8,6 +8,9 @@ */ #include +#include +#include + #ifndef NBBY # define NBBY CHAR_BIT #endif @@ -22,63 +25,27 @@ /* * Byte swab macros (based on linux/byteorder/swab.h) */ -#define swab16(x) \ - ((uint16_t)( \ - (((uint16_t)(x) & (uint16_t)0x00ffU) << 8) | \ - (((uint16_t)(x) & (uint16_t)0xff00U) >> 8) )) - -#define swab32(x) \ - ((uint32_t)( \ - (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) | \ - (((uint32_t)(x) & (uint32_t)0x0000ff00UL) << 8) | \ - (((uint32_t)(x) & (uint32_t)0x00ff0000UL) >> 8) | \ - (((uint32_t)(x) & (uint32_t)0xff000000UL) >> 24) )) - -#define swab64(x) \ - ((uint64_t)( \ - (uint64_t)(((uint64_t)(x) & (uint64_t)0x00000000000000ffULL) << 56) | \ - (uint64_t)(((uint64_t)(x) & (uint64_t)0x000000000000ff00ULL) << 40) | \ - (uint64_t)(((uint64_t)(x) & (uint64_t)0x0000000000ff0000ULL) << 24) | \ - (uint64_t)(((uint64_t)(x) & (uint64_t)0x00000000ff000000ULL) << 8) | \ - (uint64_t)(((uint64_t)(x) & (uint64_t)0x000000ff00000000ULL) >> 8) | \ - (uint64_t)(((uint64_t)(x) & (uint64_t)0x0000ff0000000000ULL) >> 24) | \ - (uint64_t)(((uint64_t)(x) & (uint64_t)0x00ff000000000000ULL) >> 40) | \ - (uint64_t)(((uint64_t)(x) & (uint64_t)0xff00000000000000ULL) >> 56) )) - - -#ifdef WORDS_BIGENDIAN +#define swab16(x) bswap_16(x) -#define cpu_to_le16(x) swab16(x) -#define cpu_to_le32(x) swab32(x) -#define cpu_to_le64(x) swab64(x) -#define cpu_to_be16(x) ((uint16_t)(x)) -#define cpu_to_be32(x) ((uint32_t)(x)) -#define cpu_to_be64(x) ((uint64_t)(x)) +#define swab32(x) bswap_32(x) -#define le16_to_cpu(x) swab16(x) -#define le32_to_cpu(x) swab32(x) -#define le64_to_cpu(x) swab64(x) -#define be16_to_cpu(x) ((uint16_t)(x)) -#define be32_to_cpu(x) ((uint32_t)(x)) -#define be64_to_cpu(x) ((uint64_t)(x)) +#define swab64(x) bswap_64(x) -#else /* !WORDS_BIGENDIAN */ +#define cpu_to_le16(x) htole16(x) +#define cpu_to_le32(x) htole32(x) +#define cpu_to_le64(x) htole64(x) -#define cpu_to_le16(x) ((uint16_t)(x)) -#define cpu_to_le32(x) ((uint32_t)(x)) -#define cpu_to_le64(x) ((uint64_t)(x)) -#define cpu_to_be16(x) swab16(x) -#define cpu_to_be32(x) swab32(x) -#define cpu_to_be64(x) swab64(x) +#define cpu_to_be16(x) htobe16(x) +#define cpu_to_be32(x) htobe32(x) +#define cpu_to_be64(x) htobe64(x) -#define le16_to_cpu(x) ((uint16_t)(x)) -#define le32_to_cpu(x) ((uint32_t)(x)) -#define le64_to_cpu(x) ((uint64_t)(x)) -#define be16_to_cpu(x) swab16(x) -#define be32_to_cpu(x) swab32(x) -#define be64_to_cpu(x) swab64(x) +#define le16_to_cpu(x) le16toh(x) +#define le32_to_cpu(x) le32toh(x) +#define le64_to_cpu(x) le64toh(x) -#endif /* WORDS_BIGENDIAN */ +#define be16_to_cpu(x) be16toh(x) +#define be32_to_cpu(x) be32toh(x) +#define be64_to_cpu(x) be64toh(x) #endif /* BITOPS_H */ -- 1.8.0.2