From e08b1b93ec3790accda7bcd16975fac073225bb0 Mon Sep 17 00:00:00 2001 From: LegendOfDragoon Date: Sat, 6 Feb 2016 00:07:15 -0800 Subject: [PATCH] Optimize UpdateTimers --- .../N64System/Mips/SystemTiming.cpp | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Source/Project64-core/N64System/Mips/SystemTiming.cpp b/Source/Project64-core/N64System/Mips/SystemTiming.cpp index 9d301bdc6..736e9518b 100644 --- a/Source/Project64-core/N64System/Mips/SystemTiming.cpp +++ b/Source/Project64-core/N64System/Mips/SystemTiming.cpp @@ -161,13 +161,27 @@ void CSystemTimer::UpdateTimers() int TimeTaken = m_LastUpdate - m_NextTimer; if (TimeTaken != 0) { + uint32_t random, wired; m_LastUpdate = m_NextTimer; g_Reg->COUNT_REGISTER += TimeTaken; - g_Reg->RANDOM_REGISTER -= TimeTaken / g_System->CountPerOp(); - while ((int)g_Reg->RANDOM_REGISTER < (int)g_Reg->WIRED_REGISTER) + random = g_Reg->RANDOM_REGISTER - (TimeTaken / g_System->CountPerOp()); + wired = g_Reg->WIRED_REGISTER; + if ((int)random < (int)wired) { - g_Reg->RANDOM_REGISTER += 32 - g_Reg->WIRED_REGISTER; + if (wired == 0) + { + random &= 31; + } + else + { + uint32_t increment = 32 - wired; + do + { + random += increment; + } while ((int)random < (int)wired); + } } + g_Reg->RANDOM_REGISTER = random; } }