On 1/6/25 13:58, Philippe Mathieu-Daudé wrote:
On 2/1/25 19:06, Richard Henderson wrote:
Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
---
  include/tcg/tcg-opc.h            |  16 ++---
  tcg/aarch64/tcg-target-has.h     |  12 ++--
  tcg/arm/tcg-target-has.h         |   8 +--
  tcg/i386/tcg-target-has.h        |  12 ++--
  tcg/loongarch64/tcg-target-has.h |  12 ++--
  tcg/mips/tcg-target-has.h        |  12 ++--
  tcg/ppc/tcg-target-has.h         |  12 ++--
  tcg/riscv/tcg-target-has.h       |  12 ++--
  tcg/s390x/tcg-target-has.h       |  12 ++--
  tcg/sparc64/tcg-target-has.h     |  12 ++--
  tcg/tcg-has.h                    |   4 --
  tcg/tci/tcg-target-has.h         |  14 ++--
  tcg/tcg-op.c                     | 115 +++++++++++++++++--------------
  tcg/tcg.c                        |  24 +++----
  tcg/tci.c                        |   8 ---
  15 files changed, 125 insertions(+), 160 deletions(-)


@@ -3099,58 +3099,73 @@ void tcg_gen_sub2_i64(TCGv_i64 rl, TCGv_i64 rh, 
TCGv_i64 al,
  void tcg_gen_mulu2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i64 arg1, TCGv_i64 arg2)
  {
-    if (TCG_TARGET_HAS_mulu2_i64) {
-        tcg_gen_op4_i64(INDEX_op_mulu2_i64, rl, rh, arg1, arg2);
-    } else if (TCG_TARGET_HAS_muluh_i64) {
-        TCGv_i64 t = tcg_temp_ebb_new_i64();
-        tcg_gen_op3_i64(INDEX_op_mul_i64, t, arg1, arg2);
-        tcg_gen_op3_i64(INDEX_op_muluh_i64, rh, arg1, arg2);
-        tcg_gen_mov_i64(rl, t);
-        tcg_temp_free_i64(t);
-    } else {
-        TCGv_i64 t0 = tcg_temp_ebb_new_i64();
-        tcg_gen_mul_i64(t0, arg1, arg2);
-        gen_helper_muluh_i64(rh, arg1, arg2);
-        tcg_gen_mov_i64(rl, t0);
-        tcg_temp_free_i64(t0);
+    TCGv_i64 t;
+
+    if (TCG_TARGET_REG_BITS == 64) {
+        if (TCG_TARGET_HAS_mulu2(TCG_TYPE_I64)) {
+            tcg_gen_op4_i64(INDEX_op_mulu2_i64, rl, rh, arg1, arg2);
+            return;
+        }
+        if (TCG_TARGET_HAS_muluh(TCG_TYPE_I64)) {
+            t = tcg_temp_ebb_new_i64();
+            tcg_gen_op3_i64(INDEX_op_mul_i64, t, arg1, arg2);
+            tcg_gen_op3_i64(INDEX_op_muluh_i64, rh, arg1, arg2);
+            tcg_gen_mov_i64(rl, t);
+            tcg_temp_free_i64(t);
+            return;
+        }
      }

Should we mention the new logic fallback in commit description?

It's not new, just indented under TCG_TARGET_REG_BITS == 64.
Previously, tcg-has.h provided TCG_TARGET_HAS_*_i64 false for 32-bit host.


r~

Reply via email to