Re: [PATCH] tcg: Factor tcg_zero_i128() helper out

2026-05-20 Thread Richard Henderson

On 5/20/26 05:16, Philippe Mathieu-Daudé wrote:

Extract tcg_zero_i128() helper for re-use.

Signed-off-by: Philippe Mathieu-Daudé 
---
  include/tcg/tcg-op-common.h|  2 ++
  target/arm/tcg/translate-a64.c |  6 +-
  tcg/tcg.c  | 10 ++
  3 files changed, 13 insertions(+), 5 deletions(-)


Thanks, queued.


r~




[PATCH] tcg: Factor tcg_zero_i128() helper out

2026-05-20 Thread Philippe Mathieu-Daudé
Extract tcg_zero_i128() helper for re-use.

Signed-off-by: Philippe Mathieu-Daudé 
---
 include/tcg/tcg-op-common.h|  2 ++
 target/arm/tcg/translate-a64.c |  6 +-
 tcg/tcg.c  | 10 ++
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/include/tcg/tcg-op-common.h b/include/tcg/tcg-op-common.h
index e02f209c093..aff99754160 100644
--- a/include/tcg/tcg-op-common.h
+++ b/include/tcg/tcg-op-common.h
@@ -18,6 +18,8 @@ TCGv_vaddr tcg_constant_vaddr(uintptr_t val);
 TCGv_vec tcg_constant_vec(TCGType type, unsigned vece, int64_t val);
 TCGv_vec tcg_constant_vec_matching(TCGv_vec match, unsigned vece, int64_t val);
 
+TCGv_i128 tcg_zero_i128(void);
+
 TCGv_i32 tcg_temp_new_i32(void);
 TCGv_i64 tcg_temp_new_i64(void);
 TCGv_ptr tcg_temp_new_ptr(void);
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index 9a27c4c6ec7..506ebff508b 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -4804,18 +4804,14 @@ static bool do_STG(DisasContext *s, arg_ldst_tag *a, 
bool is_zero, bool is_pair)
 
 if (is_zero) {
 TCGv_i64 clean_addr = clean_data_tbi(s, addr);
-TCGv_i64 zero64 = tcg_constant_i64(0);
-TCGv_i128 zero128 = tcg_temp_new_i128();
 int mem_index = get_mem_index(s);
 MemOp mop = finalize_memop(s, MO_128 | MO_ALIGN);
 
-tcg_gen_concat_i64_i128(zero128, zero64, zero64);
-
 /* This is 1 or 2 atomic 16-byte operations. */
 tcg_gen_qemu_st_i128(zero128, clean_addr, mem_index, mop);
 if (is_pair) {
 tcg_gen_addi_i64(clean_addr, clean_addr, 16);
-tcg_gen_qemu_st_i128(zero128, clean_addr, mem_index, mop);
+tcg_gen_qemu_st_i128(tcg_zero_i128(), clean_addr, mem_index, mop);
 }
 }
 
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 2ca44766f64..71c2500ab14 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -2265,6 +2265,16 @@ TCGv_i64 tcg_constant_i64(int64_t val)
 return temp_tcgv_i64(tcg_constant_internal(TCG_TYPE_I64, val));
 }
 
+TCGv_i128 tcg_zero_i128(void)
+{
+TCGv_i64 zero64 = tcg_constant_i64(0);
+TCGv_i128 zero128 = tcg_temp_new_i128();
+
+tcg_gen_concat_i64_i128(zero128, zero64, zero64);
+
+return zero128;
+}
+
 TCGv_vaddr tcg_constant_vaddr(uintptr_t val)
 {
 return temp_tcgv_vaddr(tcg_constant_internal(TCG_TYPE_PTR, val));
-- 
2.53.0