projects
/
qemu.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
4ca3d09
)
tcg: Eliminate one store for in-place 128-bit dup_mem
author
Richard Henderson
<richard.henderson@linaro.org>
Fri, 14 Aug 2020 22:02:57 +0000
(15:02 -0700)
committer
Richard Henderson
<richard.henderson@linaro.org>
Thu, 3 Sep 2020 20:13:58 +0000
(13:13 -0700)
Do not store back to the exact memory from which we just loaded.
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
tcg/tcg-op-gvec.c
patch
|
blob
|
history
diff --git
a/tcg/tcg-op-gvec.c
b/tcg/tcg-op-gvec.c
index 793d4ba64c3282b1c457e404ec99cf396d74693e..fcc25b04e6bc924b5feec17f2e670768a6922e19 100644
(file)
--- a/
tcg/tcg-op-gvec.c
+++ b/
tcg/tcg-op-gvec.c
@@
-1581,7
+1581,7
@@
void tcg_gen_gvec_dup_mem(unsigned vece, uint32_t dofs, uint32_t aofs,
TCGv_vec in = tcg_temp_new_vec(TCG_TYPE_V128);
tcg_gen_ld_vec(in, cpu_env, aofs);
- for (i =
0
; i < oprsz; i += 16) {
+ for (i =
(aofs == dofs) * 16
; i < oprsz; i += 16) {
tcg_gen_st_vec(in, cpu_env, dofs + i);
}
tcg_temp_free_vec(in);
@@
-1591,7
+1591,7
@@
void tcg_gen_gvec_dup_mem(unsigned vece, uint32_t dofs, uint32_t aofs,
tcg_gen_ld_i64(in0, cpu_env, aofs);
tcg_gen_ld_i64(in1, cpu_env, aofs + 8);
- for (i =
0
; i < oprsz; i += 16) {
+ for (i =
(aofs == dofs) * 16
; i < oprsz; i += 16) {
tcg_gen_st_i64(in0, cpu_env, dofs + i);
tcg_gen_st_i64(in1, cpu_env, dofs + i + 8);
}