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;
+ }
}