x86emul: introduce SrcEax for XCHG

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 introducing SrcEax (which requires no other
code adjustments).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Jan Beulich committed 2016-08-17 15:34:26 +02:00
1 parent 3fbb6f0a31
commit c826567bbc
1 file changed
+8 -6
+8 -6
View File
@@ -34,6 +34,7 @@
#define SrcNone (0<<3) /* No source operand. */
#define SrcImplicit (0<<3) /* Source operand is implicit in the opcode. */
#define SrcReg (1<<3) /* Register operand. */
#define SrcEax SrcReg /* Register EAX (aka SrcReg with no ModRM) */
#define SrcMem (2<<3) /* Memory operand. */
#define SrcMem16 (3<<3) /* Memory operand (16-bit). */
#define SrcImm (4<<3) /* Immediate operand. */
@@ -118,8 +119,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,
DstImplicit|SrcEax, DstImplicit|SrcEax,
DstImplicit|SrcEax, DstImplicit|SrcEax,
DstImplicit|SrcEax, DstImplicit|SrcEax,
DstImplicit|SrcEax, DstImplicit|SrcEax,
/* 0x98 - 0x9F */
ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,
ImplicitOps|Mov, ImplicitOps|Mov, ImplicitOps, ImplicitOps,
@@ -2501,12 +2504,11 @@ x86_emulate(
case 0x90: /* nop / xchg %%r8,%%rax */
if ( !(rex_prefix & 1) )
break; /* nop */
/* fall through */
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.type = OP_REG;
dst.bytes = op_bytes;
dst.reg = decode_register(
(b & 7) | ((rex_prefix & 1) << 3), &_regs, 0);
dst.val = *dst.reg;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.