From b2781fb5638afae7438b983a912ede126a8c5b85 Mon Sep 17 00:00:00 2001 From: James Page Date: Fri, 13 Mar 2015 19:46:04 +0000 Subject: [PATCH] Add support for PPC architecture, provide fallback Add high precision cpu cycles support for powerpc and powerpc64. Provide a fallback for other architectures and warn during compilation. Signed-off-by: James Page diff --git a/src/common/Cycles.h b/src/common/Cycles.h index 6e47cde..bb47d5c 100644 --- a/src/common/Cycles.h +++ b/src/common/Cycles.h @@ -72,8 +72,15 @@ class Cycles { uint64_t cntvct; asm volatile ("isb; mrs %0, cntvct_el0; isb; " : "=r" (cntvct) :: "memory"); return cntvct; +#elif defined(__powerpc__) || defined (__powerpc64__) + // Based on: + // https://github.com/randombit/botan/blob/net.randombit.botan/src/lib/entropy/hres_timer/hres_timer.cpp + uint32_t lo = 0, hi = 0; + asm volatile("mftbu %0; mftb %1" : "=r" (hi), "=r" (lo)); + return (((uint64_t)hi << 32) | lo); #else -#error No high-precision counter available for your OS/arch +#warning No high-precision counter available for your OS/arch + return 0; #endif }