From 7d573db80bbedebd1fde81ec7185dc73c437ad77 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Wed, 15 Mar 2023 17:53:01 +0000 Subject: [PATCH] Make GetTimeTicks return the time in guest ticks as opposed to host This is required by audren. --- app/src/main/cpp/skyline/common/utils.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/app/src/main/cpp/skyline/common/utils.h b/app/src/main/cpp/skyline/common/utils.h index b4146319..69405941 100644 --- a/app/src/main/cpp/skyline/common/utils.h +++ b/app/src/main/cpp/skyline/common/utils.h @@ -49,25 +49,27 @@ namespace skyline::util { inline const u64 ClockFrequency{detail::InitFrequency()}; //!< The system counter clock frequency in Hz + template + inline i64 GetTimeScaled() { + u64 frequency{ClockFrequency}; + u64 ticks; + asm volatile("MRS %0, CNTVCT_EL0" : "=r"(ticks)); + return static_cast(((ticks / frequency) * TargetFrequency) + (((ticks % frequency) * TargetFrequency + (frequency / 2)) / frequency)); + } /** * @brief Returns the current time in nanoseconds * @return The current time in nanoseconds */ inline i64 GetTimeNs() { - u64 frequency{ClockFrequency}; - u64 ticks; - asm volatile("MRS %0, CNTVCT_EL0" : "=r"(ticks)); - return static_cast(((ticks / frequency) * constant::NsInSecond) + (((ticks % frequency) * constant::NsInSecond + (frequency / 2)) / frequency)); + return GetTimeScaled(); } /** - * @brief Returns the current time in arbitrary ticks - * @return The current time in ticks + * @return The current time in guest ticks */ inline u64 GetTimeTicks() { - u64 ticks; - asm volatile("MRS %0, CNTVCT_EL0" : "=r"(ticks)); - return ticks; + constexpr i64 TegraX1ClockFrequency{19200000}; // The clock frequency of the Tegra X1 (19.2 MHz) + return static_cast(GetTimeScaled()); } /**