Merge pull request #757 from Tilka/ps_sum0

Jit64: re-enable ps_sum0
This commit is contained in:
Ryan Houdek
2014-08-15 20:25:14 -05:00

View File

@ -169,9 +169,7 @@ void Jit64::ps_sum(UGeckoInstruction inst)
{ {
INSTRUCTION_START INSTRUCTION_START
JITDISABLE(bJITPairedOff); JITDISABLE(bJITPairedOff);
FALLBACK_IF(inst.Rc);
// TODO: (inst.SUBOP5 == 10) breaks Sonic Colours (black screen)
FALLBACK_IF(inst.Rc || (inst.SUBOP5 == 10));
int d = inst.FD; int d = inst.FD;
int a = inst.FA; int a = inst.FA;
@ -182,7 +180,7 @@ void Jit64::ps_sum(UGeckoInstruction inst)
switch (inst.SUBOP5) switch (inst.SUBOP5)
{ {
case 10: case 10:
// Do the sum in upper subregisters, merge uppers // ps_sum0, do the sum in upper subregisters, merge uppers
MOVDDUP(XMM0, fpr.R(a)); MOVDDUP(XMM0, fpr.R(a));
MOVAPD(XMM1, fpr.R(b)); MOVAPD(XMM1, fpr.R(b));
ADDPD(XMM0, R(XMM1)); ADDPD(XMM0, R(XMM1));
@ -190,7 +188,7 @@ void Jit64::ps_sum(UGeckoInstruction inst)
MOVAPD(fpr.R(d), XMM0); MOVAPD(fpr.R(d), XMM0);
break; break;
case 11: case 11:
// Do the sum in lower subregisters, merge lowers // ps_sum1, do the sum in lower subregisters, merge lowers
MOVAPD(XMM0, fpr.R(a)); MOVAPD(XMM0, fpr.R(a));
MOVAPD(XMM1, fpr.R(b)); MOVAPD(XMM1, fpr.R(b));
SHUFPD(XMM1, R(XMM1), 5); // copy higher to lower SHUFPD(XMM1, R(XMM1), 5); // copy higher to lower