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

Re: [Xen-devel] [PATCH 4/4] x86emul: use DstEax also for XCHG



On 15/08/16 09:35, Jan Beulich wrote:
> Just like said in commit c0bc0adf24 ("x86emul: use DstEax where
> possible"): While it avoids just a few instructions, we should
> nevertheless make use of generic code as much as possible. Here we can
> arrange for that by simply swapping source and destination (as they're
> interchangeable).
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>
> --- a/xen/arch/x86/x86_emulate/x86_emulate.c
> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c
> @@ -118,8 +118,10 @@ static uint8_t opcode_table[256] = {
>      DstMem|SrcReg|ModRM|Mov, DstReg|SrcNone|ModRM,
>      DstReg|SrcMem16|ModRM|Mov, DstMem|SrcNone|ModRM|Mov,
>      /* 0x90 - 0x97 */
> -    ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,
> -    ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,
> +    DstEax|SrcImplicit, DstEax|SrcImplicit,
> +    DstEax|SrcImplicit, DstEax|SrcImplicit,
> +    DstEax|SrcImplicit, DstEax|SrcImplicit,
> +    DstEax|SrcImplicit, DstEax|SrcImplicit,

Please add a comment explaining that DstEax is interchangeable with
SrcEax in the xchg case.  Otherwise, the decode table reads incorrectly.

>      /* 0x98 - 0x9F */
>      ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,
>      ImplicitOps|Mov, ImplicitOps|Mov, ImplicitOps, ImplicitOps,
> @@ -2491,16 +2493,14 @@ x86_emulate(
>  
>      case 0x90: /* nop / xchg %%r8,%%rax */
>          if ( !(rex_prefix & 1) )
> -            break; /* nop */
> +            goto no_writeback; /* nop */

Could you add an explicit /* fallthrough */ here?  The only reason it
isn't currently a coverity defect is because of the /* nop */ comment.

With these two, Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

>  
>      case 0x91 ... 0x97: /* xchg reg,%%rax */
> -        src.type = dst.type = OP_REG;
> -        src.bytes = dst.bytes = op_bytes;
> -        src.reg  = (unsigned long *)&_regs.eax;
> -        src.val  = *src.reg;
> -        dst.reg  = decode_register(
> +        src.type = OP_REG;
> +        src.bytes = op_bytes;
> +        src.reg  = decode_register(
>              (b & 7) | ((rex_prefix & 1) << 3), &_regs, 0);
> -        dst.val  = *dst.reg;
> +        src.val  = *src.reg;
>          goto xchg;
>  
>      case 0x98: /* cbw/cwde/cdqe */
>
>
>


_______________________________________________
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®.