projects
/
qemu.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
faf58e5
)
target/arm: Use tcg_gen_gvec_mov for clear_vec_high
author
Richard Henderson
<richard.henderson@linaro.org>
Tue, 19 May 2020 21:24:52 +0000
(14:24 -0700)
committer
Peter Maydell
<peter.maydell@linaro.org>
Thu, 21 May 2020 21:05:27 +0000
(22:05 +0100)
The 8-byte store for the end a !is_q operation can be
merged with the other stores. Use a no-op vector move
to trigger the expand_clr portion of tcg_gen_gvec_mov.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id:
20200519212453
.28494-2-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
target/arm/translate-a64.c
patch
|
blob
|
history
diff --git
a/target/arm/translate-a64.c
b/target/arm/translate-a64.c
index 991e451644c6b7f16a0de198eacead9e145f25c5..4f6edb28927265a9e0aa103e3bbd77c036f62531 100644
(file)
--- a/
target/arm/translate-a64.c
+++ b/
target/arm/translate-a64.c
@@
-496,14
+496,8
@@
static void clear_vec_high(DisasContext *s, bool is_q, int rd)
unsigned ofs = fp_reg_offset(s, rd, MO_64);
unsigned vsz = vec_full_reg_size(s);
- if (!is_q) {
- TCGv_i64 tcg_zero = tcg_const_i64(0);
- tcg_gen_st_i64(tcg_zero, cpu_env, ofs + 8);
- tcg_temp_free_i64(tcg_zero);
- }
- if (vsz > 16) {
- tcg_gen_gvec_dup_imm(MO_64, ofs + 16, vsz - 16, vsz - 16, 0);
- }
+ /* Nop move, with side effect of clearing the tail. */
+ tcg_gen_gvec_mov(MO_64, ofs, ofs, is_q ? 16 : 8, vsz);
}
void write_fp_dreg(DisasContext *s, int reg, TCGv_i64 v)