[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/8] x86emul: support BMI1 insns
On 16/01/17 11:19, Jan Beulich wrote: >>>> On 13.01.17 at 18:40, <andrew.cooper3@xxxxxxxxxx> wrote: >> On 13/01/17 15:31, Jan Beulich wrote: >>> @@ -5866,6 +5879,67 @@ x86_emulate( >>> break; >>> #endif >>> >>> + case X86EMUL_OPC_VEX(0x0f38, 0xf2): /* andn r/m,r,r */ >>> + case X86EMUL_OPC_VEX(0x0f38, 0xf7): /* bextr r,r/m,r */ >>> + { >>> + uint8_t *buf = get_stub(stub); >>> + typeof(vex) *pvex = container_of(buf + 1, typeof(vex), raw[0]); >>> + >>> + host_and_vcpu_must_have(bmi1); >>> + generate_exception_if(vex.l, EXC_UD); >> The manual also states #UD if VEX.W is set. > This is very clearly a doc error: For one, is doesn't _also_ state this, > but says nothing about VEX.L. And the instruction encodings list .W1 > variants (as expected) to encode 64-bit operations. VEX.L != 0 is called out, but only in the text, not the exception list. The exact text is: "This instruction is not supported in real mode and virtual-8086 mode. The operand size is always 32 bits if not in 64-bit mode. In 64-bit mode operand size 64 requires VEX.W1. VEX.W1 is ignored in non-64-bit modes. An attempt to execute this instruction with VEX.L not equal to 0 will cause #UD." with: "#UD If VEX.W = 1" in the exception list. I am confused about the references to VEX.W1 in the text, because it doesn't match any described VEX fields. At a guess, I'd say it should be referring to VEX.B which control operand size, while VEX.W is an opcode extention. > >>> --- a/xen/include/asm-x86/cpufeature.h >>> +++ b/xen/include/asm-x86/cpufeature.h >>> @@ -57,6 +57,7 @@ >>> #define cpu_has_xsave boot_cpu_has(X86_FEATURE_XSAVE) >>> #define cpu_has_avx boot_cpu_has(X86_FEATURE_AVX) >>> #define cpu_has_lwp boot_cpu_has(X86_FEATURE_LWP) >>> +#define cpu_has_bmi1 boot_cpu_has(X86_FEATURE_BMI1) >>> #define cpu_has_mpx boot_cpu_has(X86_FEATURE_MPX) >>> #define cpu_has_arch_perfmon boot_cpu_has(X86_FEATURE_ARCH_PERFMON) >>> #define cpu_has_rdtscp boot_cpu_has(X86_FEATURE_RDTSCP) >> After trying this out, we clearly need to alter the position on VEX >> prefixes. VEX encoded GPR instructions don't fall within the previous >> assumptions made about the dependences of VEX instructions. > Should I fold this in, or do you want to submit it as a separate > patch? I will submit a separate patch. I don't think it changes any of the currently-dependent content. ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |