From 5aba461cb3dd9979633c0554e6be6b835c3710c9 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sun, 17 May 2026 02:17:11 +0200 Subject: [PATCH] [common/wall_clock] fix invariant RDTSC divide by 0 (#3961) Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3961 Reviewed-by: MaranBr Reviewed-by: CamilleLaVey --- src/common/wall_clock.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/common/wall_clock.cpp b/src/common/wall_clock.cpp index bff9e7b4f4..c06f9b6318 100644 --- a/src/common/wall_clock.cpp +++ b/src/common/wall_clock.cpp @@ -22,11 +22,11 @@ namespace Common { WallClock::WallClock(bool invariant_, u64 rdtsc_frequency_) noexcept : invariant{invariant_} , rdtsc_frequency{rdtsc_frequency_} - , ns_rdtsc_factor{GetFixedPoint64Factor(NsRatio::den, rdtsc_frequency_)} - , us_rdtsc_factor{GetFixedPoint64Factor(UsRatio::den, rdtsc_frequency_)} - , ms_rdtsc_factor{GetFixedPoint64Factor(MsRatio::den, rdtsc_frequency_)} - , cntpct_rdtsc_factor{GetFixedPoint64Factor(CNTFRQ, rdtsc_frequency_)} - , gputick_rdtsc_factor{GetFixedPoint64Factor(GPUTickFreq, rdtsc_frequency_)} + , ns_rdtsc_factor{invariant_ ? 0 : GetFixedPoint64Factor(NsRatio::den, rdtsc_frequency_)} + , us_rdtsc_factor{invariant_ ? 0 : GetFixedPoint64Factor(UsRatio::den, rdtsc_frequency_)} + , ms_rdtsc_factor{invariant_ ? 0 : GetFixedPoint64Factor(MsRatio::den, rdtsc_frequency_)} + , cntpct_rdtsc_factor{invariant_ ? 0 : GetFixedPoint64Factor(CNTFRQ, rdtsc_frequency_)} + , gputick_rdtsc_factor{invariant_ ? 0 : GetFixedPoint64Factor(GPUTickFreq, rdtsc_frequency_)} {} std::chrono::nanoseconds WallClock::GetTimeNS() const { @@ -186,7 +186,7 @@ bool WallClock::IsNative() const { WallClock CreateOptimalClock() noexcept { #if defined(ARCHITECTURE_x86_64) auto const& caps = GetCPUCaps(); - return WallClock(!(caps.invariant_tsc && caps.tsc_frequency >= std::nano::den), std::max(caps.tsc_frequency, 1)); + return WallClock(!(caps.invariant_tsc && caps.tsc_frequency >= std::nano::den), caps.tsc_frequency); #elif defined(HAS_NCE) return WallClock(false, 1); #else