tcg/ppc: Use ADDPCIS in tcg_out_movi_int

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2023-08-15 17:19:37 +00:00
parent 3acd75b851
commit 776cd9b648

View File

@ -1055,6 +1055,19 @@ static void tcg_out_movi_int(TCGContext *s, TCGType type, TCGReg ret,
return;
}
/* Load addresses within 2GB with 2 insns. */
if (have_isa_3_00) {
intptr_t hi = tcg_pcrel_diff(s, (void *)arg) - 4;
int16_t lo = hi;
hi -= lo;
if (hi == (int32_t)hi) {
tcg_out_addpcis(s, TCG_REG_TMP2, hi);
tcg_out32(s, ADDI | TAI(ret, TCG_REG_TMP2, lo));
return;
}
}
/* Load addresses within 2GB of TB with 2 (or rarely 3) insns. */
if (!in_prologue && USE_REG_TB && tb_diff == (int32_t)tb_diff) {
tcg_out_mem_long(s, ADDI, ADD, ret, TCG_REG_TB, tb_diff);