All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
To: qemu-devel@nongnu.org
Cc: kbastian@mail.uni-paderborn.de, anton.kochkov@proton.me,
	richard.henderson@linaro.org
Subject: [PATCH v2 07/10] target/tricore: Fix OPC2_32_RRRR_DEXTR
Date: Thu,  2 Feb 2023 13:04:29 +0100	[thread overview]
Message-ID: <20230202120432.1268-8-kbastian@mail.uni-paderborn.de> (raw)
In-Reply-To: <20230202120432.1268-1-kbastian@mail.uni-paderborn.de>

if cpu_gpr_d[r3] == 0 then we were shifting the lower register to the
right by 32 which is undefined behaviour. In this case the TriCore would
do nothing an just return the higher register cpu_reg_d[r1]. We fixed
that by detecting whether cpu_gpr_d[r3] was zero and cleared the lower
register.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
---
v1 -> v2:
  - use tcg_constant_tl(0) for TCGv zero
  - add extra line on top of comment

 target/tricore/translate.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/target/tricore/translate.c b/target/tricore/translate.c
index 3b4ec530b1..8bf78b46d0 100644
--- a/target/tricore/translate.c
+++ b/target/tricore/translate.c
@@ -8245,10 +8245,19 @@ static void decode_rrrr_extract_insert(DisasContext *ctx)
         if (r1 == r2) {
             tcg_gen_rotl_tl(cpu_gpr_d[r4], cpu_gpr_d[r1], tmp_pos);
         } else {
+            TCGv msw = tcg_temp_new();
+            TCGv zero = tcg_constant_tl(0);
             tcg_gen_shl_tl(tmp_width, cpu_gpr_d[r1], tmp_pos);
-            tcg_gen_subfi_tl(tmp_pos, 32, tmp_pos);
-            tcg_gen_shr_tl(tmp_pos, cpu_gpr_d[r2], tmp_pos);
-            tcg_gen_or_tl(cpu_gpr_d[r4], tmp_width, tmp_pos);
+            tcg_gen_subfi_tl(msw, 32, tmp_pos);
+            tcg_gen_shr_tl(msw, cpu_gpr_d[r2], msw);
+            /*
+             * if pos == 0, then we do cpu_gpr_d[r2] << 32, which is undefined
+             * behaviour. So check that case here and set the low bits to zero
+             * which effectivly returns cpu_gpr_d[r1]
+             */
+            tcg_gen_movcond_tl(TCG_COND_EQ, msw, tmp_pos, zero, zero, msw);
+            tcg_gen_or_tl(cpu_gpr_d[r4], tmp_width, msw);
+            tcg_temp_free(msw);
         }
         break;
     case OPC2_32_RRRR_EXTR:
-- 
2.39.1



  parent reply	other threads:[~2023-02-02 12:11 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-02 12:04 [PATCH v2 00/10] TriCore instruction bugfixes Bastian Koppelmann
2023-02-02 12:04 ` [PATCH v2 01/10] target/tricore: Fix OPC2_32_RCRW_IMASK translation Bastian Koppelmann
2023-02-02 12:04 ` [PATCH v2 02/10] tests/tcg/tricore: Add test for OPC2_32_RCRW_IMASK Bastian Koppelmann
2023-02-02 12:04 ` [PATCH v2 03/10] target/tricore: Fix OPC2_32_RCRW_INSERT translation Bastian Koppelmann
2023-02-02 12:04 ` [PATCH v2 04/10] tests/tcg/tricore: Add test for OPC2_32_RCRW_INSERT Bastian Koppelmann
2023-02-02 12:04 ` [PATCH v2 05/10] target/tricore: Fix RRPW_DEXTR Bastian Koppelmann
2023-02-02 15:52   ` Richard Henderson
2023-02-02 12:04 ` [PATCH v2 06/10] tests/tcg/tricore: Add tests for RRPW_DEXTR Bastian Koppelmann
2023-02-02 12:04 ` Bastian Koppelmann [this message]
2023-02-02 12:04 ` [PATCH v2 08/10] tests/tcg/tricore: Add OPC2_32_RRRR_DEXTR tests Bastian Koppelmann
2023-02-02 12:04 ` [PATCH v2 09/10] target/tricore: Fix OPC2_32_BO_LD_BU_PREINC Bastian Koppelmann
2023-02-02 12:04 ` [PATCH v2 10/10] tests/tcg/tricore: Add LD.BU tests Bastian Koppelmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230202120432.1268-8-kbastian@mail.uni-paderborn.de \
    --to=kbastian@mail.uni-paderborn.de \
    --cc=anton.kochkov@proton.me \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.