KVM: x86 emulator: unify two switches
authorAvi Kivity <avi@qumranet.com>
Tue, 27 Nov 2007 17:14:21 +0000 (19:14 +0200)
committerAvi Kivity <avi@qumranet.com>
Wed, 30 Jan 2008 15:53:16 +0000 (17:53 +0200)
The rep prefix cleanup left two switch () statements next to each other.
Unify them.

Signed-off-by: Avi Kivity <avi@qumranet.com>
drivers/kvm/x86_emulate.c

index 53377f0b202e540f5318588291cf14f36f31ddad..499d1ad42bc4952a89aa8586079c7c71ea5af817 100644 (file)
@@ -1541,31 +1541,6 @@ special_insn:
        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 @@ special_insn:
        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 @@ special_insn:
                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;