Jit64: boolX - Special case or with 0

Bitwise or with zero is just a fancy MOV, really.

- Example 1
Before:
41 BA 00 00 00 00    mov         r10d,0
45 0B D1             or          r10d,r9d

After:
45 8B D1             mov         r10d,r9d

- Example 2
Before:
41 83 CA 00          or          r10d,0

After:
Nothing!
This commit is contained in:
Sintendo
2021-01-26 23:25:19 +01:00
parent 356172bc98
commit 62f80a008c

View File

@ -766,7 +766,15 @@ void Jit64::boolX(UGeckoInstruction inst)
RCX64Reg Ra = gpr.Bind(a, RCMode::Write);
RegCache::Realize(Rj, Ra);
if (complement_b)
if (imm == 0)
{
if (a != j)
MOV(32, Ra, Rj);
if (final_not || complement_b)
NOT(32, Ra);
needs_test = true;
}
else if (complement_b)
{
if (a != j)
MOV(32, Ra, Rj);
@ -778,13 +786,14 @@ void Jit64::boolX(UGeckoInstruction inst)
if (a != j)
MOV(32, Ra, Rj);
OR(32, Ra, Imm32(imm));
}
if (final_not) {
if (final_not)
{
NOT(32, Ra);
needs_test = true;
}
}
}
else
{
PanicAlertFmt("WTF!");