mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-28 22:10:33 +00:00
tcg/sparc: Use the constant pool for 64-bit constants
Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
6a6bfa3c60
commit
c834b8d81b
@ -336,6 +336,13 @@ static bool patch_reloc(tcg_insn_unit *src_rw, int type,
|
||||
insn &= ~INSN_OFF19(-1);
|
||||
insn |= INSN_OFF19(pcrel);
|
||||
break;
|
||||
case R_SPARC_13:
|
||||
if (!check_fit_ptr(value, 13)) {
|
||||
return false;
|
||||
}
|
||||
insn &= ~INSN_IMM13(-1);
|
||||
insn |= INSN_IMM13(value);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
@ -479,6 +486,14 @@ static void tcg_out_movi_int(TCGContext *s, TCGType type, TCGReg ret,
|
||||
return;
|
||||
}
|
||||
|
||||
/* Use the constant pool, if possible. */
|
||||
if (!in_prologue && USE_REG_TB) {
|
||||
new_pool_label(s, arg, R_SPARC_13, s->code_ptr,
|
||||
tcg_tbrel_diff(s, NULL));
|
||||
tcg_out32(s, LDX | INSN_RD(ret) | INSN_RS1(TCG_REG_TB));
|
||||
return;
|
||||
}
|
||||
|
||||
/* A 64-bit constant decomposed into 2 32-bit pieces. */
|
||||
if (check_fit_i32(lo, 13)) {
|
||||
hi = (arg - lo) >> 32;
|
||||
|
Loading…
Reference in New Issue
Block a user