mirror of https://github.com/xemu-project/xemu.git
target/sparc64: Remove tcg_out_movi_s13 case from tcg_out_movi_imm32
Shuffle the order in tcg_out_movi_int to check s13 first, and drop this check from tcg_out_movi_imm32. This might make the sequence for in_prologue larger, but not worth worrying about. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
8b14f8627c
commit
ca0681c941
|
@ -407,15 +407,10 @@ static void tcg_out_movi_s13(TCGContext *s, TCGReg ret, int32_t arg)
|
|||
|
||||
static void tcg_out_movi_imm32(TCGContext *s, TCGReg ret, int32_t arg)
|
||||
{
|
||||
if (check_fit_i32(arg, 13)) {
|
||||
/* A 13-bit constant sign-extended to 64-bits. */
|
||||
tcg_out_movi_s13(s, ret, arg);
|
||||
} else {
|
||||
/* A 32-bit constant zero-extended to 64 bits. */
|
||||
tcg_out_sethi(s, ret, arg);
|
||||
if (arg & 0x3ff) {
|
||||
tcg_out_arithi(s, ret, ret, arg & 0x3ff, ARITH_OR);
|
||||
}
|
||||
/* A 32-bit constant zero-extended to 64 bits. */
|
||||
tcg_out_sethi(s, ret, arg);
|
||||
if (arg & 0x3ff) {
|
||||
tcg_out_arithi(s, ret, ret, arg & 0x3ff, ARITH_OR);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -426,18 +421,18 @@ static void tcg_out_movi_int(TCGContext *s, TCGType type, TCGReg ret,
|
|||
tcg_target_long hi, lo = (int32_t)arg;
|
||||
tcg_target_long test, lsb;
|
||||
|
||||
/* A 32-bit constant, or 32-bit zero-extended to 64-bits. */
|
||||
if (type == TCG_TYPE_I32 || arg == (uint32_t)arg) {
|
||||
tcg_out_movi_imm32(s, ret, arg);
|
||||
return;
|
||||
}
|
||||
|
||||
/* A 13-bit constant sign-extended to 64-bits. */
|
||||
if (check_fit_tl(arg, 13)) {
|
||||
tcg_out_movi_s13(s, ret, arg);
|
||||
return;
|
||||
}
|
||||
|
||||
/* A 32-bit constant, or 32-bit zero-extended to 64-bits. */
|
||||
if (type == TCG_TYPE_I32 || arg == (uint32_t)arg) {
|
||||
tcg_out_movi_imm32(s, ret, arg);
|
||||
return;
|
||||
}
|
||||
|
||||
/* A 13-bit constant relative to the TB. */
|
||||
if (!in_prologue) {
|
||||
test = tcg_tbrel_diff(s, (void *)arg);
|
||||
|
|
Loading…
Reference in New Issue