Jit64: mtfsfx - Optimized masking
The masking logic can be eliminated when the mask is known to be all ones. This case is very common. Before: 66 48 0F 7E F0 movq rax,xmm6 8B 55 5C mov edx,dword ptr [rbp+5Ch] 83 E0 FF and eax,0FFFFFFFFh 83 E2 00 and edx,0 0B C2 or eax,edx 89 45 5C mov dword ptr [rbp+5Ch],eax 48 8D 15 C3 3C FE 01 lea rdx,[19520020h] 83 E0 07 and eax,7 0F AE 14 82 ldmxcsr dword ptr [rdx+rax*4] After: 66 48 0F 7E F0 movq rax,xmm6 89 45 5C mov dword ptr [rbp+5Ch],eax 48 8D 15 2A D1 FD 01 lea rdx,[19440000h] 83 E0 07 and eax,7 0F AE 14 82 ldmxcsr dword ptr [rdx+rax*4]
This commit is contained in:
parent
c77a5f7e32
commit
7de4623d48
|
@ -792,10 +792,13 @@ void Jit64::mtfsfx(UGeckoInstruction inst)
|
||||||
else
|
else
|
||||||
MOV(32, R(RSCRATCH), Rb);
|
MOV(32, R(RSCRATCH), Rb);
|
||||||
|
|
||||||
|
if (mask != 0xFFFFFFFF)
|
||||||
|
{
|
||||||
MOV(32, R(RSCRATCH2), PPCSTATE(fpscr));
|
MOV(32, R(RSCRATCH2), PPCSTATE(fpscr));
|
||||||
AND(32, R(RSCRATCH), Imm32(mask));
|
AND(32, R(RSCRATCH), Imm32(mask));
|
||||||
AND(32, R(RSCRATCH2), Imm32(~mask));
|
AND(32, R(RSCRATCH2), Imm32(~mask));
|
||||||
OR(32, R(RSCRATCH), R(RSCRATCH2));
|
OR(32, R(RSCRATCH), R(RSCRATCH2));
|
||||||
|
}
|
||||||
MOV(32, PPCSTATE(fpscr), R(RSCRATCH));
|
MOV(32, PPCSTATE(fpscr), R(RSCRATCH));
|
||||||
|
|
||||||
if (inst.FM & 1)
|
if (inst.FM & 1)
|
||||||
|
|
Loading…
Reference in New Issue