target/arm: Split out set_btype_raw

Common code for reset_btype and set_btype.
Use tcg_constant_i32.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Richard Henderson 2022-04-17 10:43:37 -07:00 committed by Peter Maydell
parent a4c88675d6
commit 667a4e6235
1 changed files with 12 additions and 13 deletions

View File

@ -128,29 +128,28 @@ static int get_a64_user_mem_index(DisasContext *s)
return arm_to_core_mmu_idx(useridx); return arm_to_core_mmu_idx(useridx);
} }
static void reset_btype(DisasContext *s) static void set_btype_raw(int val)
{ {
if (s->btype != 0) { tcg_gen_st_i32(tcg_constant_i32(val), cpu_env,
TCGv_i32 zero = tcg_const_i32(0); offsetof(CPUARMState, btype));
tcg_gen_st_i32(zero, cpu_env, offsetof(CPUARMState, btype));
tcg_temp_free_i32(zero);
s->btype = 0;
}
} }
static void set_btype(DisasContext *s, int val) static void set_btype(DisasContext *s, int val)
{ {
TCGv_i32 tcg_val;
/* BTYPE is a 2-bit field, and 0 should be done with reset_btype. */ /* BTYPE is a 2-bit field, and 0 should be done with reset_btype. */
tcg_debug_assert(val >= 1 && val <= 3); tcg_debug_assert(val >= 1 && val <= 3);
set_btype_raw(val);
tcg_val = tcg_const_i32(val);
tcg_gen_st_i32(tcg_val, cpu_env, offsetof(CPUARMState, btype));
tcg_temp_free_i32(tcg_val);
s->btype = -1; s->btype = -1;
} }
static void reset_btype(DisasContext *s)
{
if (s->btype != 0) {
set_btype_raw(0);
s->btype = 0;
}
}
void gen_a64_set_pc_im(uint64_t val) void gen_a64_set_pc_im(uint64_t val)
{ {
tcg_gen_movi_i64(cpu_pc, val); tcg_gen_movi_i64(cpu_pc, val);