From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [Patch 7/7] RealMode: Adds support for mov r, sreg (0x8c) instruction Date: Tue, 27 May 2008 13:14:36 +0300 Message-ID: <483BDF0C.9080000@qumranet.com> References: <20080527084115.2b0cfae1@frecb000711.frec.bull.fr> <20080527101933.68cdc7de@frecb000711.frec.bull.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: "kvm@vger.kernel.org" , Anthony Liguori , Mohammed Gamal , "Kamble, Nitin A" , Marcelo Tosatti , laurent.vivier@bull.net, Alexander Graf To: Guillaume Thouvenin Return-path: Received: from il.qumranet.com ([212.179.150.194]:31997 "EHLO il.qumranet.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756078AbYE0KOi (ORCPT ); Tue, 27 May 2008 06:14:38 -0400 In-Reply-To: <20080527101933.68cdc7de@frecb000711.frec.bull.fr> Sender: kvm-owner@vger.kernel.org List-ID: Guillaume Thouvenin wrote: > Adds support for mov r, sreg (0x8c) instruction > > Signed-off-by: Guillaume Thouvenin > Signed-off-by: Laurent Vivier > > --- > arch/x86/kvm/x86_emulate.c | 21 ++++++++++++++++++++- > 1 files changed, 20 insertions(+), 1 deletions(-) > > diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c > index 106d714..35767e7 100644 > --- a/arch/x86/kvm/x86_emulate.c > +++ b/arch/x86/kvm/x86_emulate.c > @@ -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, > @@ -1531,6 +1531,25 @@ special_insn: > break; > case 0x88 ... 0x8b: /* mov */ > goto mov; > + case 0x8c: { /* mov r/m, sreg */ > + struct kvm_segment segreg; > + > + if (c->modrm_mod == 0x3) > + c->src.val = c->modrm_val; > What's this bit? > + > + if (c->modrm_reg <= 5) > + kvm_get_segment(ctxt->vcpu, &segreg, vcpu_sreg_table[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; > + c->dst.bytes = 2; > + c->dst.ptr = (unsigned long *)decode_register(c->modrm_rm, c->regs, > + c->d & ByteOp); > Aren't dst.bytes and dst.ptr already set by the decoder? -- error compiling committee.c: too many arguments to function