From 3378b03c1fb848da9aa189ce4fd633e05ea5a52c Mon Sep 17 00:00:00 2001 From: Elad <18193363+elad335@users.noreply.github.com> Date: Thu, 24 Oct 2024 04:39:02 +0300 Subject: [PATCH] Optimize get_system_time using 128 bit math --- rpcs3/Emu/Cell/lv2/sys_time.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rpcs3/Emu/Cell/lv2/sys_time.cpp b/rpcs3/Emu/Cell/lv2/sys_time.cpp index 389300bbf6..394c3ab4a2 100644 --- a/rpcs3/Emu/Cell/lv2/sys_time.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_time.cpp @@ -155,7 +155,11 @@ u64 get_timebased_time() const u64 time = count.QuadPart; const u64 freq = s_time_aux_info.perf_freq; +#if is_u128_emulated + const u64 result = static_cast(u128_from_mul(time * g_cfg.core.clocks_scale, g_timebase_freq) / freq / 100u); +#else const u64 result = (time / freq * g_timebase_freq + time % freq * g_timebase_freq / freq) * g_cfg.core.clocks_scale / 100u; +#endif #else struct timespec ts; ensure(::clock_gettime(CLOCK_MONOTONIC, &ts) == 0); @@ -199,7 +203,11 @@ u64 get_system_time() const u64 time = count.QuadPart; const u64 freq = s_time_aux_info.perf_freq; +#if is_u128_emulated + const u64 result = static_cast(u128_from_mul(time, 1000000ull) / freq); +#else const u64 result = time / freq * 1000000ull + (time % freq) * 1000000ull / freq; +#endif #else struct timespec ts; ensure(::clock_gettime(CLOCK_MONOTONIC, &ts) == 0);