diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index 76f771abe54d..51f6c836fb29 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)