From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH 6/7] x86emul: use DstEax where possible Date: Thu, 11 Aug 2016 06:06:47 -0600 Message-ID: <57AC867702000078001050DA@prv-mh.provo.novell.com> References: <57AC83530200007800105078@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__PartBE884847.1__=" Return-path: Received: from mail6.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bXol8-0005TV-RV for xen-devel@lists.xenproject.org; Thu, 11 Aug 2016 12:06:50 +0000 In-Reply-To: <57AC83530200007800105078@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__PartBE884847.1__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Content-Disposition: inline While it avoids just a few instructions, we should nevertheless make use of generic code as much as possible. Signed-off-by: Jan Beulich --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -124,7 +124,7 @@ static uint8_t opcode_table[256] =3D { ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps|Mov, ImplicitOps|Mov, ImplicitOps, ImplicitOps, /* 0xA0 - 0xA7 */ - ByteOp|ImplicitOps|Mov, ImplicitOps|Mov, + ByteOp|DstEax|SrcImplicit|Mov, DstEax|SrcImplicit|Mov, ByteOp|ImplicitOps|Mov, ImplicitOps|Mov, ByteOp|ImplicitOps|Mov, ImplicitOps|Mov, ByteOp|ImplicitOps, ImplicitOps, @@ -161,12 +161,12 @@ static uint8_t opcode_table[256] =3D { /* 0xE0 - 0xE7 */ DstImplicit|SrcImmByte, DstImplicit|SrcImmByte, DstImplicit|SrcImmByte, DstImplicit|SrcImmByte, - DstImplicit|SrcImmByte, DstImplicit|SrcImmByte, + DstEax|SrcImmByte, DstEax|SrcImmByte, DstImplicit|SrcImmByte, DstImplicit|SrcImmByte, /* 0xE8 - 0xEF */ DstImplicit|SrcImm|Mov, DstImplicit|SrcImm, ImplicitOps, DstImplicit|SrcImmByte, - ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, + DstEax|SrcImplicit, DstEax|SrcImplicit, ImplicitOps, ImplicitOps, /* 0xF0 - 0xF7 */ 0, ImplicitOps, 0, 0, ImplicitOps, ImplicitOps, @@ -2617,8 +2617,6 @@ x86_emulate( =20 case 0xa0 ... 0xa1: /* mov mem.offs,{%al,%ax,%eax,%rax} */ /* Source EA is not encoded via ModRM. */ - dst.type =3D OP_REG; - dst.reg =3D (unsigned long *)&_regs.eax; dst.bytes =3D (d & ByteOp) ? 1 : op_bytes; if ( (rc =3D read_ulong(ea.mem.seg, insn_fetch_bytes(ad_bytes), &dst.val, dst.bytes, ctxt, ops)) !=3D 0 ) @@ -3520,9 +3518,7 @@ x86_emulate( else { /* in */ - dst.type =3D OP_REG; dst.bytes =3D op_bytes; - dst.reg =3D (unsigned long *)&_regs.eax; fail_if(ops->read_io =3D=3D NULL); rc =3D ops->read_io(port, dst.bytes, &dst.val, ctxt); } --=__PartBE884847.1__= Content-Type: text/plain; name="x86emul-use-DstEax.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="x86emul-use-DstEax.patch" x86emul: use DstEax where possible=0A=0AWhile it avoids just a few = instructions, we should nevertheless make=0Ause of generic code as much as = possible.=0A=0ASigned-off-by: Jan Beulich =0A=0A--- = a/xen/arch/x86/x86_emulate/x86_emulate.c=0A+++ b/xen/arch/x86/x86_emulate/x= 86_emulate.c=0A@@ -124,7 +124,7 @@ static uint8_t opcode_table[256] =3D = {=0A ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,=0A = ImplicitOps|Mov, ImplicitOps|Mov, ImplicitOps, ImplicitOps,=0A /* 0xA0 = - 0xA7 */=0A- ByteOp|ImplicitOps|Mov, ImplicitOps|Mov,=0A+ ByteOp|Dst= Eax|SrcImplicit|Mov, DstEax|SrcImplicit|Mov,=0A ByteOp|ImplicitOps|Mov,= ImplicitOps|Mov,=0A ByteOp|ImplicitOps|Mov, ImplicitOps|Mov,=0A = ByteOp|ImplicitOps, ImplicitOps,=0A@@ -161,12 +161,12 @@ static uint8_t = opcode_table[256] =3D {=0A /* 0xE0 - 0xE7 */=0A DstImplicit|SrcImmB= yte, DstImplicit|SrcImmByte,=0A DstImplicit|SrcImmByte, DstImplicit|Src= ImmByte,=0A- DstImplicit|SrcImmByte, DstImplicit|SrcImmByte,=0A+ = DstEax|SrcImmByte, DstEax|SrcImmByte,=0A DstImplicit|SrcImmByte, = DstImplicit|SrcImmByte,=0A /* 0xE8 - 0xEF */=0A DstImplicit|SrcImm|= Mov, DstImplicit|SrcImm,=0A ImplicitOps, DstImplicit|SrcImmByte,=0A- = ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,=0A+ DstEax|SrcImpli= cit, DstEax|SrcImplicit, ImplicitOps, ImplicitOps,=0A /* 0xF0 - 0xF7 = */=0A 0, ImplicitOps, 0, 0,=0A ImplicitOps, ImplicitOps,=0A@@ = -2617,8 +2617,6 @@ x86_emulate(=0A =0A case 0xa0 ... 0xa1: /* mov = mem.offs,{%al,%ax,%eax,%rax} */=0A /* Source EA is not encoded via = ModRM. */=0A- dst.type =3D OP_REG;=0A- dst.reg =3D = (unsigned long *)&_regs.eax;=0A dst.bytes =3D (d & ByteOp) ? 1 : = op_bytes;=0A if ( (rc =3D read_ulong(ea.mem.seg, insn_fetch_bytes(a= d_bytes),=0A &dst.val, dst.bytes, ctxt, = ops)) !=3D 0 )=0A@@ -3520,9 +3518,7 @@ x86_emulate(=0A else=0A = {=0A /* in */=0A- dst.type =3D OP_REG;=0A = dst.bytes =3D op_bytes;=0A- dst.reg =3D (unsigned long = *)&_regs.eax;=0A fail_if(ops->read_io =3D=3D NULL);=0A = rc =3D ops->read_io(port, dst.bytes, &dst.val, ctxt);=0A }=0A --=__PartBE884847.1__= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg== --=__PartBE884847.1__=--