--- configure.cmake.orig 2020-06-23 15:10:16 UTC +++ configure.cmake @@ -69,6 +69,10 @@ IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686" AND CMAKE_CO SET(PLUGIN_QUERY_RESPONSE_TIME NO CACHE BOOL "Disabled, gcc is too old") ENDIF() +IF(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + MY_CHECK_AND_SET_COMPILER_FLAG("-moutline-atomics") +ENDIF() + IF(WITHOUT_DYNAMIC_PLUGINS) MESSAGE("Dynamic plugins are disabled.") ENDIF(WITHOUT_DYNAMIC_PLUGINS) --- include/my_rdtsc.h.orig 2020-06-23 15:10:16 UTC +++ include/my_rdtsc.h @@ -26,7 +26,7 @@ # ifndef __has_builtin # define __has_builtin(x) 0 /* Compatibility with non-clang compilers */ # endif -# if __has_builtin(__builtin_readcyclecounter) +# if __has_builtin(__builtin_readcyclecounter) && !defined(__aarch64__) # elif defined _WIN32 # include # elif defined __i386__ || defined __x86_64__ @@ -125,7 +125,7 @@ C_MODE_START */ static inline ulonglong my_timer_cycles(void) { -# if __has_builtin(__builtin_readcyclecounter) +# if __has_builtin(__builtin_readcyclecounter) && !defined(__aarch64__) return __builtin_readcyclecounter(); # elif defined _WIN32 || defined __i386__ || defined __x86_64__ return __rdtsc(); @@ -162,6 +162,12 @@ static inline ulonglong my_timer_cycles(void) { ulonglong result; __asm__ __volatile__ ("stck %0" : "=Q" (result) : : "cc"); + return result; + } +#elif defined(__aarch64) + { + ulonglong result; + __asm __volatile("mrs %0, CNTVCT_EL0" : "=&r" (result)); return result; } #elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME)