target/loongarch: Fix the meaning of ECFG reg's VS field
authorXiaojuan Yang <yangxiaojuan@loongson.cn>
Fri, 1 Jul 2022 09:34:04 +0000 (17:34 +0800)
committerRichard Henderson <richard.henderson@linaro.org>
Mon, 4 Jul 2022 05:38:58 +0000 (11:08 +0530)
By the manual of LoongArch CSR, the VS field(18:16 bits) of
ECFG reg means that the number of instructions between each
exception entry is 2^VS.

Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220701093407.2150607-9-yangxiaojuan@loongson.cn>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
target/loongarch/cpu.c

index 47c0bdd1acb2f7a30d542915ed22f206a0f654a0..d2d4667a34ef4bffb2424c07e73fe262cab62c5e 100644 (file)
@@ -223,6 +223,10 @@ static void loongarch_cpu_do_interrupt(CPUState *cs)
     env->CSR_CRMD = FIELD_DP64(env->CSR_CRMD, CSR_CRMD, PLV, 0);
     env->CSR_CRMD = FIELD_DP64(env->CSR_CRMD, CSR_CRMD, IE, 0);
 
+    if (vec_size) {
+        vec_size = (1 << vec_size) * 4;
+    }
+
     if  (cs->exception_index == EXCCODE_INT) {
         /* Interrupt */
         uint32_t vector = 0;