# HG changeset patch # User michael # Date 1116711427 0 # Node ID 41ae70d266fdb7683e0e2828bcf8ef781fd61b26 # Parent 77ba1f65361973d67cee1fe9d2db8cc286db0e14 START/STOP_TIMER for ppc32 by (Luca Barbato: lu_zero, gentoo org) diff -r 77ba1f653619 -r 41ae70d266fd common.h --- a/common.h Sat May 21 19:31:16 2005 +0000 +++ b/common.h Sat May 21 21:37:07 2005 +0000 @@ -456,9 +456,9 @@ } #endif -#if defined(ARCH_X86) || defined(ARCH_X86_64) +#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_POWERPC) #if defined(ARCH_X86_64) -static inline uint64_t rdtsc(void) +static inline uint64_t read_time(void) { uint64_t a, d; asm volatile( "rdtsc\n\t" @@ -466,8 +466,8 @@ ); return (d << 32) | (a & 0xffffffff); } -#else -static inline long long rdtsc(void) +#elif defined(ARCH_X86) +static inline long long read_time(void) { long long l; asm volatile( "rdtsc\n\t" @@ -475,14 +475,33 @@ ); return l; } +#else //FIXME check ppc64 +static inline uint64_t read_time(void) +{ + uint32_t tbu, tbl, temp; + + /* from section 2.2.1 of the 32-bit PowerPC PEM */ + __asm__ __volatile__( + "1:\n" + "mftbu %2\n" + "mftb %0\n" + "mftbu %1\n" + "cmpw %2,%1\n" + "bne 1b\n" + : "=r"(tbl), "=r"(tbu), "=r"(temp) + : + : "cc"); + + return (((uint64_t)tbu)<<32) | (uint64_t)tbl; +} #endif #define START_TIMER \ uint64_t tend;\ -uint64_t tstart= rdtsc();\ +uint64_t tstart= read_time();\ #define STOP_TIMER(id) \ -tend= rdtsc();\ +tend= read_time();\ {\ static uint64_t tsum=0;\ static int tcount=0;\