summaryrefslogtreecommitdiffstats
path: root/src/common/x64
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2020-03-21 17:23:13 +0100
committerFernando Sahmkow <fsahmkow27@gmail.com>2020-06-27 17:35:55 +0200
commit534466754f381e90f5f6475a0c02031242a5c256 (patch)
treebac4629fa909493aec359051c76fcb4600bcc934 /src/common/x64
parentARM/WaitTree: Better track the CallStack for each thread. (diff)
downloadyuzu-534466754f381e90f5f6475a0c02031242a5c256.tar
yuzu-534466754f381e90f5f6475a0c02031242a5c256.tar.gz
yuzu-534466754f381e90f5f6475a0c02031242a5c256.tar.bz2
yuzu-534466754f381e90f5f6475a0c02031242a5c256.tar.lz
yuzu-534466754f381e90f5f6475a0c02031242a5c256.tar.xz
yuzu-534466754f381e90f5f6475a0c02031242a5c256.tar.zst
yuzu-534466754f381e90f5f6475a0c02031242a5c256.zip
Diffstat (limited to '')
-rw-r--r--src/common/x64/native_clock.cpp3
-rw-r--r--src/common/x64/native_clock.h5
2 files changed, 7 insertions, 1 deletions
diff --git a/src/common/x64/native_clock.cpp b/src/common/x64/native_clock.cpp
index 926f92ff8..f1bc60fd2 100644
--- a/src/common/x64/native_clock.cpp
+++ b/src/common/x64/native_clock.cpp
@@ -62,7 +62,8 @@ u64 NativeClock::GetRTSC() {
}
accumulated_ticks += diff;
rtsc_serialize.unlock();
- return accumulated_ticks;
+ /// The clock cannot be more precise than the guest timer, remove the lower bits
+ return accumulated_ticks & inaccuracy_mask;
}
void NativeClock::Pause(bool is_paused) {
diff --git a/src/common/x64/native_clock.h b/src/common/x64/native_clock.h
index 3851f8fc2..e853094d2 100644
--- a/src/common/x64/native_clock.h
+++ b/src/common/x64/native_clock.h
@@ -31,6 +31,11 @@ public:
private:
u64 GetRTSC();
+ /// value used to reduce the native clocks accuracy as some apss rely on
+ /// undefined behavior where the level of accuracy in the clock shouldn't
+ /// be higher.
+ static constexpr u64 inaccuracy_mask = ~(0x100 - 1);
+
SpinLock rtsc_serialize{};
u64 last_measure{};
u64 accumulated_ticks{};