mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-23 20:47:33 +01:00
JitArm64_Integer: cmp - Add shifted 12-bit constant
You can encode a shifted 12-bit immediate in an ADD instruction on ARM64. If the negated constant fits in this range, we can exploit this to avoid materializing the immediate. This approach saves an instruction if it does not need to be materialized in a register afterwards. Otherwise, we just materialize it later and the total number of instructions stays the same. Before: 0x52bff01a mov w26, #-0x800000 ; =-8388608 0x93407f1b sxtw x27, w24 0xcb3ac37b sub x27, x27, w26, sxtw After: 0x93407f1b sxtw x27, w24 0x9160037b add x27, x27, #0x800, lsl #12 ; =0x800000
This commit is contained in:
parent
01eed0a758
commit
075c35602f
@ -668,6 +668,11 @@ void JitArm64::cmp(UGeckoInstruction inst)
|
||||
SXTW(CR, gpr.R(a));
|
||||
ADD(CR, CR, ~gpr.GetImm(b) + 1);
|
||||
}
|
||||
else if (gpr.IsImm(b) && (((~gpr.GetImm(b) + 1) & 0xFFF000) == (~gpr.GetImm(b) + 1)))
|
||||
{
|
||||
SXTW(CR, gpr.R(a));
|
||||
ADD(CR, CR, (~gpr.GetImm(b) + 1) >> 12, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ARM64Reg RA = gpr.R(a);
|
||||
|
Loading…
x
Reference in New Issue
Block a user