From a302c17a76d590630dea0d033a14addd1b7d587b Mon Sep 17 00:00:00 2001 From: zilmar Date: Sat, 1 Oct 2016 22:01:58 +1000 Subject: [PATCH] [Android] get CArmRecompilerOps::COP1_S_MUL to use register caching --- .../Recompiler/Arm/ArmRecompilerOps.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Source/Project64-core/N64System/Recompiler/Arm/ArmRecompilerOps.cpp b/Source/Project64-core/N64System/Recompiler/Arm/ArmRecompilerOps.cpp index 3e0cfea7f..3b66bbcac 100644 --- a/Source/Project64-core/N64System/Recompiler/Arm/ArmRecompilerOps.cpp +++ b/Source/Project64-core/N64System/Recompiler/Arm/ArmRecompilerOps.cpp @@ -3534,6 +3534,7 @@ void CArmRecompilerOps::COP1_CT() { CompileInterpterCall((void *)R4300iOp::COP1_CT, "R4300iOp::COP1_CT"); } + m_RegWorkingSet.SetRoundingModel(CRegInfo::RoundUnknown); } void CArmRecompilerOps::COP1_S_ADD() @@ -3565,14 +3566,16 @@ void CArmRecompilerOps::COP1_S_SUB() void CArmRecompilerOps::COP1_S_MUL() { CompileCop1Test(); - if (g_Settings->LoadBool(Game_32Bit)) - { - CompileInterpterCall((void *)R4300iOp32::COP1_S_MUL, "R4300iOp32::COP1_S_MUL"); - } - else - { - CompileInterpterCall((void *)R4300iOp::COP1_S_MUL, "R4300iOp::COP1_S_MUL"); - } + FixRoundModel(CRegInfo::RoundDefault); + ArmReg FprReg = Map_Variable(CArmRegInfo::VARIABLE_FPR); + ArmReg TempReg = m_RegWorkingSet.Map_TempReg(Arm_Any, -1, false); + LoadArmRegPointerToArmReg(TempReg,FprReg,(uint8_t)(m_Opcode.fs << 2)); + LoadArmRegPointerToFloatReg(TempReg,Arm_S14,0); + LoadArmRegPointerToArmReg(TempReg,FprReg,(uint8_t)(m_Opcode.ft << 2)); + LoadArmRegPointerToFloatReg(TempReg,Arm_S15,0); + MulF32(Arm_S0,Arm_S14,Arm_S15); + LoadArmRegPointerToArmReg(TempReg,FprReg,(uint8_t)(m_Opcode.fd << 2)); + StoreFloatRegToArmRegPointer(Arm_S0,TempReg,0); } void CArmRecompilerOps::COP1_S_DIV()