shader_jit_a64: Optimize `MOVA` dest-enable (#7122)
Rather than branching the 3 cases of dest-enablement, just emit a single move-and-sign-extend instruction for each case. From this review: https://github.com/citra-emu/citra/pull/7002#discussion_r1381560584
This commit is contained in:
parent
3f4b57635e
commit
1d4d421097
|
@ -580,22 +580,13 @@ void JitShader::Compile_MOVA(Instruction instr) {
|
|||
MOV(XSCRATCH0, SRC1.Delem()[0]);
|
||||
|
||||
// Handle destination enable
|
||||
if (swiz.DestComponentEnabled(0) && swiz.DestComponentEnabled(1)) {
|
||||
// Move and sign-extend low 32 bits
|
||||
SXTW(ADDROFFS_REG_0, XSCRATCH0.toW());
|
||||
|
||||
// Move and sign-extend high 32 bits
|
||||
LSR(XSCRATCH0, XSCRATCH0, 32);
|
||||
SXTW(ADDROFFS_REG_1, XSCRATCH0.toW());
|
||||
} else {
|
||||
if (swiz.DestComponentEnabled(0)) {
|
||||
// Move and sign-extend low 32 bits
|
||||
SXTW(ADDROFFS_REG_0, XSCRATCH0.toW());
|
||||
} else if (swiz.DestComponentEnabled(1)) {
|
||||
// Move and sign-extend high 32 bits
|
||||
LSR(XSCRATCH0, XSCRATCH0, 32);
|
||||
SXTW(ADDROFFS_REG_1, XSCRATCH0.toW());
|
||||
}
|
||||
if (swiz.DestComponentEnabled(1)) {
|
||||
// Move and sign-extend high 32 bits
|
||||
ASR(ADDROFFS_REG_1, XSCRATCH0, 32);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue