mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Use __builtin_bswap32/64 in __bswap_32/64 for GCC >= 4.2
This commit is contained in:
parent
f8887d0a5f
commit
9904dc47c8
@ -1,3 +1,9 @@
|
||||
2012-04-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* bits/byteswap.h: Include <features.h>.
|
||||
(__bswap_32): Use __builtin_bswap32 for GCC >= 4.2.
|
||||
(__bswap_64): Use __builtin_bswap64 for GCC >= 4.2.
|
||||
|
||||
2012-04-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* bits/byteswap.h (__bswap_16): Removed.
|
||||
|
@ -23,6 +23,8 @@
|
||||
#ifndef _BITS_BYTESWAP_H
|
||||
#define _BITS_BYTESWAP_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
/* Swap bytes in 16 bit value. */
|
||||
#define __bswap_constant_16(x) \
|
||||
((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8))
|
||||
@ -36,9 +38,17 @@
|
||||
(((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))
|
||||
|
||||
#ifdef __GNUC__
|
||||
# if __GNUC_PREREQ (4, 2)
|
||||
static __inline unsigned int
|
||||
__bswap_32 (unsigned int __bsx)
|
||||
{
|
||||
return __builtin_bswap32 (__bsx);
|
||||
}
|
||||
# else
|
||||
# define __bswap_32(x) \
|
||||
(__extension__ \
|
||||
({ register unsigned int __bsx = (x); __bswap_constant_32 (__bsx); }))
|
||||
# endif
|
||||
#else
|
||||
static __inline unsigned int
|
||||
__bswap_32 (unsigned int __bsx)
|
||||
@ -47,8 +57,8 @@ __bswap_32 (unsigned int __bsx)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ >= 2
|
||||
/* Swap bytes in 64 bit value. */
|
||||
#if __GNUC_PREREQ (2, 0)
|
||||
# define __bswap_constant_64(x) \
|
||||
(__extension__ ((((x) & 0xff00000000000000ull) >> 56) \
|
||||
| (((x) & 0x00ff000000000000ull) >> 40) \
|
||||
@ -59,6 +69,13 @@ __bswap_32 (unsigned int __bsx)
|
||||
| (((x) & 0x000000000000ff00ull) << 40) \
|
||||
| (((x) & 0x00000000000000ffull) << 56)))
|
||||
|
||||
# if __GNUC_PREREQ (4, 2)
|
||||
static __inline unsigned long long int
|
||||
__bswap_64 (unsigned long long int __bsx)
|
||||
{
|
||||
return __builtin_bswap64 (__bsx);
|
||||
}
|
||||
# else
|
||||
# define __bswap_64(x) \
|
||||
(__extension__ \
|
||||
({ union { __extension__ unsigned long long int __ll; \
|
||||
@ -72,6 +89,7 @@ __bswap_32 (unsigned int __bsx)
|
||||
__r.__l[1] = __bswap_32 (__w.__l[0]); \
|
||||
} \
|
||||
__r.__ll; }))
|
||||
# endif
|
||||
#elif __GLIBC_HAVE_LONG_LONG
|
||||
# define __bswap_constant_64(x) \
|
||||
((((x) & 0xff00000000000000ull) >> 56) \
|
||||
|
Loading…
Reference in New Issue
Block a user