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()