KVM: x86 emulator: Disable writeback for CMP emulation
authorTakuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Tue, 12 Apr 2011 15:24:55 +0000 (00:24 +0900)
committerAvi Kivity <avi@redhat.com>
Wed, 11 May 2011 11:57:08 +0000 (07:57 -0400)
This stops "CMP r/m, reg" to write back the data into memory.
Pointed out by Avi.

The writeback suppression now covers CMP, CMPS, SCAS.

Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/emulate.c

index 2ec69bc85846bfd68e480e1ea4426c7f3b7e85d4..1e0e3f8156f87327a0b3c1b3905d4010fa389109 100644 (file)
@@ -3671,6 +3671,7 @@ special_insn:
                break;
        case 0x38 ... 0x3d:
              cmp:              /* cmp */
+               c->dst.type = OP_NONE; /* Disable writeback. */
                emulate_2op_SrcV("cmp", c->src, c->dst, ctxt->eflags);
                break;
        case 0x40 ... 0x47: /* inc r16/r32 */
@@ -3797,7 +3798,6 @@ special_insn:
                rc = emulate_popf(ctxt, ops, &c->dst.val, c->op_bytes);
                break;
        case 0xa6 ... 0xa7:     /* cmps */
-               c->dst.type = OP_NONE; /* Disable writeback. */
                goto cmp;
        case 0xa8 ... 0xa9:     /* test ax, imm */
                goto test;