Jit64: divwx - Micro-optimize default case

Both the normal path and the overflow path end with the same
instruction, so their tails can be merged.

Before:
41 8B C7             mov         eax,r15d
45 85 C0             test        r8d,r8d
74 0D                je          overflow
3D 00 00 00 80       cmp         eax,80000000h
75 0E                jne         normal_path
41 83 F8 FF          cmp         r8d,0FFFFFFFFh
75 08                jne         normal_path
overflow:
C1 F8 1F             sar         eax,1Fh
44 8B F0             mov         r14d,eax
EB 07                jmp         done
normal_path:
99                   cdq
41 F7 F8             idiv        eax,r8d
44 8B F0             mov         r14d,eax
done:

After:
41 8B C7             mov         eax,r15d
45 85 C0             test        r8d,r8d
74 0D                je          overflow
3D 00 00 00 80       cmp         eax,80000000h
75 0B                jne         normal_path
41 83 F8 FF          cmp         r8d,0FFFFFFFFh
75 05                jne         normal_path
overflow:
C1 F8 1F             sar         eax,1Fh
EB 04                jmp         done
normal_path:
99                   cdq
41 F7 F8             idiv        eax,r8d
done:
44 8B F0             mov         r14d,eax
This commit is contained in:
Sintendo 2021-03-04 22:45:45 +01:00
parent 1865035798
commit 83f38388a1
1 changed files with 2 additions and 2 deletions

View File

@ -1566,7 +1566,6 @@ void Jit64::divwx(UGeckoInstruction inst)
SetJumpTarget(overflow);
SAR(32, eax, Imm8(31));
MOV(32, Rd, eax);
if (inst.OE)
{
GenerateConstantOverflow(true);
@ -1578,12 +1577,13 @@ void Jit64::divwx(UGeckoInstruction inst)
CDQ();
IDIV(32, Rb);
MOV(32, Rd, eax);
if (inst.OE)
{
GenerateConstantOverflow(false);
}
SetJumpTarget(done);
MOV(32, Rd, eax);
}
if (inst.Rc)
ComputeRC(d);