X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/a23bab96cb9eb7a869eb260336e5837e9c63d69b..31d0247cc58abc0b0720aa7e9972011c5a66995c:/utils/bits.h diff --git a/utils/bits.h b/utils/bits.h index 656eee5..28c7dd4 100644 --- a/utils/bits.h +++ b/utils/bits.h @@ -36,7 +36,7 @@ #include #include -#if __STDC_VERSION__ >= 199900l +#if __STDC_VERSION__ >= 199901 # include #endif @@ -184,21 +184,21 @@ typedef unsigned char octet, uint8; /* --- List macros --- */ #ifdef HAVE_UINT64 -# define DOUINTCONV(_) \ - _(8, 8, 8) \ - _(16, 16, 16) _(16, 16_L, 16l) _(16, 16_B, 16b) \ - _(24, 24, 24) _(24, 24_L, 24l) _(24, 24_B, 24b) \ - _(32, 32, 32) _(32, 32_L, 32l) _(32, 32_B, 32b) \ +# define DOUINTCONV_64(_) \ _(64, 64, 64) _(64, 64_L, 64l) _(64, 64_B, 64b) -# define DOUINTSZ(_) _(8) _(16) _(24) _(32) _(64) +# define DOUINTSZ_64(_) _(64) #else -# define DOUINTCONV(_) \ +# define DOUINTCONV_64(_) +# define DOUINTSZ_64(_) +#endif + +#define DOUINTCONV(_) \ _(8, 8, 8) \ _(16, 16, 16) _(16, 16_L, 16l) _(16, 16_B, 16b) \ _(24, 24, 24) _(24, 24_L, 24l) _(24, 24_B, 24b) \ - _(32, 32, 32) _(32, 32_L, 32l) _(32, 32_B, 32b) -# define DOUINTSZ(_) _(8) _(16) _(24) _(32) -#endif + _(32, 32, 32) _(32, 32_L, 32l) _(32, 32_B, 32b) \ + DOUINTCONV_64(_) +#define DOUINTSZ(_) _(8) _(16) _(24) _(32) _DOUINTSZ_64(_) /* --- Type coercions --- */ @@ -320,13 +320,13 @@ typedef unsigned char octet, uint8; /* --- Endianness swapping --- */ -#if GCC_VERSION_P(4, 8) +#if GCC_VERSION_P(4, 8) || CLANG_VERSION_P(3, 2) # define ENDSWAP16(x) ((uint16)__builtin_bswap16(x)) #endif -#if GCC_VERSION_P(4, 3) +#if GCC_VERSION_P(4, 3) || CLANG_VERSION_P(3, 2) # define ENDSWAP32(x) ((uint32)__builtin_bswap32(x)) #endif -#if GCC_VERSION_P(4, 3) && defined(HAVE_UINT64) +#if (GCC_VERSION_P(4, 3) || CLANG_VERSION_P(3, 2)) && defined(HAVE_UINT64) # define ENDSWAP64(x) ((uint64)__builtin_bswap64(x)) #endif @@ -427,7 +427,7 @@ typedef unsigned char octet, uint8; /* --- Unaligned access (GCC-specific) --- */ -#if GCC_VERSION_P(3, 3) && CHAR_BIT == 8 +#if (GCC_VERSION_P(3, 3) || CLANG_VERSION_P(3, 0)) && CHAR_BIT == 8 # define MLIB_MISALIGNED __attribute__((aligned(1), may_alias)) # if __SIZEOF_SHORT__ == 2 typedef MLIB_MISALIGNED unsigned short misaligned_uint16;