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

Commit 7f0aaee0 authored by Nitin A Kamble's avatar Nitin A Kamble Committed by Avi Kivity
Browse files

KVM: Implement emulation of "pop reg" instruction (opcode 0x58-0x5f)



For use in real mode.

Signed-off-by: default avatarNitin A Kamble <nitin.a.kamble@intel.com>
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
parent 7700270e
Loading
Loading
Loading
Loading
+15 −2
Original line number Original line Diff line number Diff line
@@ -98,8 +98,11 @@ static u8 opcode_table[256] = {
	0, 0, 0, 0,
	0, 0, 0, 0,
	/* 0x40 - 0x4F */
	/* 0x40 - 0x4F */
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	/* 0x50 - 0x5F */
	/* 0x50 - 0x57 */
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0,
	/* 0x58 - 0x5F */
	ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,
	ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,
	/* 0x60 - 0x6F */
	/* 0x60 - 0x6F */
	0, 0, 0, DstReg | SrcMem32 | ModRM | Mov /* movsxd (x86/64) */ ,
	0, 0, 0, DstReg | SrcMem32 | ModRM | Mov /* movsxd (x86/64) */ ,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1153,6 +1156,16 @@ x86_emulate_memop(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
	case 0xf4:              /* hlt */
	case 0xf4:              /* hlt */
		ctxt->vcpu->halt_request = 1;
		ctxt->vcpu->halt_request = 1;
		goto done;
		goto done;
	case 0x58 ... 0x5f: /* pop reg */
		dst.ptr = (unsigned long *)&_regs[b & 0x7];

		if ((rc = ops->read_std(register_address(ctxt->ss_base,
			_regs[VCPU_REGS_RSP]), dst.ptr, op_bytes, ctxt)) != 0)
			goto done;

		register_address_increment(_regs[VCPU_REGS_RSP], dst.bytes);
		dst.orig_val = dst.val; /* Disable writeback. */
		break;
	}
	}
	goto writeback;
	goto writeback;