From 275a7ea404b6834dbfc6b5458be496a4c5b7a602 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Sun, 1 Aug 2010 14:46:54 +0300 Subject: [PATCH] --- yaml --- r: 215667 b: refs/heads/master c: 7f9b4b75be866de938a3094413a60554f7e66e4d h: refs/heads/master i: 215665: cc3daaf1856c5c07e293c3494b80a10c54f5f357 215663: f653f36bceeec598c83783031b343ecee0dfa75a v: v3 --- [refs] | 2 +- trunk/arch/x86/kvm/emulate.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0df81bdbf96d..e6182ab0d0e2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1e87e3efe764285133866a14ddc71cf211f022c2 +refs/heads/master: 7f9b4b75be866de938a3094413a60554f7e66e4d diff --git a/trunk/arch/x86/kvm/emulate.c b/trunk/arch/x86/kvm/emulate.c index a832019138f3..b7adfcc2f74f 100644 --- a/trunk/arch/x86/kvm/emulate.c +++ b/trunk/arch/x86/kvm/emulate.c @@ -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 */ @@ -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);