KVM: x86 emulator: fix group3 instruction decoding
authorWei Yongjun <yjwei@cn.fujitsu.com>
Thu, 17 Jun 2010 09:33:55 +0000 (17:33 +0800)
committerAvi Kivity <avi@redhat.com>
Sun, 1 Aug 2010 07:46:55 +0000 (10:46 +0300)
Group 3 instruction with ModRM reg field as 001 is
defined as test instruction under AMD arch, and
emulate_grp3() is ready for emulate it, so fix the
decoding.

static inline int emulate_grp3(...)
{
...
switch (c->modrm_reg) {
case 0 ... 1:   /* test */
emulate_2op_SrcV("test", c->src, c->dst, ctxt->eflags);
...
}

Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/emulate.c

index c990db0a3a02e90f618d400ac115b5ad878ccf82..abb8cec420a2cf5b70d0569f1ccd26d093e14d16 100644 (file)
@@ -336,11 +336,11 @@ static u32 group_table[] = {
        [Group1A*8] =
        DstMem | SrcNone | ModRM | Mov | Stack, 0, 0, 0, 0, 0, 0, 0,
        [Group3_Byte*8] =
-       ByteOp | SrcImm | DstMem | ModRM, 0,
+       ByteOp | SrcImm | DstMem | ModRM, ByteOp | SrcImm | DstMem | ModRM,
        ByteOp | DstMem | SrcNone | ModRM, ByteOp | DstMem | SrcNone | ModRM,
        0, 0, 0, 0,
        [Group3*8] =
-       DstMem | SrcImm | ModRM, 0,
+       DstMem | SrcImm | ModRM, DstMem | SrcImm | ModRM,
        DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM,
        0, 0, 0, 0,
        [Group4*8] =