From b806792d6c41638c92e84bd5faa10553b4a29d2f Mon Sep 17 00:00:00 2001 From: degasus Date: Fri, 11 Dec 2015 09:55:16 +0100 Subject: [PATCH] JitArm64: Fallback on FPRF usage. --- .../PowerPC/JitArm64/JitArm64_FloatingPoint.cpp | 17 +++++++++++++++++ .../Core/PowerPC/JitArm64/JitArm64_Paired.cpp | 15 +++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp index 6b4304ad1c..d8233b09ec 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp @@ -34,6 +34,7 @@ void JitArm64::faddsx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, d = inst.FD; @@ -50,6 +51,7 @@ void JitArm64::faddx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, d = inst.FD; @@ -65,6 +67,7 @@ void JitArm64::fmaddsx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -86,6 +89,7 @@ void JitArm64::fmaddx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -116,6 +120,7 @@ void JitArm64::fmsubsx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -137,6 +142,7 @@ void JitArm64::fmsubx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -153,6 +159,7 @@ void JitArm64::fmulsx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, c = inst.FC, d = inst.FD; @@ -169,6 +176,7 @@ void JitArm64::fmulx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, c = inst.FC, d = inst.FD; @@ -213,6 +221,7 @@ void JitArm64::fnmaddsx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -235,6 +244,7 @@ void JitArm64::fnmaddx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -251,6 +261,7 @@ void JitArm64::fnmsubsx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -273,6 +284,7 @@ void JitArm64::fnmsubx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -306,6 +318,7 @@ void JitArm64::fsubsx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, d = inst.FD; @@ -322,6 +335,7 @@ void JitArm64::fsubx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, d = inst.FD; @@ -337,6 +351,7 @@ void JitArm64::frspx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 b = inst.FB, d = inst.FD; @@ -460,6 +475,7 @@ void JitArm64::fdivx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, d = inst.FD; @@ -475,6 +491,7 @@ void JitArm64::fdivsx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, d = inst.FD; diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Paired.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Paired.cpp index 60a65d6f8b..9178b7fb5a 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Paired.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Paired.cpp @@ -35,6 +35,7 @@ void JitArm64::ps_add(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, d = inst.FD; @@ -51,6 +52,7 @@ void JitArm64::ps_div(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, d = inst.FD; @@ -67,6 +69,7 @@ void JitArm64::ps_madd(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -88,6 +91,7 @@ void JitArm64::ps_madds0(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -110,6 +114,7 @@ void JitArm64::ps_madds1(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -222,6 +227,7 @@ void JitArm64::ps_mul(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, c = inst.FC, d = inst.FD; @@ -238,6 +244,7 @@ void JitArm64::ps_muls0(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, c = inst.FC, d = inst.FD; @@ -257,6 +264,7 @@ void JitArm64::ps_muls1(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, c = inst.FC, d = inst.FD; @@ -276,6 +284,7 @@ void JitArm64::ps_msub(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -326,6 +335,7 @@ void JitArm64::ps_nmadd(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -348,6 +358,7 @@ void JitArm64::ps_nmsub(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -370,6 +381,7 @@ 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; @@ -413,6 +425,7 @@ void JitArm64::ps_sub(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, d = inst.FD; @@ -429,6 +442,7 @@ void JitArm64::ps_sum0(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; @@ -459,6 +473,7 @@ void JitArm64::ps_sum1(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITPairedOff); FALLBACK_IF(inst.Rc); + FALLBACK_IF(SConfig::GetInstance().bFPRF && js.op->wantsFPRF); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD;