Fixed: __rdtsc() under old versions of GCC

This commit is contained in:
kervala 2016-01-04 19:26:25 +01:00
parent 5956441186
commit 0f4a307e18

View file

@ -39,7 +39,7 @@
#endif #endif
#if defined(NL_CPU_INTEL) && defined(NL_COMP_GCC) #if defined(NL_CPU_INTEL) && defined(NL_COMP_GCC)
#include "x86intrin.h" #include <x86intrin.h>
#endif #endif
#include "string_common.h" #include "string_common.h"
@ -69,8 +69,20 @@ namespace NLMISC
inline uint64 rdtsc() 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()); return uint64(__rdtsc());
#endif
} }
#endif // NL_CPU_INTEL #endif // NL_CPU_INTEL