From d9630aee882b7f36aeca5fb797ebd2a4aea81f03 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 10 Feb 2016 15:48:27 -0800 Subject: [PATCH] Add aarch64 support to src/cycleclock.h. From google3's base/cycleclock. --- src/cycleclock.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cycleclock.h b/src/cycleclock.h index 42541daf..31108046 100644 --- a/src/cycleclock.h +++ b/src/cycleclock.h @@ -99,6 +99,14 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() { _asm rdtsc #elif defined(COMPILER_MSVC) return __rdtsc(); +#elif defined(__aarch64__) + // System timer of ARMv8 runs at a different frequency than the CPU's. + // The frequency is fixed, typically in the range 1-50MHz. It can be + // read at CNTFRQ special register. We assume the OS has set up + // the virtual timer properly. + int64_t virtual_timer_value; + asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value)); + return virtual_timer_value; #elif defined(__ARM_ARCH) #if (__ARM_ARCH >= 6) // V6 is the earliest arch that has a standard cyclecount uint32_t pmccntr;