summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2010-12-12 04:53:18 +0000
committerskidau <skidau@gmail.com>2010-12-12 04:53:18 +0000
commitb926cb426ea03c56b100782ca4e43feb735e7788 (patch)
tree6639f07a23afdba395d01c3dcfa7e499b5ee412f /Source/Core
parent8e38b1a8a7b5ae66c7b2b329e0387f7f38a2f881 (diff)
Disabled the paired single sum instruction (ps_sum) as it is causing
the black screen in Sonic Colours. Both JIT and JITIL have this work-around. Re-enabled ps_mul as that instruction was not the root cause. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6565 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp9
-rw-r--r--Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Paired.cpp4
2 files changed, 7 insertions, 6 deletions
diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp
index 15fdaaa186..fcd04f4970 100644
--- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp
+++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp
@@ -197,7 +197,7 @@ void Jit64::tri_op(int d, int a, int b, bool reversible, void (XEmitter::*op)(X6
}
void Jit64::ps_arith(UGeckoInstruction inst)
-{
+{
INSTRUCTION_START
JITDISABLE(Paired)
if (inst.Rc) {
@@ -210,9 +210,7 @@ void Jit64::ps_arith(UGeckoInstruction inst)
case 21: tri_op(inst.FD, inst.FA, inst.FB, true, &XEmitter::ADDPD); break; //add
case 23: Default(inst); break; //sel
case 24: Default(inst); break; //res
- case 25: Default(inst); break;
- // TODO: MULPD breaks Sonic Colours (black screen)
- //tri_op(inst.FD, inst.FA, inst.FC, true, &XEmitter::MULPD); break; //mul
+ case 25: tri_op(inst.FD, inst.FA, inst.FC, true, &XEmitter::MULPD); break; //mul
default:
_assert_msg_(DYNA_REC, 0, "ps_arith WTF!!!");
}
@@ -222,7 +220,8 @@ void Jit64::ps_sum(UGeckoInstruction inst)
{
INSTRUCTION_START
JITDISABLE(Paired)
- if (inst.Rc) {
+ // TODO: (inst.SUBOP5 == 10) breaks Sonic Colours (black screen)
+ if (inst.Rc || (inst.SUBOP5 == 10)) {
Default(inst); return;
}
int d = inst.FD;
diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Paired.cpp
index 48e075f7bd..628c323f95 100644
--- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Paired.cpp
+++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Paired.cpp
@@ -76,8 +76,10 @@ void JitIL::ps_arith(UGeckoInstruction inst)
void JitIL::ps_sum(UGeckoInstruction inst)
{
- // FIXME: This operation strikes me as a bit strange...
+ // TODO: This operation strikes me as a bit strange...
// perhaps we can optimize it depending on the users?
+ // TODO: ps_sum breaks Sonic Colours (black screen)
+ Default(inst); return;
INSTRUCTION_START
JITDISABLE(Paired)
if (inst.Rc || inst.SUBOP5 != 10) {