From d7d08bdedeecf168ef58c7e2bdbb4c39c1939aba Mon Sep 17 00:00:00 2001 From: Tulio Magno Quites Machado Filho Date: Fri, 2 Nov 2012 11:20:39 -0500 Subject: Direct __ppc_get_timebase to __builtin_ppc_get_timebase for GCC 4.8+. 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. --- sysdeps/powerpc/sys/platform/ppc.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'sysdeps/powerpc/sys/platform/ppc.h') 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 #include #include @@ -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 */ -- cgit v1.2.1