diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | sysdeps/powerpc/sys/platform/ppc.h | 11 |
2 files changed, 14 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index 5dad3dc1f2..d85ffee2d6 100644 --- 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 diff --git a/sysdeps/powerpc/sys/platform/ppc.h b/sysdeps/powerpc/sys/platform/ppc.h index 3780f57ba1..58948e837a 100644 --- a/sysdeps/powerpc/sys/platform/ppc.h +++ b/sysdeps/powerpc/sys/platform/ppc.h @@ -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> @@ -26,13 +27,16 @@ 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 */ |