Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c5df76b authored by Takuya Yoshikawa's avatar Takuya Yoshikawa Committed by Avi Kivity
Browse files

KVM: x86 emulator: Clean up INT n/INTO/INT 3(CC/CD/CE)



Call emulate_int() directly to avoid spaghetti goto's.

Signed-off-by: default avatarTakuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
parent 1bd5f469
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -3769,7 +3769,6 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
	struct decode_cache *c = &ctxt->decode;
	int rc = X86EMUL_CONTINUE;
	int saved_dst_type = c->dst.type;
	int irq; /* Used for int 3, int, and into */

	c->mem_read.pos = 0;

@@ -3963,18 +3962,14 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
		rc = emulate_load_segment(ctxt, VCPU_SREG_DS);
		break;
	case 0xcc:		/* int3 */
		irq = 3;
		goto do_interrupt;
		rc = emulate_int(ctxt, 3);
		break;
	case 0xcd:		/* int n */
		irq = c->src.val;
	do_interrupt:
		rc = emulate_int(ctxt, irq);
		rc = emulate_int(ctxt, c->src.val);
		break;
	case 0xce:		/* into */
		if (ctxt->eflags & EFLG_OF) {
			irq = 4;
			goto do_interrupt;
		}
		if (ctxt->eflags & EFLG_OF)
			rc = emulate_int(ctxt, 4);
		break;
	case 0xd0 ... 0xd1:	/* Grp2 */
		rc = em_grp2(ctxt);