summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorhrydgard <hrydgard@gmail.com>2008-12-16 00:21:17 +0000
committerhrydgard <hrydgard@gmail.com>2008-12-16 00:21:17 +0000
commitb3fc3b16da353648e747d6b1bea354fd39efe80d (patch)
tree540dba382b5ce90545a7e7922beed12e7e83c289 /Source/Core
parenta4fc0da8ccbce218389a74d1084541421ba68eed (diff)
small ps bugfix and another couple of instructions implemented
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1553 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp36
-rw-r--r--Source/Core/Core/Src/PowerPC/PPCTables.cpp4
2 files changed, 15 insertions, 25 deletions
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}},