diff mbox series

[v4,125/163] target/hppa: Use tcg_gen_addcio_i64

Message ID 20250415192515.232910-126-richard.henderson@linaro.org
State New
Headers show
Series tcg: Convert to TCGOutOp structures | expand

Commit Message

Richard Henderson April 15, 2025, 7:24 p.m. UTC
Use this in do_add, do_sub, and do_ds, all of which need
add with carry-in and carry-out.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/hppa/translate.c | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

Comments

Pierrick Bouvier April 16, 2025, 7:05 p.m. UTC | #1
On 4/15/25 12:24, Richard Henderson wrote:
> Use this in do_add, do_sub, and do_ds, all of which need
> add with carry-in and carry-out.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   target/hppa/translate.c | 17 ++++++-----------
>   1 file changed, 6 insertions(+), 11 deletions(-)
> 
> diff --git a/target/hppa/translate.c b/target/hppa/translate.c
> index 0d0d1bc99b..c92b09bae2 100644
> --- a/target/hppa/translate.c
> +++ b/target/hppa/translate.c
> @@ -1208,10 +1208,10 @@ static void do_add(DisasContext *ctx, unsigned rt, TCGv_i64 orig_in1,
>           cb_msb = tcg_temp_new_i64();
>           cb = tcg_temp_new_i64();
>   
> -        tcg_gen_add2_i64(dest, cb_msb, in1, ctx->zero, in2, ctx->zero);
>           if (is_c) {
> -            tcg_gen_add2_i64(dest, cb_msb, dest, cb_msb,
> -                             get_psw_carry(ctx, d), ctx->zero);
> +            tcg_gen_addcio_i64(dest, cb_msb, in1, in2, get_psw_carry(ctx, d));
> +        } else {
> +            tcg_gen_add2_i64(dest, cb_msb, in1, ctx->zero, in2, ctx->zero);
>           }
>           tcg_gen_xor_i64(cb, in1, in2);
>           tcg_gen_xor_i64(cb, cb, dest);
> @@ -1307,9 +1307,7 @@ static void do_sub(DisasContext *ctx, unsigned rt, TCGv_i64 in1,
>       if (is_b) {
>           /* DEST,C = IN1 + ~IN2 + C.  */
>           tcg_gen_not_i64(cb, in2);
> -        tcg_gen_add2_i64(dest, cb_msb, in1, ctx->zero,
> -                         get_psw_carry(ctx, d), ctx->zero);
> -        tcg_gen_add2_i64(dest, cb_msb, dest, cb_msb, cb, ctx->zero);
> +        tcg_gen_addcio_i64(dest, cb_msb, in1, cb, get_psw_carry(ctx, d));
>           tcg_gen_xor_i64(cb, cb, in1);
>           tcg_gen_xor_i64(cb, cb, dest);
>       } else {
> @@ -3007,9 +3005,7 @@ static bool trans_ds(DisasContext *ctx, arg_rrr_cf *a)
>       tcg_gen_xor_i64(add2, in2, addc);
>       tcg_gen_andi_i64(addc, addc, 1);
>   
> -    tcg_gen_add2_i64(dest, cpu_psw_cb_msb, add1, ctx->zero, add2, ctx->zero);
> -    tcg_gen_add2_i64(dest, cpu_psw_cb_msb, dest, cpu_psw_cb_msb,
> -                     addc, ctx->zero);
> +    tcg_gen_addcio_i64(dest, cpu_psw_cb_msb, add1, add2, addc);
>   
>       /* Write back the result register.  */
>       save_gpr(ctx, a->t, dest);
> @@ -3552,8 +3548,7 @@ static bool do_addb(DisasContext *ctx, unsigned r, TCGv_i64 in1,
>           TCGv_i64 cb = tcg_temp_new_i64();
>           TCGv_i64 cb_msb = tcg_temp_new_i64();
>   
> -        tcg_gen_movi_i64(cb_msb, 0);
> -        tcg_gen_add2_i64(dest, cb_msb, in1, cb_msb, in2, cb_msb);
> +        tcg_gen_add2_i64(dest, cb_msb, in1, ctx->zero, in2, ctx->zero);
>           tcg_gen_xor_i64(cb, in1, in2);
>           tcg_gen_xor_i64(cb, cb, dest);
>           cb_cond = get_carry(ctx, d, cb, cb_msb);

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
diff mbox series

Patch

diff --git a/target/hppa/translate.c b/target/hppa/translate.c
index 0d0d1bc99b..c92b09bae2 100644
--- a/target/hppa/translate.c
+++ b/target/hppa/translate.c
@@ -1208,10 +1208,10 @@  static void do_add(DisasContext *ctx, unsigned rt, TCGv_i64 orig_in1,
         cb_msb = tcg_temp_new_i64();
         cb = tcg_temp_new_i64();
 
-        tcg_gen_add2_i64(dest, cb_msb, in1, ctx->zero, in2, ctx->zero);
         if (is_c) {
-            tcg_gen_add2_i64(dest, cb_msb, dest, cb_msb,
-                             get_psw_carry(ctx, d), ctx->zero);
+            tcg_gen_addcio_i64(dest, cb_msb, in1, in2, get_psw_carry(ctx, d));
+        } else {
+            tcg_gen_add2_i64(dest, cb_msb, in1, ctx->zero, in2, ctx->zero);
         }
         tcg_gen_xor_i64(cb, in1, in2);
         tcg_gen_xor_i64(cb, cb, dest);
@@ -1307,9 +1307,7 @@  static void do_sub(DisasContext *ctx, unsigned rt, TCGv_i64 in1,
     if (is_b) {
         /* DEST,C = IN1 + ~IN2 + C.  */
         tcg_gen_not_i64(cb, in2);
-        tcg_gen_add2_i64(dest, cb_msb, in1, ctx->zero,
-                         get_psw_carry(ctx, d), ctx->zero);
-        tcg_gen_add2_i64(dest, cb_msb, dest, cb_msb, cb, ctx->zero);
+        tcg_gen_addcio_i64(dest, cb_msb, in1, cb, get_psw_carry(ctx, d));
         tcg_gen_xor_i64(cb, cb, in1);
         tcg_gen_xor_i64(cb, cb, dest);
     } else {
@@ -3007,9 +3005,7 @@  static bool trans_ds(DisasContext *ctx, arg_rrr_cf *a)
     tcg_gen_xor_i64(add2, in2, addc);
     tcg_gen_andi_i64(addc, addc, 1);
 
-    tcg_gen_add2_i64(dest, cpu_psw_cb_msb, add1, ctx->zero, add2, ctx->zero);
-    tcg_gen_add2_i64(dest, cpu_psw_cb_msb, dest, cpu_psw_cb_msb,
-                     addc, ctx->zero);
+    tcg_gen_addcio_i64(dest, cpu_psw_cb_msb, add1, add2, addc);
 
     /* Write back the result register.  */
     save_gpr(ctx, a->t, dest);
@@ -3552,8 +3548,7 @@  static bool do_addb(DisasContext *ctx, unsigned r, TCGv_i64 in1,
         TCGv_i64 cb = tcg_temp_new_i64();
         TCGv_i64 cb_msb = tcg_temp_new_i64();
 
-        tcg_gen_movi_i64(cb_msb, 0);
-        tcg_gen_add2_i64(dest, cb_msb, in1, cb_msb, in2, cb_msb);
+        tcg_gen_add2_i64(dest, cb_msb, in1, ctx->zero, in2, ctx->zero);
         tcg_gen_xor_i64(cb, in1, in2);
         tcg_gen_xor_i64(cb, cb, dest);
         cb_cond = get_carry(ctx, d, cb, cb_msb);