34 lines
1.2 KiB
Diff
34 lines
1.2 KiB
Diff
|
From b2781fb5638afae7438b983a912ede126a8c5b85 Mon Sep 17 00:00:00 2001
|
||
|
From: James Page <james.page@ubuntu.com>
|
||
|
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 <james.page@ubuntu.com>
|
||
|
|
||
|
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
|
||
|
}
|
||
|
|