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

Commit 38d5bc6d authored by Guillaume Thouvenin's avatar Guillaume Thouvenin Committed by Avi Kivity
Browse files

KVM: x86 emulator: Add support for mov r, sreg (0x8c) instruction



Add support for mov r, sreg (0x8c) instruction

Signed-off-by: default avatarGuillaume Thouvenin <guillaume.thouvenin@ext.bull.net>
Signed-off-by: default avatarLaurent Vivier <laurent.vivier@bull.net>
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
parent 4257198a
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ static u16 opcode_table[256] = {
	/* 0x88 - 0x8F */
	ByteOp | DstMem | SrcReg | ModRM | Mov, DstMem | SrcReg | ModRM | Mov,
	ByteOp | DstReg | SrcMem | ModRM | Mov, DstReg | SrcMem | ModRM | Mov,
	0, ModRM | DstReg,
	DstMem | SrcReg | ModRM | Mov, ModRM | DstReg,
	DstReg | SrcMem | ModRM | Mov, Group | Group1A,
	/* 0x90 - 0x9F */
	0, 0, 0, 0, 0, 0, 0, 0,
@@ -1518,6 +1518,19 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
		break;
	case 0x88 ... 0x8b:	/* mov */
		goto mov;
	case 0x8c: { /* mov r/m, sreg */
		struct kvm_segment segreg;

		if (c->modrm_reg <= 5)
			kvm_get_segment(ctxt->vcpu, &segreg, c->modrm_reg);
		else {
			printk(KERN_INFO "0x8c: Invalid segreg in modrm byte 0x%02x\n",
			       c->modrm);
			goto cannot_emulate;
		}
		c->dst.val = segreg.selector;
		break;
	}
	case 0x8d: /* lea r16/r32, m */
		c->dst.val = c->modrm_ea;
		break;