From: Richard Henderson Date: Mon, 25 Mar 2024 00:03:05 +0000 (-1000) Subject: target/hppa: Fix DCOR reconstruction of carry bits X-Git-Tag: v9.0.0-rc2~8^2~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d0ae87a27c212b4dda1b5e83507f5ebdfd019097;p=thirdparty%2Fqemu.git target/hppa: Fix DCOR reconstruction of carry bits The carry bits for each nibble N are located in bit (N+1)*4, so the shift by 3 was off by one. Furthermore, the carry bit for the most significant carry bit is indeed located in bit 64, which is located in a different storage word. Use a double-word shift-right to reassemble into a single word and place them all at bit 0 of their respective nibbles. Tested-by: Helge Deller Reviewed-by: Helge Deller Fixes: b2167459ae4 ("target-hppa: Implement basic arithmetic") Signed-off-by: Richard Henderson --- diff --git a/target/hppa/translate.c b/target/hppa/translate.c index e0413102076..a3f425d8616 100644 --- a/target/hppa/translate.c +++ b/target/hppa/translate.c @@ -2791,7 +2791,7 @@ static bool do_dcor(DisasContext *ctx, arg_rr_cf_d *a, bool is_i) nullify_over(ctx); tmp = tcg_temp_new_i64(); - tcg_gen_shri_i64(tmp, cpu_psw_cb, 3); + tcg_gen_extract2_i64(tmp, cpu_psw_cb, cpu_psw_cb_msb, 4); if (!is_i) { tcg_gen_not_i64(tmp, tmp); }