Temporarily disable a couple of unsafe quantizer optimizations. they will return in a better form.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4858 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
9d14042a0c
commit
4aeec95513
|
@ -67,10 +67,16 @@ void Jit64::psq_st(UGeckoInstruction inst)
|
||||||
int s = inst.RS; // Fp numbers
|
int s = inst.RS; // Fp numbers
|
||||||
|
|
||||||
const UGQR gqr(rSPR(SPR_GQR0 + inst.I));
|
const UGQR gqr(rSPR(SPR_GQR0 + inst.I));
|
||||||
|
u16 store_gqr = gqr.Hex & 0xFFFF;
|
||||||
|
|
||||||
const EQuantizeType stType = static_cast<EQuantizeType>(gqr.ST_TYPE);
|
const EQuantizeType stType = static_cast<EQuantizeType>(gqr.ST_TYPE);
|
||||||
int stScale = gqr.ST_SCALE;
|
int stScale = gqr.ST_SCALE;
|
||||||
|
|
||||||
|
|
||||||
if (inst.W) {
|
if (inst.W) {
|
||||||
|
Default(inst);
|
||||||
|
return;
|
||||||
|
|
||||||
// PanicAlert("W=1: stType %i stScale %i update %i", (int)stType, (int)stScale, (int)update);
|
// PanicAlert("W=1: stType %i stScale %i update %i", (int)stType, (int)stScale, (int)update);
|
||||||
// It's fairly common that games write stuff to the pipe using this. Then, it's pretty much only
|
// It's fairly common that games write stuff to the pipe using this. Then, it's pretty much only
|
||||||
// floats so that's what we'll work on.
|
// floats so that's what we'll work on.
|
||||||
|
@ -86,6 +92,11 @@ void Jit64::psq_st(UGeckoInstruction inst)
|
||||||
gpr.FlushLockX(ABI_PARAM1, ABI_PARAM2);
|
gpr.FlushLockX(ABI_PARAM1, ABI_PARAM2);
|
||||||
gpr.Lock(a);
|
gpr.Lock(a);
|
||||||
fpr.Lock(s);
|
fpr.Lock(s);
|
||||||
|
// Check that the quantizer is set the way we expect.
|
||||||
|
INT3();
|
||||||
|
CMP(16, M(&rSPR(SPR_GQR0 + inst.I)), Imm16(store_gqr));
|
||||||
|
FixupBranch skip_opt = J_CC(CC_NE);
|
||||||
|
|
||||||
if (update)
|
if (update)
|
||||||
gpr.LoadToX64(a, true, true);
|
gpr.LoadToX64(a, true, true);
|
||||||
MOV(32, R(ABI_PARAM2), gpr.R(a));
|
MOV(32, R(ABI_PARAM2), gpr.R(a));
|
||||||
|
@ -113,6 +124,11 @@ void Jit64::psq_st(UGeckoInstruction inst)
|
||||||
gpr.UnlockAll();
|
gpr.UnlockAll();
|
||||||
gpr.UnlockAllX();
|
gpr.UnlockAllX();
|
||||||
fpr.UnlockAll();
|
fpr.UnlockAll();
|
||||||
|
|
||||||
|
FixupBranch skip_slow = J();
|
||||||
|
SetJumpTarget(skip_opt);
|
||||||
|
Default(inst);
|
||||||
|
SetJumpTarget(skip_slow);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -121,6 +137,7 @@ void Jit64::psq_st(UGeckoInstruction inst)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
// Is this specialization still worth it? Let's keep it for now. It's probably
|
// Is this specialization still worth it? Let's keep it for now. It's probably
|
||||||
// not very risky since a game most likely wouldn't use the same code to process
|
// not very risky since a game most likely wouldn't use the same code to process
|
||||||
// floats as integers (but you never know....).
|
// floats as integers (but you never know....).
|
||||||
|
@ -139,6 +156,7 @@ void Jit64::psq_st(UGeckoInstruction inst)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
gpr.FlushLockX(EAX, EDX);
|
gpr.FlushLockX(EAX, EDX);
|
||||||
gpr.FlushLockX(ECX);
|
gpr.FlushLockX(ECX);
|
||||||
|
|
Loading…
Reference in New Issue