Message ID | 20230623131711.96775-9-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | target/i386: add a few simple features | expand |
On 6/23/23 15:17, Paolo Bonzini wrote: > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > target/i386/tcg/translate.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) I guess we have no other vendors except Intel and AMD... Acked-by: Richard Henderson <richard.henderson@linaro.org> r~ > > diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c > index ed4016f554b..a20b5af71e7 100644 > --- a/target/i386/tcg/translate.c > +++ b/target/i386/tcg/translate.c > @@ -5669,9 +5669,10 @@ static bool disas_insn(DisasContext *s, CPUState *cpu) > s->base.is_jmp = DISAS_NORETURN; > break; > case 0x134: /* sysenter */ > - /* For Intel SYSENTER is valid on 64-bit */ > - if (CODE64(s) && env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1) > + /* For AMD SYSENTER is not valid in long mode */ > + if (LMA(s) && env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1) { > goto illegal_op; > + } > if (!PE(s)) { > gen_exception_gpf(s); > } else { > @@ -5680,9 +5681,10 @@ static bool disas_insn(DisasContext *s, CPUState *cpu) > } > break; > case 0x135: /* sysexit */ > - /* For Intel SYSEXIT is valid on 64-bit */ > - if (CODE64(s) && env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1) > + /* For AMD SYSEXIT is not valid in long mode */ > + if (LMA(s) && env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1) { > goto illegal_op; > + } > if (!PE(s)) { > gen_exception_gpf(s); > } else {
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index ed4016f554b..a20b5af71e7 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -5669,9 +5669,10 @@ static bool disas_insn(DisasContext *s, CPUState *cpu) s->base.is_jmp = DISAS_NORETURN; break; case 0x134: /* sysenter */ - /* For Intel SYSENTER is valid on 64-bit */ - if (CODE64(s) && env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1) + /* For AMD SYSENTER is not valid in long mode */ + if (LMA(s) && env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1) { goto illegal_op; + } if (!PE(s)) { gen_exception_gpf(s); } else { @@ -5680,9 +5681,10 @@ static bool disas_insn(DisasContext *s, CPUState *cpu) } break; case 0x135: /* sysexit */ - /* For Intel SYSEXIT is valid on 64-bit */ - if (CODE64(s) && env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1) + /* For AMD SYSEXIT is not valid in long mode */ + if (LMA(s) && env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1) { goto illegal_op; + } if (!PE(s)) { gen_exception_gpf(s); } else {
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- target/i386/tcg/translate.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)