]> sourceware.org Git - glibc.git/commitdiff
Merge commit '9904dc47c88d9592ec66e599075436'
authorRoland McGrath <roland@hack.frob.com>
Tue, 10 Apr 2012 17:22:42 +0000 (10:22 -0700)
committerRoland McGrath <roland@hack.frob.com>
Tue, 10 Apr 2012 17:22:42 +0000 (10:22 -0700)
ChangeLog
bits/byteswap.h

index a85a1c06ef6715ba75c3be29b468a9ed67797159..cede7b8ee3bf62dcad6485df950cf5515de1523c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        * elf/dynamic-link.h (_ELF_DYNAMIC_DO_RELOC): Simplify
        conditions and remove no longer applicable assertion.
 
+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.
index 6e3ed3ffaeff6b4eadf9d1f7b0b4eb87d5b4817c..d818293a4c78016c9c4996348ffff35a1f457960 100644 (file)
@@ -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))
       (((x) & 0x0000ff00u) <<  8) | (((x) & 0x000000ffu) << 24))
 
 #ifdef __GNUC__
-# define __bswap_32(x) \
+# 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,7 +69,14 @@ __bswap_32 (unsigned int __bsx)
                     | (((x) & 0x000000000000ff00ull) << 40)                  \
                     | (((x) & 0x00000000000000ffull) << 56)))
 
-# define __bswap_64(x) \
+# 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;                  \
                 unsigned int __l[2]; } __w, __r;                             \
@@ -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)                                  \
This page took 0.055886 seconds and 5 git commands to generate.