From 4985a01c1684382e50ae30b847d0e796070633d0 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 1 Sep 2024 10:54:12 +0200 Subject: [PATCH] Jit: Move srwx to ConstantPropagation --- Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp | 7 +------ Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp | 10 +--------- .../Core/PowerPC/JitCommon/ConstantPropagation.cpp | 6 +++++- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp index e38c9e63c3..d0d29b5e81 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp @@ -2204,12 +2204,7 @@ void Jit64::srwx(UGeckoInstruction inst) int b = inst.RB; int s = inst.RS; - if (gpr.IsImm(b, s)) - { - u32 amount = gpr.Imm32(b); - gpr.SetImmediate32(a, (amount & 0x20) ? 0 : (gpr.Imm32(s) >> (amount & 0x1f))); - } - else if (gpr.IsImm(b)) + if (gpr.IsImm(b)) { u32 amount = gpr.Imm32(b); if (amount & 0x20) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index 37b235f700..108a7ff85a 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -1632,15 +1632,7 @@ void JitArm64::srwx(UGeckoInstruction inst) int a = inst.RA, b = inst.RB, s = inst.RS; - if (gpr.IsImm(b) && gpr.IsImm(s)) - { - u32 i = gpr.GetImm(s), amount = gpr.GetImm(b); - gpr.SetImmediate(a, (amount & 0x20) ? 0 : i >> (amount & 0x1F)); - - if (inst.Rc) - ComputeRC0(gpr.GetImm(a)); - } - else if (gpr.IsImm(b)) + if (gpr.IsImm(b)) { u32 amount = gpr.GetImm(b); if (amount & 0x20) diff --git a/Source/Core/Core/PowerPC/JitCommon/ConstantPropagation.cpp b/Source/Core/Core/PowerPC/JitCommon/ConstantPropagation.cpp index fa24e7189c..8c517070f1 100644 --- a/Source/Core/Core/PowerPC/JitCommon/ConstantPropagation.cpp +++ b/Source/Core/Core/PowerPC/JitCommon/ConstantPropagation.cpp @@ -398,6 +398,9 @@ ConstantPropagationResult ConstantPropagation::EvaluateTable31SB(UGeckoInstructi case 476: // nandx a = ~(s & b); break; + case 536: // srwx + a = u32(u64(s) >> b); + break; default: return {}; } @@ -413,7 +416,8 @@ ConstantPropagation::EvaluateTable31SBOneRegisterKnown(UGeckoInstruction inst, u switch (inst.SUBOP10) { - case 24: // slwx + case 24: // slwx + case 536: // srwx if (!known_reg_is_b && value == 0) a = 0; else if (known_reg_is_b && (value & 0x20))