Merge branch 'StefanBruens-fix_aarch64_gettimecounter'

This commit is contained in:
Matthias Hochsteger 2021-03-15 08:17:42 +01:00
commit 52f21d6811
3 changed files with 13 additions and 6 deletions

View File

@ -71,7 +71,11 @@
#define NETGEN_ARCH_AMD64
#endif
#if defined(__arm64__) || defined(_M_ARM64)
#if defined(__aarch64__) || defined(_M_ARM64)
#define NETGEN_ARCH_ARM64
#endif
#if defined(__arm__) || defined(_M_ARM)
#define NETGEN_ARCH_ARM
#endif

View File

@ -26,7 +26,7 @@
#include "simd_avx512.hpp"
#endif
#ifdef __arm64__
#ifdef __aarch64__
#include "simd_arm64.hpp"
#endif

View File

@ -10,7 +10,7 @@
#include "ngcore_api.hpp" // for NGCORE_API and CPU arch macros
#if defined(__APPLE__) && defined(NETGEN_ARCH_ARM)
#if defined(__APPLE__) && defined(NETGEN_ARCH_ARM64)
#include <mach/mach_time.h>
#endif
@ -58,12 +58,15 @@ namespace ngcore
inline TTimePoint GetTimeCounter() noexcept
{
#if defined(__APPLE__) && defined(NETGEN_ARCH_ARM)
#if defined(__APPLE__) && defined(NETGEN_ARCH_ARM64)
return mach_absolute_time();
#elif defined(NETGEN_ARCH_AMD64)
return __rdtsc();
#elif defined(NETGEN_ARCH_ARM)
return __builtin_readcyclecounter();
#elif defined(NETGEN_ARCH_ARM64) && defined(__GNUC__)
// __GNUC__ is also defined by CLANG. Use inline asm to read Generic Timer
unsigned long long tics;
__asm __volatile("mrs %0, CNTVCT_EL0" : "=&r" (tics));
return tics;
#else
#warning "Unsupported CPU architecture"
return 0;