summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
index 76f771abe5..51f6c836fb 100644
--- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
+++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
@@ -2113,12 +2113,11 @@ void JitArm64::rlwimix(UGeckoInstruction inst)
gpr.BindToRegister(a, true);
ARM64Reg RA = gpr.R(a);
auto WA = gpr.GetScopedReg();
- auto WB = a == s ? gpr.GetScopedReg() : Arm64GPRCache::ScopedARM64Reg(RA);
+ const u32 inverted_mask = ~mask;
- MOVI2R(WA, mask);
- BIC(WB, RA, WA);
- AND(WA, WA, gpr.R(s), ArithOption(gpr.R(s), ShiftType::ROR, rot_dist));
- ORR(RA, WB, WA);
+ AND(WA, gpr.R(s), LogicalImm(std::rotl(mask, rot_dist), GPRSize::B32));
+ AND(RA, RA, LogicalImm(inverted_mask, GPRSize::B32));
+ ORR(RA, RA, WA, ArithOption(WA, ShiftType::ROR, rot_dist));
}
if (inst.Rc)