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

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

KVM: x86 emulator: Use opcode::execute for RET(C3)

parent e4f973ae
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -1816,6 +1816,16 @@ static int em_grp9(struct x86_emulate_ctxt *ctxt)
	return X86EMUL_CONTINUE;
}

static int em_ret(struct x86_emulate_ctxt *ctxt)
{
	struct decode_cache *c = &ctxt->decode;

	c->dst.type = OP_REG;
	c->dst.addr.reg = &c->eip;
	c->dst.bytes = c->op_bytes;
	return em_pop(ctxt);
}

static int em_ret_far(struct x86_emulate_ctxt *ctxt)
{
	struct decode_cache *c = &ctxt->decode;
@@ -3188,7 +3198,7 @@ static struct opcode opcode_table[256] = {
	/* 0xC0 - 0xC7 */
	D2bv(DstMem | SrcImmByte | ModRM),
	I(ImplicitOps | Stack | SrcImmU16, em_ret_near_imm),
	D(ImplicitOps | Stack),
	I(ImplicitOps | Stack, em_ret),
	D(DstReg | SrcMemFAddr | ModRM | No64), D(DstReg | SrcMemFAddr | ModRM | No64),
	G(ByteOp, group11), G(0, group11),
	/* 0xC8 - 0xCF */
@@ -3943,12 +3953,6 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
	case 0xc0 ... 0xc1:
		rc = em_grp2(ctxt);
		break;
	case 0xc3: /* ret */
		c->dst.type = OP_REG;
		c->dst.addr.reg = &c->eip;
		c->dst.bytes = c->op_bytes;
		rc = em_pop(ctxt);
		break;
	case 0xc4:		/* les */
		rc = emulate_load_segment(ctxt, VCPU_SREG_ES);
		break;