mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-06 11:57:09 +02:00
JitArm64_Integer: cmp - Subtract 12-bit constant
You can encode a 12-bit immediate in a SUB instruction on ARM64. Constants in this range do not need to be sign extended, so 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: 0x52800416 mov w22, #0x20 ; =32 0x93407f78 sxtw x24, w27 0xcb36c318 sub x24, x24, w22, sxtw After: 0x93407f78 sxtw x24, w27 0xd1008318 sub x24, x24, #0x20
This commit is contained in:
parent
8291cff46d
commit
4a29e0e4f4
@ -652,9 +652,11 @@ void JitArm64::cmp(UGeckoInstruction inst)
|
||||
SXTW(CR, gpr.R(b));
|
||||
MVN(CR, CR);
|
||||
}
|
||||
else if (gpr.IsImm(b) && !gpr.GetImm(b))
|
||||
else if (gpr.IsImm(b) && (gpr.GetImm(b) & 0xFFF) == gpr.GetImm(b))
|
||||
{
|
||||
SXTW(CR, gpr.R(a));
|
||||
if (const u32 imm = gpr.GetImm(b); imm != 0)
|
||||
SUB(CR, CR, imm);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user