From b926cb426ea03c56b100782ca4e43feb735e7788 Mon Sep 17 00:00:00 2001 From: skidau Date: Sun, 12 Dec 2010 04:53:18 +0000 Subject: [PATCH] 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 --- Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp | 9 ++++----- Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Paired.cpp | 4 +++- 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) {