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:
parent
1865035798
commit
83f38388a1
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue