Browse Source

native_clock: Internal linkage for FencedRDTSC

__forceinline required on MSVC for function to be inlined
nce_cpp
Merry 4 years ago
parent
commit
42d6a01039
  1. 6
      src/common/x64/native_clock.cpp

6
src/common/x64/native_clock.cpp

@ -16,15 +16,17 @@
namespace Common { namespace Common {
inline u64 FencedRDTSC() {
#ifdef _MSC_VER #ifdef _MSC_VER
__forceinline static u64 FencedRDTSC() {
_mm_lfence(); _mm_lfence();
_ReadWriteBarrier(); _ReadWriteBarrier();
const u64 result = __rdtsc(); const u64 result = __rdtsc();
_mm_lfence(); _mm_lfence();
_ReadWriteBarrier(); _ReadWriteBarrier();
return result; return result;
}
#else #else
static u64 FencedRDTSC() {
u64 result; u64 result;
asm volatile("lfence\n\t" asm volatile("lfence\n\t"
"rdtsc\n\t" "rdtsc\n\t"
@ -35,8 +37,8 @@ inline u64 FencedRDTSC() {
: :
: "rdx", "memory", "cc"); : "rdx", "memory", "cc");
return result; return result;
#endif
} }
#endif
u64 EstimateRDTSCFrequency() { u64 EstimateRDTSCFrequency() {
// Discard the first result measuring the rdtsc. // Discard the first result measuring the rdtsc.

Loading…
Cancel
Save