mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-08 15:20:45 +01:00
JitArm64: Use AArch64 imm masks in rlwimix slow case
All valid PPC imm masks (except for all zeroes and all ones) are also valid AArch64 imm masks. This lets us optimize things a little. Note that because I'm now ANDing rS before rotating it, its AND mask is rotated left. All AArch64 imm masks can be rotated by any amount and still be valid AArch64 imm masks.
This commit is contained in:
parent
c528a70e64
commit
48a7afa448
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user