JitArm64: Drop ps_res.

The accuracy doesn't match ppc, and worse, it doesn't set the error flags if the input is zero.

Lets stop to ship broken instructions, so right now, the interpreter is the closest one.
This commit is contained in:
degasus 2017-05-03 22:45:15 +02:00
parent eaa4565e63
commit 90d551e0d1
3 changed files with 1 additions and 25 deletions

View File

@ -142,7 +142,6 @@ public:
void ps_maddXX(UGeckoInstruction inst);
void ps_mergeXX(UGeckoInstruction inst);
void ps_mulsX(UGeckoInstruction inst);
void ps_res(UGeckoInstruction inst);
void ps_sel(UGeckoInstruction inst);
void ps_sumX(UGeckoInstruction inst);

View File

@ -152,29 +152,6 @@ void JitArm64::ps_maddXX(UGeckoInstruction inst)
fpr.Unlock(V0Q);
}
void JitArm64::ps_res(UGeckoInstruction inst)
{
INSTRUCTION_START
JITDISABLE(bJITPairedOff);
FALLBACK_IF(inst.Rc);
FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF);
u32 b = inst.FB, d = inst.FD;
bool singles = fpr.IsSingle(b);
RegType type = singles ? REG_REG_SINGLE : REG_REG;
u8 size = singles ? 32 : 64;
ARM64Reg (*reg_encoder)(ARM64Reg) = singles ? EncodeRegToDouble : EncodeRegToQuad;
ARM64Reg VB = fpr.R(b, type);
ARM64Reg VD = fpr.RW(d, type);
// FIXME: implement the same LUT as in the interpreter
m_float_emit.FRECPE(size, reg_encoder(VD), reg_encoder(VB));
fpr.FixSinglePrecision(d);
}
void JitArm64::ps_sel(UGeckoInstruction inst)
{
INSTRUCTION_START

View File

@ -145,7 +145,7 @@ constexpr GekkoOPTemplate table4_2[] = {
{20, &JitArm64::fp_arith}, // ps_sub
{21, &JitArm64::fp_arith}, // ps_add
{23, &JitArm64::ps_sel}, // ps_sel
{24, &JitArm64::ps_res}, // ps_res
{24, &JitArm64::FallBackToInterpreter}, // ps_res
{25, &JitArm64::fp_arith}, // ps_mul
{26, &JitArm64::FallBackToInterpreter}, // ps_rsqrte
{28, &JitArm64::ps_maddXX}, // ps_msub