--- nono/lib/bitops.h 2026/04/29 17:05:26 1.1.1.4 +++ nono/lib/bitops.h 2026/04/29 17:05:35 1.1.1.5 @@ -12,17 +12,39 @@ #include "header.h" -#if defined(HAVE___BUILTIN_BITREVERSE8) -#define bitrev(x) __builtin_bitreverse8(x) +#if defined(HAVE___BUILTIN_BITREVERSE8) && \ + defined(HAVE___BUILTIN_BITREVERSE16) && \ + defined(HAVE___BUILTIN_BITREVERSE32) +#define HAVE___BUILTIN_BITREVERSE +#endif + +#if defined(HAVE___BUILTIN_BITREVERSE) +#define bitrev8(x) __builtin_bitreverse8(x) +#define bitrev16(x) __builtin_bitreverse16(x) +#define bitrev32(x) __builtin_bitreverse32(x) #else extern const uint8 bitrev_table[256]; // 8ビットを左右反転する static inline uint8 -bitrev(uint8 x) +bitrev8(uint8 x) { return bitrev_table[x]; } + +// 16ビットを左右反転する +static inline uint16 +bitrev16(uint16 x) +{ + return (bitrev8(x & 0xff) << 8) | bitrev8(x >> 8); +} + +// 32ビットを左右反転する +static inline uint32 +bitrev32(uint32 x) +{ + return (bitrev16(x & 0xffff) << 16) | bitrev16(x >> 16); +} #endif // 左ローテート