target/i386: fix processing of intercept 0 (read CR0)
authorPaolo Bonzini <pbonzini@redhat.com>
Thu, 9 May 2024 12:34:24 +0000 (14:34 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 11 Jun 2024 12:29:22 +0000 (14:29 +0200)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
target/i386/tcg/decode-new.c.inc
target/i386/tcg/decode-new.h

index 4f5fcdb88dd87585ed9acab6ae8e24e0288f5487..cd925fe358905c9151087d8369badea23222bf2d 100644 (file)
 #define vex13 .vex_class = 13,
 
 #define chk(a) .check = X86_CHECK_##a,
-#define svm(a) .intercept = SVM_EXIT_##a,
+#define svm(a) .intercept = SVM_EXIT_##a, .has_intercept = true,
 
 #define avx2_256 .vex_special = X86_VEX_AVX2_256,
 
@@ -2559,7 +2559,7 @@ static void disas_insn(DisasContext *s, CPUState *cpu)
             goto gp_fault;
         }
     }
-    if (decode.e.intercept && unlikely(GUEST(s))) {
+    if (decode.e.has_intercept && unlikely(GUEST(s))) {
         gen_helper_svm_check_intercept(tcg_env,
                                        tcg_constant_i32(decode.e.intercept));
     }
index 46a96b220d09265535f527f9b950498af7002d46..8465717ea2141718da043f9aec7c2d82a637f760 100644 (file)
@@ -272,6 +272,7 @@ struct X86OpEntry {
     unsigned     valid_prefix:16;
     unsigned     check:16;
     unsigned     intercept:8;
+    bool         has_intercept:1;
     bool         is_decode:1;
 };