On 2012-02-28 20:39, Tijl Coosemans wrote:
> Author: tijl
> Date: Tue Feb 28 19:39:54 2012
> New Revision: 232266
> URL: http://svn.freebsd.org/changeset/base/232266
> 
> Log:
>   Copy amd64 endian.h to x86 and merge with i386 endian.h. Replace
>   amd64/i386/pc98 endian.h with stubs.
>   
>   In __bswap64_const(x) the conflict between 0xffUL and 0xffULL has been
>   resolved by reimplementing the macro in terms of __bswap32(x). As a side
>   effect __bswap64_var(x) is now implemented using two bswap instructions on
>   i386 and should be much faster. __bswap32_const(x) has been reimplemented
>   in terms of __bswap16(x) for consistency.
...
> +#define      __bswap32_const(_x)             \
> +     (((__uint32_t)__bswap16(_x) << 16) | __bswap16((_x) >> 16))
> +
> +#define      __bswap32(_x)                   \
> +     (__builtin_constant_p(_x) ?     \
> +         __bswap32_const((__uint32_t)(_x)) : __bswap32_var(_x))
> +
> +#define      __bswap64_const(_x)             \
> +     (((__uint64_t)__bswap32(_x) << 32) | __bswap32((_x) >> 32))

Hmm, shouldn't __bswap32_const() be implemented in terms of
__bswap16_const(), and similarly for __bswap64_const(), which should be
implemented in terms of __bswap32_const()?

The whole reason for the difficult dance with __builtin_constant_p is to
allow for compile-time resolving of bswap'd constants.  Invoking the
regular __bswap() macros doesn't gain you anything here.
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to