summaryrefslogtreecommitdiff
path: root/sysdeps/powerpc/sys/platform/ppc.h
diff options
context:
space:
mode:
authorTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>2012-11-02 11:20:39 -0500
committerRyan S. Arnold <rsa@linux.vnet.ibm.com>2012-11-02 11:27:11 -0500
commitd7d08bdedeecf168ef58c7e2bdbb4c39c1939aba (patch)
tree137adbbefbeffde1956f8b3be1918e8e8caf7e58 /sysdeps/powerpc/sys/platform/ppc.h
parentdcdae19a3f8eafb7aa597b1d5cb770db76509ec4 (diff)
downloadglibc-d7d08bdedeecf168ef58c7e2bdbb4c39c1939aba.tar.gz
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.
Diffstat (limited to 'sysdeps/powerpc/sys/platform/ppc.h')
-rw-r--r--sysdeps/powerpc/sys/platform/ppc.h11
1 files changed, 8 insertions, 3 deletions
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 */