mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 09:43:56 -06: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
1 changed files with 15 additions and 0 deletions
|
@ -336,6 +336,13 @@ static bool patch_reloc(tcg_insn_unit *src_rw, int type,
|
||||||
insn &= ~INSN_OFF19(-1);
|
insn &= ~INSN_OFF19(-1);
|
||||||
insn |= INSN_OFF19(pcrel);
|
insn |= INSN_OFF19(pcrel);
|
||||||
break;
|
break;
|
||||||
|
case R_SPARC_13:
|
||||||
|
if (!check_fit_ptr(value, 13)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
insn &= ~INSN_IMM13(-1);
|
||||||
|
insn |= INSN_IMM13(value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
}
|
}
|
||||||
|
@ -479,6 +486,14 @@ static void tcg_out_movi_int(TCGContext *s, TCGType type, TCGReg ret,
|
||||||
return;
|
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. */
|
/* A 64-bit constant decomposed into 2 32-bit pieces. */
|
||||||
if (check_fit_i32(lo, 13)) {
|
if (check_fit_i32(lo, 13)) {
|
||||||
hi = (arg - lo) >> 32;
|
hi = (arg - lo) >> 32;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue