From 9a6c8419e9d6491062a923580312ac4bfd97a1b8 Mon Sep 17 00:00:00 2001 From: zilmar Date: Sun, 2 Oct 2016 07:03:12 +1100 Subject: [PATCH] [Android] Optimize CArmRecompilerOps::UpdateCounters --- .../Recompiler/Arm/ArmRecompilerOps.cpp | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/Source/Project64-core/N64System/Recompiler/Arm/ArmRecompilerOps.cpp b/Source/Project64-core/N64System/Recompiler/Arm/ArmRecompilerOps.cpp index f5e31b8b9..c6b58e3bf 100644 --- a/Source/Project64-core/N64System/Recompiler/Arm/ArmRecompilerOps.cpp +++ b/Source/Project64-core/N64System/Recompiler/Arm/ArmRecompilerOps.cpp @@ -4446,17 +4446,35 @@ void CArmRecompilerOps::UpdateCounters(CRegInfo & RegSet, bool CheckTimer, bool { UpdateSyncCPU(RegSet, RegSet.GetBlockCycleCount()); WriteArmComment("Update Counter"); - SubConstFromVariable(RegSet.GetBlockCycleCount(), g_NextTimer, "g_NextTimer"); // updates compare flag + + ArmReg NextTimerReg = RegSet.Map_Variable(CArmRegInfo::VARIABLE_NEXT_TIMER); + ArmReg TempReg = RegSet.Map_TempReg(Arm_Any, -1, false); + LoadArmRegPointerToArmReg(TempReg,NextTimerReg,0); + SubConstFromArmReg(TempReg,RegSet.GetBlockCycleCount()); + StoreArmRegToArmRegPointer(TempReg,NextTimerReg,0); if (ClearValues) { RegSet.SetBlockCycleCount(0); } + if (CheckTimer) + { + CompareArmRegToConst(TempReg, 0); + } + RegSet.SetArmRegProtected(TempReg, false); + RegSet.SetArmRegProtected(NextTimerReg, false); + } + else if (CheckTimer) + { + ArmReg NextTimerReg = RegSet.Map_Variable(CArmRegInfo::VARIABLE_NEXT_TIMER); + ArmReg TempReg = RegSet.Map_TempReg(Arm_Any, -1, false); + LoadArmRegPointerToArmReg(TempReg,NextTimerReg,0); + CompareArmRegToConst(TempReg, 0); + RegSet.SetArmRegProtected(TempReg, false); + RegSet.SetArmRegProtected(NextTimerReg, false); } if (CheckTimer) { - MoveVariableToArmReg(g_NextTimer, "g_NextTimer", Arm_R2); - CompareArmRegToConst(Arm_R2, 0); uint8_t * Jump = *g_RecompPos; BranchLabel8(ArmBranch_GreaterThanOrEqual, "Continue_From_Timer_Test"); RegSet.BeforeCallDirect();