JIT: micro-optimize cmpXX a bit more for lower latency/code size

This commit is contained in:
Fiora 2014-10-08 11:44:14 -07:00
parent 089e32ba7d
commit cec2cb9d38
1 changed files with 10 additions and 1 deletions

View File

@ -544,7 +544,16 @@ void Jit64::cmpXX(UGeckoInstruction inst)
MOV(64, PPCSTATE(cr_val[crf]), R(input));
// Place the comparison next to the branch for macro-op fusion
if (merge_branch)
TEST(64, R(input), R(input));
{
// We only need to do a 32-bit compare, since the flags set will be the same as a sign-extended
// result.
// We should also test against gpr.R(a) if it's bound, since that's one less cycle of latency
// (the CPU doesn't have to wait for the movsxd to finish to resolve the branch).
if (gpr.R(a).IsSimpleReg())
TEST(32, gpr.R(a), gpr.R(a));
else
TEST(32, R(input), R(input));
}
}
else
{