diff options
author | Morph <[email protected]> | 2023-03-22 16:40:41 -0400 |
---|---|---|
committer | Morph <[email protected]> | 2023-03-27 17:45:22 -0400 |
commit | 981bc8aa1c924eabc55f63f9671324c548c72d59 (patch) | |
tree | fb41c166e32bf99e2dd0f96ec92e4b59fed8ce9c /src/common/x64 | |
parent | e1bce50d8ba139cf71b4225b4a416d84c65f3e0e (diff) | |
download | yuzu-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.cpp | 13 | ||||
-rw-r--r-- | src/common/x64/native_clock.cpp | 13 |
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 |