From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42082) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c9Oue-00068G-J3 for qemu-devel@nongnu.org; Tue, 22 Nov 2016 23:12:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c9Oub-0000Wj-CB for qemu-devel@nongnu.org; Tue, 22 Nov 2016 23:12:00 -0500 Date: Wed, 23 Nov 2016 15:06:35 +1100 From: David Gibson Message-ID: <20161123040635.GA17795@umbus.fritz.box> References: <1479815165-31059-1-git-send-email-nikunj@linux.vnet.ibm.com> <1479815165-31059-4-git-send-email-nikunj@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="HlL+5n6rz5pIUxbD" Content-Disposition: inline In-Reply-To: <1479815165-31059-4-git-send-email-nikunj@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [PATCH 3/9] target-ppc: Add xscmpexp[dp, qp] instructions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Nikunj A Dadhania Cc: qemu-ppc@nongnu.org, rth@twiddle.net, qemu-devel@nongnu.org, bharata@linux.vnet.ibm.com --HlL+5n6rz5pIUxbD Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Nov 22, 2016 at 05:15:59PM +0530, Nikunj A Dadhania wrote: > From: Bharata B Rao >=20 > xscmpexpdp: VSX Scalar Compare Exponents Double-Precision > xscmpexpqp: VSX Scalar Compare Exponents Quad-Precision >=20 > Signed-off-by: Bharata B Rao > Signed-off-by: Nikunj A Dadhania > --- > target-ppc/fpu_helper.c | 64 +++++++++++++++++++++++++++++++= ++++++ > target-ppc/helper.h | 2 ++ > target-ppc/translate/vsx-impl.inc.c | 2 ++ > target-ppc/translate/vsx-ops.inc.c | 6 ++++ > 4 files changed, 74 insertions(+) >=20 > diff --git a/target-ppc/fpu_helper.c b/target-ppc/fpu_helper.c > index 3027003..b1c5a07 100644 > --- a/target-ppc/fpu_helper.c > +++ b/target-ppc/fpu_helper.c > @@ -2405,6 +2405,70 @@ VSX_SCALAR_CMP_DP(xscmpgedp, le, 1, 1) > VSX_SCALAR_CMP_DP(xscmpgtdp, lt, 1, 1) > VSX_SCALAR_CMP_DP(xscmpnedp, eq, 0, 0) > =20 > +void helper_xscmpexpdp(CPUPPCState *env, uint32_t opcode) > +{ > + ppc_vsr_t xa, xb; > + int64_t exp_a, exp_b; > + uint32_t cc; > + > + getVSR(xA(opcode), &xa, env); > + getVSR(xB(opcode), &xb, env); > + > + exp_a =3D extract64(xa.VsrD(0), 52, 11); > + exp_b =3D extract64(xb.VsrD(0), 52, 11); > + > + if (unlikely(float64_is_any_nan(xa.VsrD(0)) || > + float64_is_any_nan(xb.VsrD(0)))) { > + cc =3D 1; Please use symbolic constants here. > + } else { > + if (exp_a < exp_b) { > + cc =3D 8; > + } else if (exp_a > exp_b) { > + cc =3D 4; > + } else { > + cc =3D 2; > + } > + } > + > + env->fpscr &=3D ~(0x0F << FPSCR_FPRF); > + env->fpscr |=3D cc << FPSCR_FPRF; > + env->crf[BF(opcode)] =3D cc; > + > + helper_float_check_status(env); > +} > + > +void helper_xscmpexpqp(CPUPPCState *env, uint32_t opcode) > +{ > + ppc_vsr_t xa, xb; > + int64_t exp_a, exp_b; > + uint32_t cc; > + > + getVSR(rA(opcode) + 32, &xa, env); > + getVSR(rB(opcode) + 32, &xb, env); > + > + exp_a =3D extract64(xa.VsrD(0), 48, 15); > + exp_b =3D extract64(xb.VsrD(0), 48, 15); > + > + if (unlikely(float128_is_any_nan(make_float128(xa.VsrD(0), xa.VsrD(1= ))) || > + float128_is_any_nan(make_float128(xb.VsrD(0), xb.VsrD(1= ))))) { > + cc =3D 1; > + } else { > + if (exp_a < exp_b) { > + cc =3D 8; > + } else if (exp_a > exp_b) { > + cc =3D 4; > + } else { > + cc =3D 2; > + } > + } > + > + env->fpscr &=3D ~(0x0F << FPSCR_FPRF); > + env->fpscr |=3D cc << FPSCR_FPRF; > + env->crf[BF(opcode)] =3D cc; > + > + helper_float_check_status(env); > +} > + > #define VSX_SCALAR_CMP(op, ordered) = \ > void helper_##op(CPUPPCState *env, uint32_t opcode) = \ > { = \ > diff --git a/target-ppc/helper.h b/target-ppc/helper.h > index da00f0a..ba42015 100644 > --- a/target-ppc/helper.h > +++ b/target-ppc/helper.h > @@ -404,6 +404,8 @@ DEF_HELPER_2(xscmpeqdp, void, env, i32) > DEF_HELPER_2(xscmpgtdp, void, env, i32) > DEF_HELPER_2(xscmpgedp, void, env, i32) > DEF_HELPER_2(xscmpnedp, void, env, i32) > +DEF_HELPER_2(xscmpexpdp, void, env, i32) > +DEF_HELPER_2(xscmpexpqp, void, env, i32) > DEF_HELPER_2(xscmpodp, void, env, i32) > DEF_HELPER_2(xscmpudp, void, env, i32) > DEF_HELPER_2(xsmaxdp, void, env, i32) > diff --git a/target-ppc/translate/vsx-impl.inc.c b/target-ppc/translate/v= sx-impl.inc.c > index 5a27be4..5206258 100644 > --- a/target-ppc/translate/vsx-impl.inc.c > +++ b/target-ppc/translate/vsx-impl.inc.c > @@ -624,6 +624,8 @@ GEN_VSX_HELPER_2(xscmpeqdp, 0x0C, 0x00, 0, PPC2_ISA30= 0) > GEN_VSX_HELPER_2(xscmpgtdp, 0x0C, 0x01, 0, PPC2_ISA300) > GEN_VSX_HELPER_2(xscmpgedp, 0x0C, 0x02, 0, PPC2_ISA300) > GEN_VSX_HELPER_2(xscmpnedp, 0x0C, 0x03, 0, PPC2_ISA300) > +GEN_VSX_HELPER_2(xscmpexpdp, 0x0C, 0x07, 0, PPC2_ISA300) > +GEN_VSX_HELPER_2(xscmpexpqp, 0x04, 0x05, 0, PPC2_ISA300) > GEN_VSX_HELPER_2(xscmpodp, 0x0C, 0x05, 0, PPC2_VSX) > GEN_VSX_HELPER_2(xscmpudp, 0x0C, 0x04, 0, PPC2_VSX) > GEN_VSX_HELPER_2(xsmaxdp, 0x00, 0x14, 0, PPC2_VSX) > diff --git a/target-ppc/translate/vsx-ops.inc.c b/target-ppc/translate/vs= x-ops.inc.c > index 3d91041..2468ee9 100644 > --- a/target-ppc/translate/vsx-ops.inc.c > +++ b/target-ppc/translate/vsx-ops.inc.c > @@ -83,6 +83,10 @@ GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x01, opc3|0x0C= , 0, PPC_NONE, PPC2_VSX),\ > GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x02, opc3|0x0C, 0, PPC_NONE, PPC= 2_VSX),\ > GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x03, opc3|0x0C, 0, PPC_NONE, PPC= 2_VSX) > =20 > +#define GEN_VSX_XFORM_300(name, opc2, opc3, inval) \ > +GEN_HANDLER_E(name, 0x3F, opc2, opc3, inval, PPC_NONE, PPC2_ISA300) > + > + > GEN_XX2FORM(xsabsdp, 0x12, 0x15, PPC2_VSX), > GEN_XX2FORM(xsnabsdp, 0x12, 0x16, PPC2_VSX), > GEN_XX2FORM(xsnegdp, 0x12, 0x17, PPC2_VSX), > @@ -118,6 +122,8 @@ GEN_XX3FORM(xscmpeqdp, 0x0C, 0x00, PPC2_ISA300), > GEN_XX3FORM(xscmpgtdp, 0x0C, 0x01, PPC2_ISA300), > GEN_XX3FORM(xscmpgedp, 0x0C, 0x02, PPC2_ISA300), > GEN_XX3FORM(xscmpnedp, 0x0C, 0x03, PPC2_ISA300), > +GEN_XX3FORM(xscmpexpdp, 0x0C, 0x07, PPC2_ISA300), > +GEN_VSX_XFORM_300(xscmpexpqp, 0x04, 0x05, 0x00600001), > GEN_XX2IFORM(xscmpodp, 0x0C, 0x05, PPC2_VSX), > GEN_XX2IFORM(xscmpudp, 0x0C, 0x04, PPC2_VSX), > GEN_XX3FORM(xsmaxdp, 0x00, 0x14, PPC2_VSX), --=20 David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson --HlL+5n6rz5pIUxbD Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJYNRXKAAoJEGw4ysog2bOS++0P/1QDyJST6H7inNP6WlS+/cfB +vApTVIuE4v8uLstPLnnM6NOYNxfSg8ZRWEgBwkC5hFuyKG005B+w32GIbGfnB6Y lPd/M7iYgXy5uqBM70sDq1T2lpopuKJixkld+t9I09N8mf7Pe/z2qtdVET5IlRjR ggTYSbpuIJ4JZ2xJeSmmNLtfoFtYRr/BCVY+F4KVfl4cZsihgk/UKxpGKe+ELUK5 O6i5ECoJ3vwwe4eY8jo8PPMN1Xmjbgtvnyg4ygQYorGGaxqQr4ypXM2s6ACAflpm QQeGLOZ5EtCxy1JfmQ+gizWEuZL0ezvEeKZSVvH6zlGc91pP760INVtOsBXfZaFY XHCmZw+ViDHtLsjQ5ahLo9mWrQ34fhGzZxKD9B1UEXpXrV7EU5hzGMtwLoj7TFog tT96KYwdPhUF5Ub/WDYnzZTxWl9GRxv+67WzgNypEyUfY+/Xehvy6LabzhVaMfZo 6e8yctHOuMWuw9UjJtezdxxhX2H7pBDdeYDP1gfiddqvrf9HxF9i29U8NZnNHR5r PE+B4WBDyncLzKuDLPd9VJOv+spvkepxdkpvQ16rPkU3OhUHaQU21aaPbi5wnAeS jJKSdcAro7lOxhcmLhO4nrmq9F/383rYoYMHAkjLg4SH5oSvg8oUAI0CyDHEuM19 XrlvkLo5syrnnru8F3/2 =Ruqx -----END PGP SIGNATURE----- --HlL+5n6rz5pIUxbD--