Direct __ppc_get_timebase to __builtin_ppc_get_timebase for GCC 4.8+.
authorTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
Fri, 2 Nov 2012 16:20:39 +0000 (11:20 -0500)
committerRyan S. Arnold <rsa@linux.vnet.ibm.com>
Fri, 2 Nov 2012 16:27:11 +0000 (11:27 -0500)
Adapts __ppc_get_timebase to the upcoming GCC 4.8 that provides
__builtin_ppc_get_timebase.  Building applicationns with previous
versions of GCC will continue to use the internal implementation.

ChangeLog
sysdeps/powerpc/sys/platform/ppc.h

index 5dad3dc..d85ffee 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-11-02  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>
+
+       * sysdeps/powerpc/sys/platform/ppc.h (__ppc_get_timebase): Use
+       __builtin_ppc_get_timebase when building with GCC >= 4.8 instead
+       of the internal implementation.
+
 2012-11-02  Joseph Myers  <joseph@codesourcery.com>
 
        * include/sys/syslog.h [_ISOMAC]: Disable all contents of file
index 3780f57..58948e8 100644 (file)
@@ -19,6 +19,7 @@
 #ifndef _SYS_PLATFORM_PPC_H
 #define _SYS_PLATFORM_PPC_H    1
 
+#include <features.h>
 #include <stdint.h>
 #include <bits/ppc.h>
 
 static inline uint64_t
 __ppc_get_timebase (void)
 {
-#ifdef __powerpc64__
+#if __GNUC_PREREQ (4, 8)
+  return __builtin_ppc_get_timebase ();
+#else
+# ifdef __powerpc64__
   uint64_t __tb;
   /* "volatile" is necessary here, because the user expects this assembly
      isn't moved after an optimization.  */
   __asm__ volatile ("mfspr %0, 268" : "=r" (__tb));
   return __tb;
-#else  /* not __powerpc64__ */
+# else  /* not __powerpc64__ */
   uint32_t __tbu, __tbl, __tmp; \
   __asm__ volatile ("0:\n\t"
                    "mftbu %0\n\t"
@@ -42,7 +46,8 @@ __ppc_get_timebase (void)
                    "bne- 0b"
                    : "=r" (__tbu), "=r" (__tbl), "=r" (__tmp));
   return (((uint64_t) __tbu << 32) | __tbl);
-#endif  /* not __powerpc64__ */
+# endif  /* not __powerpc64__ */
+#endif
 }
 
 #endif  /* sys/platform/ppc.h */