mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-07 17:56:50 +02:00
JitArm64_Integer: cmpl - Subtract 12-bit constant
You can encode a 12-bit immediate in a SUB instruction on ARM64. 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: 0x5280003a mov w26, #0x1 ; =1 0xcb1a033b sub x27, x25, x26 After: 0xd100073b sub x27, x25, #0x1
This commit is contained in:
parent
c5870ed0c7
commit
b7c3f91643
@ -728,9 +728,13 @@ void JitArm64::cmpl(UGeckoInstruction inst)
|
||||
{
|
||||
NEG(CR, EncodeRegTo64(gpr.R(b)));
|
||||
}
|
||||
else if (gpr.IsImm(b) && !gpr.GetImm(b))
|
||||
else if (gpr.IsImm(b) && (gpr.GetImm(b) & 0xFFF) == gpr.GetImm(b))
|
||||
{
|
||||
MOV(EncodeRegTo32(CR), gpr.R(a));
|
||||
const u32 imm = gpr.GetImm(b);
|
||||
if (imm == 0)
|
||||
MOV(EncodeRegTo32(CR), gpr.R(a));
|
||||
else
|
||||
SUB(CR, EncodeRegTo64(gpr.R(a)), imm);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user