From f59459bf4bb3017ab2e52de13b5cc57bed83f603 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Tue, 27 Nov 2007 19:14:21 +0200 Subject: [PATCH] --- yaml --- r: 80795 b: refs/heads/master c: 111de5d60c589bca02b49dce076ca588618e0d1c h: refs/heads/master i: 80793: a3f4194ff4a16b82ef28414dc5857f7183cd552b 80791: 05fb60f881c92a53b6e276f6511f7f57bdf26762 v: v3 --- [refs] | 2 +- trunk/drivers/kvm/x86_emulate.c | 50 +++++++++++++++------------------ 2 files changed, 24 insertions(+), 28 deletions(-) diff --git a/[refs] b/[refs] index fde85460d725..b3b70e80d767 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b9fa9d6bc6ac617170c4cf21ca764eb187618c0d +refs/heads/master: 111de5d60c589bca02b49dce076ca588618e0d1c diff --git a/trunk/drivers/kvm/x86_emulate.c b/trunk/drivers/kvm/x86_emulate.c index 53377f0b202e..499d1ad42bc4 100644 --- a/trunk/drivers/kvm/x86_emulate.c +++ b/trunk/drivers/kvm/x86_emulate.c @@ -1541,31 +1541,6 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) case 0x9d: /* popf */ c->dst.ptr = (unsigned long *) &ctxt->eflags; goto pop_instruction; - case 0xc3: /* ret */ - c->dst.ptr = &c->eip; - goto pop_instruction; - case 0xf4: /* hlt */ - ctxt->vcpu->halt_request = 1; - goto done; - case 0xf5: /* cmc */ - /* complement carry flag from eflags reg */ - ctxt->eflags ^= EFLG_CF; - c->dst.type = OP_NONE; /* Disable writeback. */ - break; - case 0xf8: /* clc */ - ctxt->eflags &= ~EFLG_CF; - c->dst.type = OP_NONE; /* Disable writeback. */ - break; - case 0xfa: /* cli */ - ctxt->eflags &= ~X86_EFLAGS_IF; - c->dst.type = OP_NONE; /* Disable writeback. */ - break; - case 0xfb: /* sti */ - ctxt->eflags |= X86_EFLAGS_IF; - c->dst.type = OP_NONE; /* Disable writeback. */ - break; - } - switch (c->b) { case 0xa4 ... 0xa5: /* movs */ c->dst.type = OP_MEM; c->dst.bytes = (c->d & ByteOp) ? 1 : c->op_bytes; @@ -1652,6 +1627,9 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) case 0xae ... 0xaf: /* scas */ DPRINTF("Urk! I don't handle SCAS.\n"); goto cannot_emulate; + case 0xc3: /* ret */ + c->dst.ptr = &c->eip; + goto pop_instruction; case 0xe8: /* call (near) */ { long int rel; switch (c->op_bytes) { @@ -1676,8 +1654,26 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) JMP_REL(c->src.val); c->dst.type = OP_NONE; /* Disable writeback. */ break; - - + case 0xf4: /* hlt */ + ctxt->vcpu->halt_request = 1; + goto done; + case 0xf5: /* cmc */ + /* complement carry flag from eflags reg */ + ctxt->eflags ^= EFLG_CF; + c->dst.type = OP_NONE; /* Disable writeback. */ + break; + case 0xf8: /* clc */ + ctxt->eflags &= ~EFLG_CF; + c->dst.type = OP_NONE; /* Disable writeback. */ + break; + case 0xfa: /* cli */ + ctxt->eflags &= ~X86_EFLAGS_IF; + c->dst.type = OP_NONE; /* Disable writeback. */ + break; + case 0xfb: /* sti */ + ctxt->eflags |= X86_EFLAGS_IF; + c->dst.type = OP_NONE; /* Disable writeback. */ + break; } goto writeback;