[m-rev.] for review: Check C compiler supports __builtin_bswap functions.

Peter Wang novalazy at gmail.com
Mon Mar 19 15:02:05 AEDT 2018


On Mon, 19 Mar 2018 14:40:59 +1100, Peter Wang <novalazy at gmail.com> wrote:
> diff --git a/runtime/mercury_conf.h.in b/runtime/mercury_conf.h.in
> index 8801b6805..b7b613f17 100644
> --- a/runtime/mercury_conf.h.in
> +++ b/runtime/mercury_conf.h.in
> @@ -363,6 +363,9 @@
>  #undef  MR_HAVE_FINITE
>  #undef  MR_HAVE_FESETROUND
>  #undef  MR_HAVE_FMA
> +#undef  MR_HAVE_BUILTIN_BSWAP16
> +#undef  MR_HAVE_BUILTIN_BSWAP32
> +#undef  MR_HAVE_BUILTIN_BSWAP64

I've now added comments describing these macros above.

> diff --git a/runtime/mercury_int.h b/runtime/mercury_int.h
> index bb8fbdf6f..9620953ff 100644
> --- a/runtime/mercury_int.h
> +++ b/runtime/mercury_int.h
> @@ -94,7 +94,7 @@
>  extern MR_Integer MR_hash_int64(int64_t);
>  extern MR_Integer MR_hash_uint64(uint64_t);
>  
> -#if defined(MR_GNUC) || defined(MR_CLANG)
> +#if defined(MR_HAVE_BUILTIN_BSWAP16)
>    #define MR_uint16_reverse_bytes(U) __builtin_bswap16((U))
>  #elif defined(MR_MSVC)
>    #define MR_uint16_reverse_bytes(U) _byteswap_ushort((U))
> @@ -103,7 +103,7 @@ extern MR_Integer MR_hash_uint64(uint64_t);
>                                        ((U & 0x00ff) << 8))
>  #endif
>  
> -#if defined(MR_GNUC) || defined(MR_CLANG)
> +#if defined(MR_HAVE_BUILTIN_BSWAP32)
>    #define MR_uint32_reverse_bytes(U) __builtin_bswap32((U))
>  #elif defined(MR_MSVC)
>    #define MR_uint32_reverse_bytes(U) _byteswap_ulong((U))
> @@ -114,7 +114,7 @@ extern MR_Integer MR_hash_uint64(uint64_t);
>                                        (U & UINT32_C(0xff000000)) >> 24 )
>  #endif
>  
> -#if defined(MR_GNUC) || defined(MR_CLANG)
> +#if defined(MR_HAVE_BUILTIN_BSWAP64)
>    #define MR_uint64_reverse_bytes(U) __builtin_bswap64((U))
>  #elif defined(MR_MSVC)
>    #define MR_uint64_reverse_bytes(U) _byteswap_uint64((UU))

UU is a typo, yes?

Peter


More information about the reviews mailing list