Jit64: boolX - Optimize and for size

AND allows for a more compact representation for constants that can be
represented by a signed 8-bit integer, while MOV does not. By letting
MOV handle the larger constants we can occasionally save a byte.

Before:
41 8B FE             mov         edi,r14d
81 E7 FF FE FF FF    and         edi,0FFFFFEFFh

After:
BF FF FE FF FF       mov         edi,0FFFFFEFFh
41 23 FE             and         edi,r14d
This commit is contained in:
Sintendo
2021-01-26 22:56:05 +01:00
parent b760a56a9a
commit 356172bc98

View File

@ -739,9 +739,18 @@ void Jit64::boolX(UGeckoInstruction inst)
}
else
{
if (a != j)
if (a == j)
AND(32, Ra, Imm32(imm));
else if (s32(imm) >= -128 && s32(imm) <= 127)
{
MOV(32, Ra, Rj);
AND(32, Ra, Imm32(imm));
AND(32, Ra, Imm32(imm));
}
else
{
MOV(32, Ra, Imm32(imm));
AND(32, Ra, Rj);
}
if (final_not)
{