From 9792aee9bf75f6723eb0b41626123231b8bfc4f3 Mon Sep 17 00:00:00 2001 From: kervala Date: Mon, 4 Jan 2016 19:26:25 +0100 Subject: [PATCH] Fixed: __rdtsc() under old versions of GCC --- code/nel/include/nel/misc/common.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/code/nel/include/nel/misc/common.h b/code/nel/include/nel/misc/common.h index 191db5188..7dc394f24 100644 --- a/code/nel/include/nel/misc/common.h +++ b/code/nel/include/nel/misc/common.h @@ -39,7 +39,7 @@ #endif #if defined(NL_CPU_INTEL) && defined(NL_COMP_GCC) -#include "x86intrin.h" +#include #endif #include "string_common.h" @@ -69,8 +69,20 @@ namespace NLMISC inline uint64 rdtsc() { - // __rdtsc() is defined under all platforms +#if defined(NL_COMP_GCC) && !defined(CLANG_VERSION) && (GCC_VERSION <= 40405) +// for GCC versions that don't implement __rdtsc() +#ifdef NL_CPU_X86_64 + uint64 low, high; + __asm__ volatile("rdtsc" : "=a" (low), "=d" (high)); + return low | (high << 32); +#else + uint64 ticks; + __asm__ volatile("rdtsc" : "=A" (ticks)); + return ticks; +#endif +#else return uint64(__rdtsc()); +#endif } #endif // NL_CPU_INTEL