Skip to content

Commit

Permalink
KVM: x86 emulator: introduce Op3264 for mov cr and mov dr instructions
Browse files Browse the repository at this point in the history
The operands for these instructions are 32 bits or 64 bits, depending on
long mode, and ignoring REX prefixes, or the operand size prefix.

Signed-off-by: Avi Kivity <avi@redhat.com>
  • Loading branch information
Avi Kivity committed Oct 24, 2010
1 parent 1e87e3e commit 7f9b4b7
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions arch/x86/kvm/emulate.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@
#define Group (1<<14) /* Bits 3:5 of modrm byte extend opcode */
#define GroupDual (1<<15) /* Alternate decoding of mod == 3 */
/* Misc flags */
#define Op3264 (1<<24) /* Operand is 64b in long mode, 32b otherwise */
#define Undefined (1<<25) /* No Such Instruction */
#define Lock (1<<26) /* lock prefix is allowed for the instruction */
#define Priv (1<<27) /* instruction generates #GP if current CPL != 0 */
Expand Down Expand Up @@ -2406,6 +2407,13 @@ x86_decode_insn(struct x86_emulate_ctxt *ctxt)
if (mode == X86EMUL_MODE_PROT64 && (c->d & Stack))
c->op_bytes = 8;

if (c->d & Op3264) {
if (mode == X86EMUL_MODE_PROT64)
c->op_bytes = 8;
else
c->op_bytes = 4;
}

/* ModRM and SIB bytes. */
if (c->d & ModRM) {
rc = decode_modrm(ctxt, ops);
Expand Down

0 comments on commit 7f9b4b7

Please sign in to comment.