diff --git a/rpcs3/Emu/Cell/lv2/sys_time.cpp b/rpcs3/Emu/Cell/lv2/sys_time.cpp index 92ac650f8d..b04be640bc 100644 --- a/rpcs3/Emu/Cell/lv2/sys_time.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_time.cpp @@ -147,7 +147,7 @@ u64 convert_to_timebased_time(u64 time) u64 get_timebased_time() { - if (0) if (u64 freq = utils::get_tsc_freq()) + if (u64 freq = utils::get_tsc_freq()) { const u64 tsc = utils::get_tsc(); @@ -207,7 +207,7 @@ void initialize_timebased_time(u64 timebased_init, bool reset) // Returns some relative time in microseconds, don't change this fact u64 get_system_time() { - if (0) if (u64 freq = utils::get_tsc_freq()) + if (u64 freq = utils::get_tsc_freq()) { const u64 tsc = utils::get_tsc(); diff --git a/rpcs3/util/sysinfo.cpp b/rpcs3/util/sysinfo.cpp index d64a5e6553..8c958e389d 100755 --- a/rpcs3/util/sysinfo.cpp +++ b/rpcs3/util/sysinfo.cpp @@ -524,7 +524,7 @@ std::string utils::get_system_info() } else { - fmt::append(result, " | TSC: Bad"); + fmt::append(result, " | TSC: Disabled"); } if (has_avx()) @@ -772,15 +772,26 @@ static const bool s_tsc_freq_evaluated = []() -> bool #endif if (!utils::has_invariant_tsc()) + { return 0; + } + + if (utils::get_cpu_brand().find("Ryzen") != umax) + { + return 0; + } #ifdef _WIN32 LARGE_INTEGER freq; if (!QueryPerformanceFrequency(&freq)) + { return 0; + } if (freq.QuadPart <= 9'999'999) + { return 0; + } const ullong timer_freq = freq.QuadPart; #else @@ -880,7 +891,7 @@ static const bool s_tsc_freq_evaluated = []() -> bool return round_tsc(res, utils::mul_saturate(utils::add_saturate(rdtsc_diff[0], rdtsc_diff[1]), utils::aligned_div(timer_freq, timer_data[1] - timer_data[0]))); }(); - atomic_storage::release(utils::s_tsc_freq, cal_tsc); + atomic_storage::store(utils::s_tsc_freq, cal_tsc); return true; }();