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
1 changed files with 4 additions and 13 deletions
|
@ -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)) {
|
|
||||||
// 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)) {
|
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());
|
||||||
} 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue