aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/common/x64
diff options
context:
space:
mode:
authorMorph <[email protected]>2023-03-22 16:40:41 -0400
committerMorph <[email protected]>2023-03-27 17:45:22 -0400
commit981bc8aa1c924eabc55f63f9671324c548c72d59 (patch)
treefb41c166e32bf99e2dd0f96ec92e4b59fed8ce9c /src/common/x64
parente1bce50d8ba139cf71b4225b4a416d84c65f3e0e (diff)
downloadyuzu-mainline-981bc8aa1c924eabc55f63f9671324c548c72d59.tar.gz
yuzu-mainline-981bc8aa1c924eabc55f63f9671324c548c72d59.zip
x64: Simplify RDTSC on non-MSVC compilers
Co-Authored-By: liamwhite <[email protected]>
Diffstat (limited to 'src/common/x64')
-rw-r--r--src/common/x64/cpu_wait.cpp13
-rw-r--r--src/common/x64/native_clock.cpp13
2 files changed, 10 insertions, 16 deletions
diff --git a/src/common/x64/cpu_wait.cpp b/src/common/x64/cpu_wait.cpp
index 1fab0bfe8..cfeef6a3d 100644
--- a/src/common/x64/cpu_wait.cpp
+++ b/src/common/x64/cpu_wait.cpp
@@ -33,16 +33,13 @@ __forceinline static void TPAUSE() {
}
#else
static u64 FencedRDTSC() {
- u64 result;
+ u64 eax;
+ u64 edx;
asm volatile("lfence\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() {
diff --git a/src/common/x64/native_clock.cpp b/src/common/x64/native_clock.cpp
index 76c66e7ee..277b00662 100644
--- a/src/common/x64/native_clock.cpp
+++ b/src/common/x64/native_clock.cpp
@@ -27,16 +27,13 @@ __forceinline static u64 FencedRDTSC() {
}
#else
static u64 FencedRDTSC() {
- u64 result;
+ u64 eax;
+ u64 edx;
asm volatile("lfence\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