Unverified Commit ea5a5bbf by Michał Janiszewski Committed by GitHub

Add MSVC ARM64 support for reading clocks (#1052)

parent 8df87f6c
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
// declarations of some other intrinsics, breaking compilation. // declarations of some other intrinsics, breaking compilation.
// Therefore, we simply declare __rdtsc ourselves. See also // Therefore, we simply declare __rdtsc ourselves. See also
// http://connect.microsoft.com/VisualStudio/feedback/details/262047 // http://connect.microsoft.com/VisualStudio/feedback/details/262047
#if defined(COMPILER_MSVC) && !defined(_M_IX86) #if defined(COMPILER_MSVC) && !defined(_M_IX86) && !defined(_M_ARM64)
extern "C" uint64_t __rdtsc(); extern "C" uint64_t __rdtsc();
#pragma intrinsic(__rdtsc) #pragma intrinsic(__rdtsc)
#endif #endif
...@@ -114,6 +114,12 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() { ...@@ -114,6 +114,12 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() {
// when I know it will work. Otherwise, I'll use __rdtsc and hope // when I know it will work. Otherwise, I'll use __rdtsc and hope
// the code is being compiled with a non-ancient compiler. // the code is being compiled with a non-ancient compiler.
_asm rdtsc _asm rdtsc
#elif defined(COMPILER_MSVC) && defined(_M_ARM64)
// See https://docs.microsoft.com/en-us/cpp/intrinsics/arm64-intrinsics?view=vs-2019
// and https://reviews.llvm.org/D53115
int64_t virtual_timer_value;
virtual_timer_value = _ReadStatusReg(ARM64_CNTVCT);
return virtual_timer_value;
#elif defined(COMPILER_MSVC) #elif defined(COMPILER_MSVC)
return __rdtsc(); return __rdtsc();
#elif defined(BENCHMARK_OS_NACL) #elif defined(BENCHMARK_OS_NACL)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment