mirror of
https://github.com/Motorhead1991/qemu.git
synced 2026-02-10 10:59:28 -07:00
target/hppa: Use tcg_gen_addcio_i64
Use this in do_add, do_sub, and do_ds, all of which need add with carry-in and carry-out. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
eea0f7ea51
commit
14e9ff8514
1 changed files with 6 additions and 11 deletions
|
|
@ -1209,10 +1209,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);
|
||||
|
|
@ -1308,9 +1308,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 {
|
||||
|
|
@ -3008,9 +3006,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);
|
||||
|
|
@ -3553,8 +3549,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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue