target/arm: Drop copies in gen_sve_{ldr,str}
Since we now get TEMP_TB temporaries by default, we no longer need to make copies across these loops. These were the only uses of new_tmp_a64_local(), so remove that as well. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
e2e641fa3d
commit
78817d3b9f
|
@ -436,12 +436,6 @@ TCGv_i64 new_tmp_a64(DisasContext *s)
|
|||
return s->tmp_a64[s->tmp_a64_count++] = tcg_temp_new_i64();
|
||||
}
|
||||
|
||||
TCGv_i64 new_tmp_a64_local(DisasContext *s)
|
||||
{
|
||||
assert(s->tmp_a64_count < TMP_A64_MAX);
|
||||
return s->tmp_a64[s->tmp_a64_count++] = tcg_temp_local_new_i64();
|
||||
}
|
||||
|
||||
TCGv_i64 new_tmp_a64_zero(DisasContext *s)
|
||||
{
|
||||
TCGv_i64 t = new_tmp_a64(s);
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#define TARGET_ARM_TRANSLATE_A64_H
|
||||
|
||||
TCGv_i64 new_tmp_a64(DisasContext *s);
|
||||
TCGv_i64 new_tmp_a64_local(DisasContext *s);
|
||||
TCGv_i64 new_tmp_a64_zero(DisasContext *s);
|
||||
TCGv_i64 cpu_reg(DisasContext *s, int reg);
|
||||
TCGv_i64 cpu_reg_sp(DisasContext *s, int reg);
|
||||
|
|
|
@ -4344,17 +4344,6 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs,
|
|||
TCGLabel *loop = gen_new_label();
|
||||
TCGv_ptr tp, i = tcg_const_local_ptr(0);
|
||||
|
||||
/* Copy the clean address into a local temp, live across the loop. */
|
||||
t0 = clean_addr;
|
||||
clean_addr = new_tmp_a64_local(s);
|
||||
tcg_gen_mov_i64(clean_addr, t0);
|
||||
|
||||
if (base != cpu_env) {
|
||||
TCGv_ptr b = tcg_temp_local_new_ptr();
|
||||
tcg_gen_mov_ptr(b, base);
|
||||
base = b;
|
||||
}
|
||||
|
||||
gen_set_label(loop);
|
||||
|
||||
t0 = tcg_temp_new_i64();
|
||||
|
@ -4370,11 +4359,6 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs,
|
|||
|
||||
tcg_gen_brcondi_ptr(TCG_COND_LTU, i, len_align, loop);
|
||||
tcg_temp_free_ptr(i);
|
||||
|
||||
if (base != cpu_env) {
|
||||
tcg_temp_free_ptr(base);
|
||||
assert(len_remain == 0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -4445,17 +4429,6 @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs,
|
|||
TCGLabel *loop = gen_new_label();
|
||||
TCGv_ptr tp, i = tcg_const_local_ptr(0);
|
||||
|
||||
/* Copy the clean address into a local temp, live across the loop. */
|
||||
t0 = clean_addr;
|
||||
clean_addr = new_tmp_a64_local(s);
|
||||
tcg_gen_mov_i64(clean_addr, t0);
|
||||
|
||||
if (base != cpu_env) {
|
||||
TCGv_ptr b = tcg_temp_local_new_ptr();
|
||||
tcg_gen_mov_ptr(b, base);
|
||||
base = b;
|
||||
}
|
||||
|
||||
gen_set_label(loop);
|
||||
|
||||
t0 = tcg_temp_new_i64();
|
||||
|
@ -4471,11 +4444,6 @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs,
|
|||
|
||||
tcg_gen_brcondi_ptr(TCG_COND_LTU, i, len_align, loop);
|
||||
tcg_temp_free_ptr(i);
|
||||
|
||||
if (base != cpu_env) {
|
||||
tcg_temp_free_ptr(base);
|
||||
assert(len_remain == 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Predicate register stores can be any multiple of 2. */
|
||||
|
|
Loading…
Reference in New Issue