Make caa_get_cycles() read from the Time Base register with only 1 instruction.
Signed-off-by: Tulio Magno Quites Machado Filho <[email protected]> --- urcu/arch/ppc.h | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/urcu/arch/ppc.h b/urcu/arch/ppc.h index d7317bb..2b606d0 100644 --- a/urcu/arch/ppc.h +++ b/urcu/arch/ppc.h @@ -48,10 +48,20 @@ extern "C" { rval; \ }) +#define mftb() \ + ({ \ + unsigned long long rval; \ + asm volatile("mftb %0" : "=r" (rval)); \ + rval; \ + }) + typedef unsigned long long cycles_t; static inline cycles_t caa_get_cycles (void) { +#ifdef __powerpc64__ + return (cycles_t) mftb(); +#else long h, l; for (;;) { @@ -62,6 +72,7 @@ static inline cycles_t caa_get_cycles (void) if (mftbu() == h) return (((cycles_t) h) << 32) + l; } +#endif } #ifdef __cplusplus -- 1.7.4.4 _______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
