diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-03-21 17:23:13 +0100 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-06-27 17:35:55 +0200 |
commit | 534466754f381e90f5f6475a0c02031242a5c256 (patch) | |
tree | bac4629fa909493aec359051c76fcb4600bcc934 /src | |
parent | ARM/WaitTree: Better track the CallStack for each thread. (diff) | |
download | yuzu-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.cpp | 3 | ||||
-rw-r--r-- | src/common/x64/native_clock.h | 5 | ||||
-rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 3 |
3 files changed, 10 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{}; diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index 547a6e07e..3f18dede2 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp @@ -184,6 +184,9 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& config.enable_fast_dispatch = false; } + // CNTPCT uses wall clock. + config.wall_clock_cntpct = true; + return std::make_shared<Dynarmic::A64::Jit>(config); } |