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:
Wunk 2023-11-07 11:46:40 -08:00 committed by GitHub
parent 3f4b57635e
commit 1d4d421097
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -580,22 +580,13 @@ void JitShader::Compile_MOVA(Instruction instr) {
MOV(XSCRATCH0, SRC1.Delem()[0]); MOV(XSCRATCH0, SRC1.Delem()[0]);
// Handle destination enable // Handle destination enable
if (swiz.DestComponentEnabled(0) && swiz.DestComponentEnabled(1)) { if (swiz.DestComponentEnabled(0)) {
// Move and sign-extend low 32 bits // Move and sign-extend low 32 bits
SXTW(ADDROFFS_REG_0, XSCRATCH0.toW()); SXTW(ADDROFFS_REG_0, XSCRATCH0.toW());
}
if (swiz.DestComponentEnabled(1)) {
// Move and sign-extend high 32 bits // Move and sign-extend high 32 bits
LSR(XSCRATCH0, XSCRATCH0, 32); ASR(ADDROFFS_REG_1, 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());
}
} }
} }