From 90d551e0d120542fab003e8b4b978b01e07c155c Mon Sep 17 00:00:00 2001 From: degasus Date: Wed, 3 May 2017 22:45:15 +0200 Subject: [PATCH] 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. --- Source/Core/Core/PowerPC/JitArm64/Jit.h | 1 - .../Core/PowerPC/JitArm64/JitArm64_Paired.cpp | 23 ------------------- .../Core/PowerPC/JitArm64/JitArm64_Tables.cpp | 2 +- 3 files changed, 1 insertion(+), 25 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.h b/Source/Core/Core/PowerPC/JitArm64/Jit.h index 192a0203a9..98f4510bbf 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit.h +++ b/Source/Core/Core/PowerPC/JitArm64/Jit.h @@ -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); diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Paired.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Paired.cpp index 93306bf5a4..3aba8aae4b 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Paired.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Paired.cpp @@ -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 diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.cpp index e6141476ab..7e9696a339 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.cpp @@ -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