Song,

It is a little strange that patch with three version is sent in one day.
Maybe we should keep careful and calm :-)

Regards
Bibo Mao

On 2025/6/3 下午4:25, Song Gao wrote:
on qemu we got an aborted error
**
ERROR:../target/loongarch/tcg/insn_trans/trans_vec.c.inc:3574:vldi_get_value: 
code should not be reached
Bail out! 
ERROR:../target/loongarch/tcg/insn_trans/trans_vec.c.inc:3574:vldi_get_value: 
code should not be reached
Aborted (core dumped)
bu on 3A600/3A5000 we got a "Illegal instruction" error.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2971

Signed-off-by: Song Gao <gaos...@loongson.cn>
---
  target/loongarch/tcg/insn_trans/trans_vec.c.inc | 14 +++++++++++---
  1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/target/loongarch/tcg/insn_trans/trans_vec.c.inc 
b/target/loongarch/tcg/insn_trans/trans_vec.c.inc
index dff92772ad..9fb72fe914 100644
--- a/target/loongarch/tcg/insn_trans/trans_vec.c.inc
+++ b/target/loongarch/tcg/insn_trans/trans_vec.c.inc
@@ -3465,7 +3465,7 @@ TRANS(xvmsknz_b, LASX, gen_xx, gen_helper_vmsknz_b)
  static uint64_t vldi_get_value(DisasContext *ctx, uint32_t imm)
  {
      int mode;
-    uint64_t data, t;
+    uint64_t data = 0, t;
/*
       * imm bit [11:8] is mode, mode value is 0-12.
@@ -3568,19 +3568,27 @@ static uint64_t vldi_get_value(DisasContext *ctx, 
uint32_t imm)
              t1 = (b7 << 9) | ((1-b6) << 8) | (b6 ? 0xff : 0);
              data = (t1 << 54) | (t0 << 48);
          }
-        break;
      default:
-        generate_exception(ctx, EXCCODE_INE);
          g_assert_not_reached();
+        break;
      }
      return data;
  }
+static bool check_vldi_mode(arg_vldi *a)
+{
+   return (a->imm >>8 & 0xf) <= 12;
+}
  static bool gen_vldi(DisasContext *ctx, arg_vldi *a, uint32_t oprsz)
  {
      int sel, vece;
      uint64_t value;
+ if (!check_vldi_mode(a)){
+        generate_exception(ctx, EXCCODE_INE);
+        return true;
+    }
+
      if (!check_vec(ctx, oprsz)) {
          return true;
      }



Reply via email to