On 13/12/2019 12:54, Jan Beulich wrote:
> AMD and friends explicitly specify that 64-bit operands aren't possible
> for these insns. Nevertheless REX.W isn't fully ignored: It still
> cancels a possible operand size override (0x66). Intel otoh explicitly
> provides for 64-bit operands on the respective insn page of the SDM.
>
> Signed-off-by: Jan Beulich <jbeul...@suse.com>

Reviewed-by: Andrew Cooper <andrew.coop...@citrix.com>

>
> --- a/xen/arch/x86/x86_emulate/x86_emulate.c
> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c
> @@ -2519,9 +2519,16 @@ x86_decode_onebyte(
>          case 6: /* push */
>              if ( mode_64bit() && op_bytes == 4 )
>                  op_bytes = 8;
> -            /* fall through */
> +            state->desc = DstNone | SrcMem | Mov;
> +            break;
> +
>          case 3: /* call (far, absolute indirect) */
>          case 5: /* jmp (far, absolute indirect) */
> +            /* REX.W ignored on a vendor-dependent basis. */
> +            if ( op_bytes == 8 &&
> +                 (ctxt->cpuid->x86_vendor &
> +                  (X86_VENDOR_AMD | X86_VENDOR_HYGON)) )

I'm wondering whether in general we want some amd_like() and
intel_like() predicates.  It is how almost all of the boundaries end up
falling.

~Andrew

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

Reply via email to