KVM: x86 emulator: add setcc instruction emulation
authorWei Yongjun <yjwei@cn.fujitsu.com>
Fri, 6 Aug 2010 09:10:07 +0000 (17:10 +0800)
committerAvi Kivity <avi@redhat.com>
Sun, 24 Oct 2010 08:51:08 +0000 (10:51 +0200)
Add setcc instruction emulation (opcode 0x0f 0x90~0x9f)

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

index 0c08bffe6cb49c612301107465bd7c7d83d252bb..df349f376da876e9bee371230b1daadb057205c2 100644 (file)
@@ -2362,7 +2362,7 @@ static struct opcode twobyte_table[256] = {
        /* 0x80 - 0x8F */
        X16(D(SrcImm)),
        /* 0x90 - 0x9F */
-       N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N,
+       X16(D(ByteOp | DstMem | SrcNone | ModRM| Mov)),
        /* 0xA0 - 0xA7 */
        D(ImplicitOps | Stack), D(ImplicitOps | Stack),
        N, D(DstMem | SrcReg | ModRM | BitOp),
@@ -3424,6 +3424,9 @@ twobyte_insn:
                if (test_cc(c->b, ctxt->eflags))
                        jmp_rel(c, c->src.val);
                break;
+       case 0x90 ... 0x9f:     /* setcc r/m8 */
+               c->dst.val = test_cc(c->b, ctxt->eflags);
+               break;
        case 0xa0:        /* push fs */
                emulate_push_sreg(ctxt, ops, VCPU_SREG_FS);
                break;