[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4 05/17] x86emul: support MMX/SSE{, 2, 4a} insns with only register operands



On 28/02/17 12:52, Jan Beulich wrote:
> @@ -2505,12 +2506,21 @@ x86_decode(
>  
>                  opcode |= b | MASK_INSR(vex.pfx, X86EMUL_OPC_PFX_MASK);
>  
> +                if ( !(d & ModRM) )
> +                {
> +                    modrm_reg = modrm_rm = modrm_mod = modrm = 0;
> +                    break;
> +                }
> +
>                  modrm = insn_fetch_type(uint8_t);
>                  modrm_mod = (modrm & 0xc0) >> 6;
>  
>                  break;
>              }
> +    }
>  
> +    if ( d & ModRM )
> +    {
>          modrm_reg = ((rex_prefix & 4) << 1) | ((modrm & 0x38) >> 3);
>          modrm_rm  = modrm & 0x07;
>  

Doesn't this hunk want splitting out into its own patch and
backporting?  Xen 4.8's x86_decode_insn() was supposedly able to provide
the correct length.

If so, both patches Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

> @@ -5658,6 +5668,18 @@ x86_emulate(
>      CASE_SIMD_PACKED_FP(_VEX, 0x0f, 0x50): /* vmovmskp{s,d} {x,y}mm,reg */
>      CASE_SIMD_PACKED_INT(0x0f, 0xd7):      /* pmovmskb {,x}mm,reg */
>      case X86EMUL_OPC_VEX_66(0x0f, 0xd7):   /* vpmovmskb {x,y}mm,reg */
> +        opc = init_prefixes(stub);
> +        opc[0] = b;
> +        /* Convert GPR destination to %rAX. */
> +        rex_prefix &= ~REX_R;
> +        vex.r = 1;
> +        if ( !mode_64bit() )
> +            vex.w = 0;
> +        opc[1] = modrm & 0xc7;

As an observation, converting GPR to %rAX is also becoming a common
sequence.

~Andrew

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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.