From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39795) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bZWFZ-00072A-LK for qemu-devel@nongnu.org; Tue, 16 Aug 2016 00:45:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bZWFU-0005Z1-63 for qemu-devel@nongnu.org; Tue, 16 Aug 2016 00:45:16 -0400 Date: Tue, 16 Aug 2016 14:33:46 +1000 From: David Gibson Message-ID: <20160816043346.GH14530@voom.fritz.box> References: <1470901008-3284-1-git-send-email-raji@linux.vnet.ibm.com> <1470901008-3284-5-git-send-email-raji@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="2oox5VnwalALFvA7" Content-Disposition: inline In-Reply-To: <1470901008-3284-5-git-send-email-raji@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [PATCH v3 4/5] target-ppc: add vector bit permute doubleword instruction List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Rajalakshmi Srinivasaraghavan Cc: qemu-ppc@nongnu.org, rth@twiddle.net, qemu-devel@nongnu.org, nikunj@linux.vnet.ibm.com, benh@kernel.crashing.org --2oox5VnwalALFvA7 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Aug 11, 2016 at 01:06:47PM +0530, Rajalakshmi Srinivasaraghavan wro= te: > Add vbpermd instruction from ISA 3.0. >=20 > Signed-off-by: Rajalakshmi Srinivasaraghavan > --- > target-ppc/helper.h | 1 + > target-ppc/int_helper.c | 22 ++++++++++++++++++++++ > target-ppc/translate/vmx-impl.c | 1 + > target-ppc/translate/vmx-ops.c | 1 + > 4 files changed, 25 insertions(+), 0 deletions(-) >=20 > diff --git a/target-ppc/helper.h b/target-ppc/helper.h > index 6e6e7b3..d1d9418 100644 > --- a/target-ppc/helper.h > +++ b/target-ppc/helper.h > @@ -335,6 +335,7 @@ DEF_HELPER_2(vpopcntb, void, avr, avr) > DEF_HELPER_2(vpopcnth, void, avr, avr) > DEF_HELPER_2(vpopcntw, void, avr, avr) > DEF_HELPER_2(vpopcntd, void, avr, avr) > +DEF_HELPER_3(vbpermd, void, avr, avr, avr) > DEF_HELPER_3(vbpermq, void, avr, avr, avr) > DEF_HELPER_2(vgbbd, void, avr, avr) > DEF_HELPER_3(vpmsumb, void, avr, avr, avr) > diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c > index 162f1e9..6bed3b6 100644 > --- a/target-ppc/int_helper.c > +++ b/target-ppc/int_helper.c > @@ -1134,6 +1134,28 @@ void helper_vperm(CPUPPCState *env, ppc_avr_t *r, = ppc_avr_t *a, ppc_avr_t *b, > #define VBPERMQ_DW(index) (((index) & 0x40) =3D=3D 0) > #endif > =20 > +void helper_vbpermd(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) > +{ > + int i, j; > + uint64_t perm =3D 0; > + ppc_avr_t result; > + > + VECTOR_FOR_INORDER_I(i, u64) { > + perm =3D 0; Since you already have a temporary for the whole result vector, you shouldn't need a temporary for the individual result dwords. > + for (j =3D 0; j < 8; j++) { > + int index =3D VBPERMQ_INDEX(b, (i * 8) + j); > + if (index < 64) { > + uint64_t mask =3D (1ull << (63 - (index & 0x3F))); > + if (a->u64[VBPERMQ_DW(index)] & mask) { > + perm |=3D (0x80 >> j); > + } It would probably be nice to avoid the conditional branch probably created by this innermost if, which should be possible given you can extract the actual value of the bit you're inserting. > + } > + } > + result.u64[i] =3D perm; > + } > + *r =3D result; > +} > + > void helper_vbpermq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) > { > int i; > diff --git a/target-ppc/translate/vmx-impl.c b/target-ppc/translate/vmx-i= mpl.c > index ebf123f..38f8ad7 100644 > --- a/target-ppc/translate/vmx-impl.c > +++ b/target-ppc/translate/vmx-impl.c > @@ -776,6 +776,7 @@ GEN_VXFORM_DUAL(vclzw, PPC_NONE, PPC2_ALTIVEC_207, \ > vpopcntw, PPC_NONE, PPC2_ALTIVEC_207) > GEN_VXFORM_DUAL(vclzd, PPC_NONE, PPC2_ALTIVEC_207, \ > vpopcntd, PPC_NONE, PPC2_ALTIVEC_207) > +GEN_VXFORM(vbpermd, 6, 23); > GEN_VXFORM(vbpermq, 6, 21); > GEN_VXFORM_NOA(vgbbd, 6, 20); > GEN_VXFORM(vpmsumb, 4, 16) > diff --git a/target-ppc/translate/vmx-ops.c b/target-ppc/translate/vmx-op= s.c > index 5b2826e..32bd533 100644 > --- a/target-ppc/translate/vmx-ops.c > +++ b/target-ppc/translate/vmx-ops.c > @@ -261,6 +261,7 @@ GEN_VXFORM_DUAL(vclzh, vpopcnth, 1, 29, PPC_NONE, PPC= 2_ALTIVEC_207), > GEN_VXFORM_DUAL(vclzw, vpopcntw, 1, 30, PPC_NONE, PPC2_ALTIVEC_207), > GEN_VXFORM_DUAL(vclzd, vpopcntd, 1, 31, PPC_NONE, PPC2_ALTIVEC_207), > =20 > +GEN_VXFORM_300(vbpermd, 6, 23), > GEN_VXFORM_207(vbpermq, 6, 21), > GEN_VXFORM_207(vgbbd, 6, 20), > GEN_VXFORM_207(vpmsumb, 4, 16), --=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 --2oox5VnwalALFvA7 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJXspeqAAoJEGw4ysog2bOSE9YQAKpao/Qs6lKErTGzGNDVqwIq qHLwEkVK65897gH4tboTGCLCBNPgfbGdNWp/AQwiwxp4DfzJnNe3SSwJvgV6r1pd RaR2iwT85uP8eUsuaeW8Kr6zsKx9n5wUEFhWxeWF4CDdOI33bX2wkne30NH3eP3o NzJvhtknuAv5SgIfi+5kzRsDenKMPWUSWweeM18ozNA8SqJReM0cLCMNpuaqLetN pRw30399X8roReEtIPi81GD5UNe5xVugztOX30Lsa9q8IjP28I3mHeWdkyIruNEs B/TxFYMK9m4loUs0+KDrOosSlO29UYLf2+2Nv1e30YVAFFtAT+J+DJg8eQEIevB9 Jq5BA/EkuVXjOoQGsHsl9CInELXQ1euzxIVU/6ha16BfQwoETTyrXCsfi22HTUT/ ncjHuNHY7k8e+P7mzG/ZlZu/bFUay0sTPLaA6aO0D3jtMh3oDg8Pcx6TF4jCMuWe kxJ8nkZOGTqp4n0nWmCPfsiIgJEhTowNCWNtKccB8Wo53BmQv1+w9LeEFy+PWoaf oozn29BGTZphn70PucY4fxv25eq/r+gpvJ9vZ/XaSw+6dU+k192kE4Dlg4jc85d7 dxh2Xox3y6IqvKlUJR1CCHFy6UWgqXPVA97jOH4RPirwLNZBTN2F9girqFU7gjr5 mH+tbvNR8r9WqX1igXgj =Kcii -----END PGP SIGNATURE----- --2oox5VnwalALFvA7--