>>> On 15.02.17 at 12:09, <jbeul...@suse.com> wrote:
> @@ -5462,6 +5462,54 @@ x86_emulate(
>          state->simd_size = simd_none;
>          break;
>  
> +    CASE_SIMD_PACKED_FP(, 0x0f, 0x2e):     /* ucomis{s,d} xmm/mem,xmm */
> +    CASE_SIMD_PACKED_FP(_VEX, 0x0f, 0x2e): /* vucomis{s,d} xmm/mem,xmm */
> +    CASE_SIMD_PACKED_FP(, 0x0f, 0x2f):     /* comis{s,d} xmm/mem,xmm */
> +    CASE_SIMD_PACKED_FP(_VEX, 0x0f, 0x2f): /* vcomis{s,d} xmm/mem,xmm */
> +        if ( vex.opcx == vex_none )
> +        {
> +            if ( vex.pfx )
> +                vcpu_must_have(sse2);
> +            else
> +                vcpu_must_have(sse);
> +            get_fpu(X86EMUL_FPU_xmm, &fic);
> +        }
> +        else
> +        {
> +            host_and_vcpu_must_have(avx);
> +            get_fpu(X86EMUL_FPU_ymm, &fic);
> +        }
> +
> +        opc = init_prefixes(stub);
> +        opc[0] = b;
> +        opc[1] = modrm;
> +        if ( ea.type == OP_MEM )
> +        {
> +            rc = ops->read(ea.mem.seg, ea.mem.off, mmvalp, vex.pfx ? 8 : 4,
> +                           ctxt);
> +            if ( rc != X86EMUL_OKAY )
> +                goto done;
> +
> +            /* Convert memory operand to (%rAX). */
> +            rex_prefix &= ~REX_B;
> +            vex.b = 1;
> +            opc[1] &= 0x38;
> +        }
> +        fic.insn_bytes = PFX_BYTES + 2;
> +        opc[2] = 0xc3;
> +
> +        invoke_stub(_PRE_EFLAGS("[eflags]", "[mask]", "[tmp]"),

copy_REX_VEX() missing here.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

Reply via email to