diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp index 0f3f1c9506..a4b4320089 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp @@ -321,8 +321,8 @@ namespace Jit64 // TODO - faster version for when regs are different MOVAPD(XMM0, fpr.R(c)); MOVAPD(XMM1, fpr.R(a)); - SHUFPD(XMM1, R(XMM1), 5); // copy higher to lower - MULPD(XMM0, R(XMM1)); // sum lowers + SHUFPD(XMM1, R(XMM1), 3); // copy higher to lower + MULPD(XMM0, R(XMM1)); MOVAPD(fpr.R(d), XMM0); break; default: @@ -398,6 +398,17 @@ namespace Jit64 MOVAPD(XMM0, fpr.R(a)); switch (inst.SUBOP5) { + case 14: //madds0 + MOVDDUP(XMM1, fpr.R(c)); + MULPD(XMM0, R(XMM1)); + ADDPD(XMM0, fpr.R(b)); + break; + case 15: //madds1 + MOVAPD(XMM1, fpr.R(c)); + SHUFPD(XMM1, R(XMM1), 3); // copy higher to lower + MULPD(XMM0, R(XMM1)); + ADDPD(XMM0, fpr.R(b)); + break; case 28: //msub MULPD(XMM0, fpr.R(c)); SUBPD(XMM0, fpr.R(b)); @@ -427,25 +438,4 @@ namespace Jit64 ForceSinglePrecisionP(fpr.RX(d)); fpr.UnlockAll(); } - - void ps_mulsX(UGeckoInstruction inst) - { -#ifdef JIT_OFF_OPTIONS - if(Core::g_CoreStartupParameter.bJITOff || Core::g_CoreStartupParameter.bJITPairedOff) - {Default(inst); return;} // turn off from debugger -#endif - INSTRUCTION_START; - Default(inst); - return; - if (inst.Rc) { - Default(inst); return; - } - - switch (inst.SUBOP5) - { - case 12: - case 13: - break; - } - } } diff --git a/Source/Core/Core/Src/PowerPC/PPCTables.cpp b/Source/Core/Core/Src/PowerPC/PPCTables.cpp index ab16f4a8dc..6d79dab2fa 100644 --- a/Source/Core/Core/Src/PowerPC/PPCTables.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCTables.cpp @@ -228,8 +228,8 @@ GekkoOPTemplate table4_2[] = {11, Interpreter::ps_sum1, Jit64::ps_sum, {"ps_sum1", OPTYPE_PS, 0}}, {12, Interpreter::ps_muls0, Jit64::ps_muls, {"ps_muls0", OPTYPE_PS, 0}}, {13, Interpreter::ps_muls1, Jit64::ps_muls, {"ps_muls1", OPTYPE_PS, 0}}, - {14, Interpreter::ps_madds0, Jit64::Default, {"ps_madds0", OPTYPE_PS, 0}}, - {15, Interpreter::ps_madds1, Jit64::Default, {"ps_madds1", OPTYPE_PS, 0}}, + {14, Interpreter::ps_madds0, Jit64::ps_maddXX, {"ps_madds0", OPTYPE_PS, 0}}, + {15, Interpreter::ps_madds1, Jit64::ps_maddXX, {"ps_madds1", OPTYPE_PS, 0}}, {18, Interpreter::ps_div, Jit64::ps_arith, {"ps_div", OPTYPE_PS, 0, 16}}, {20, Interpreter::ps_sub, Jit64::ps_arith, {"ps_sub", OPTYPE_PS, 0}}, {21, Interpreter::ps_add, Jit64::ps_arith, {"ps_add", OPTYPE_PS, 0}},