Просмотр исходного кода

x64: Simplify RDTSC on non-MSVC compilers

Co-Authored-By: liamwhite <liamwhite@users.noreply.github.com>
Morph 3 лет назад
Родитель
Сommit
981bc8aa1c
2 измененных файлов с 10 добавлено и 16 удалено
  1. 5 8
      src/common/x64/cpu_wait.cpp
  2. 5 8
      src/common/x64/native_clock.cpp

+ 5 - 8
src/common/x64/cpu_wait.cpp

@@ -33,16 +33,13 @@ __forceinline static void TPAUSE() {
 }
 }
 #else
 #else
 static u64 FencedRDTSC() {
 static u64 FencedRDTSC() {
-    u64 result;
+    u64 eax;
+    u64 edx;
     asm volatile("lfence\n\t"
     asm volatile("lfence\n\t"
                  "rdtsc\n\t"
                  "rdtsc\n\t"
-                 "shl $32, %%rdx\n\t"
-                 "or %%rdx, %0\n\t"
-                 "lfence"
-                 : "=a"(result)
-                 :
-                 : "rdx", "memory", "cc");
-    return result;
+                 "lfence\n\t"
+                 : "=a"(eax), "=d"(edx));
+    return (edx << 32) | eax;
 }
 }
 
 
 static void TPAUSE() {
 static void TPAUSE() {

+ 5 - 8
src/common/x64/native_clock.cpp

@@ -27,16 +27,13 @@ __forceinline static u64 FencedRDTSC() {
 }
 }
 #else
 #else
 static u64 FencedRDTSC() {
 static u64 FencedRDTSC() {
-    u64 result;
+    u64 eax;
+    u64 edx;
     asm volatile("lfence\n\t"
     asm volatile("lfence\n\t"
                  "rdtsc\n\t"
                  "rdtsc\n\t"
-                 "shl $32, %%rdx\n\t"
-                 "or %%rdx, %0\n\t"
-                 "lfence"
-                 : "=a"(result)
-                 :
-                 : "rdx", "memory", "cc");
-    return result;
+                 "lfence\n\t"
+                 : "=a"(eax), "=d"(edx));
+    return (edx << 32) | eax;
 }
 }
 #endif
 #endif