From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55251) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bEofa-0006zo-G2 for qemu-devel@nongnu.org; Sun, 19 Jun 2016 22:10:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bEofV-0003sS-HK for qemu-devel@nongnu.org; Sun, 19 Jun 2016 22:10:33 -0400 Date: Mon, 20 Jun 2016 12:12:07 +1000 From: David Gibson Message-ID: <20160620021207.GD6858@voom.fritz.box> References: <1466227166-28168-1-git-send-email-rth@twiddle.net> <20160619033435.56e161e0@kryten> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="Q0rSlbzrZN6k9QnT" Content-Disposition: inline In-Reply-To: <20160619033435.56e161e0@kryten> Subject: Re: [Qemu-devel] [PATCH v2] target-ppc: Fix rlwimi, rlwinm, rlwnm List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anton Blanchard Cc: Richard Henderson , qemu-devel@nongnu.org, qemu-ppc@nongnu.org --Q0rSlbzrZN6k9QnT Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sun, Jun 19, 2016 at 03:34:35AM +1000, Anton Blanchard wrote: > Hi rth, >=20 > > In 63ae0915f8ec, I arranged to use a 32-bit rotate, without > > considering the effect of a mask value that wraps around to > > the high bits of the word. >=20 > Thanks, that passes my tests. >=20 > Tested-by: Anton Blanchard Unfortunately the earlier buggy version already got pulled upstream. I've folded this new version with a revert of the earlier one and merged to ppc-for-2.7. >=20 > Anton >=20 > > Signed-off-by: Richard Henderson > > --- > > target-ppc/translate.c | 73 > > +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 51 > > insertions(+), 22 deletions(-) > >=20 > > diff --git a/target-ppc/translate.c b/target-ppc/translate.c > > index b689475..23bc054 100644 > > --- a/target-ppc/translate.c > > +++ b/target-ppc/translate.c > > @@ -1636,7 +1636,6 @@ static void gen_rlwimi(DisasContext *ctx) > > tcg_gen_deposit_tl(t_ra, t_ra, t_rs, sh, me - mb + 1); > > } else { > > target_ulong mask; > > - TCGv_i32 t0; > > TCGv t1; > > =20 > > #if defined(TARGET_PPC64) > > @@ -1645,12 +1644,21 @@ static void gen_rlwimi(DisasContext *ctx) > > #endif > > mask =3D MASK(mb, me); > > =20 > > - t0 =3D tcg_temp_new_i32(); > > t1 =3D tcg_temp_new(); > > - tcg_gen_trunc_tl_i32(t0, t_rs); > > - tcg_gen_rotli_i32(t0, t0, sh); > > - tcg_gen_extu_i32_tl(t1, t0); > > - tcg_temp_free_i32(t0); > > + if (mask <=3D 0xffffffffu) { > > + TCGv_i32 t0 =3D tcg_temp_new_i32(); > > + tcg_gen_trunc_tl_i32(t0, t_rs); > > + tcg_gen_rotli_i32(t0, t0, sh); > > + tcg_gen_extu_i32_tl(t1, t0); > > + tcg_temp_free_i32(t0); > > + } else { > > +#if defined(TARGET_PPC64) > > + tcg_gen_deposit_i64(t1, t_rs, t_rs, 32, 32); > > + tcg_gen_rotli_i64(t1, t1, sh); > > +#else > > + g_assert_not_reached(); > > +#endif > > + } > > =20 > > tcg_gen_andi_tl(t1, t1, mask); > > tcg_gen_andi_tl(t_ra, t_ra, ~mask); > > @@ -1678,20 +1686,28 @@ static void gen_rlwinm(DisasContext *ctx) > > tcg_gen_ext32u_tl(t_ra, t_rs); > > tcg_gen_shri_tl(t_ra, t_ra, mb); > > } else { > > + target_ulong mask; > > #if defined(TARGET_PPC64) > > mb +=3D 32; > > me +=3D 32; > > #endif > > - if (sh =3D=3D 0) { > > - tcg_gen_andi_tl(t_ra, t_rs, MASK(mb, me)); > > - } else { > > - TCGv_i32 t0 =3D tcg_temp_new_i32(); > > + mask =3D MASK(mb, me); > > =20 > > + if (mask <=3D 0xffffffffu) { > > + TCGv_i32 t0 =3D tcg_temp_new_i32(); > > tcg_gen_trunc_tl_i32(t0, t_rs); > > tcg_gen_rotli_i32(t0, t0, sh); > > - tcg_gen_andi_i32(t0, t0, MASK(mb, me)); > > + tcg_gen_andi_i32(t0, t0, mask); > > tcg_gen_extu_i32_tl(t_ra, t0); > > tcg_temp_free_i32(t0); > > + } else { > > +#if defined(TARGET_PPC64) > > + tcg_gen_deposit_i64(t_ra, t_rs, t_rs, 32, 32); > > + tcg_gen_rotli_i64(t_ra, t_ra, sh); > > + tcg_gen_andi_i64(t_ra, t_ra, mask); > > +#else > > + g_assert_not_reached(); > > +#endif > > } > > } > > if (unlikely(Rc(ctx->opcode) !=3D 0)) { > > @@ -1707,24 +1723,37 @@ static void gen_rlwnm(DisasContext *ctx) > > TCGv t_rb =3D cpu_gpr[rB(ctx->opcode)]; > > uint32_t mb =3D MB(ctx->opcode); > > uint32_t me =3D ME(ctx->opcode); > > - TCGv_i32 t0, t1; > > + target_ulong mask; > > =20 > > #if defined(TARGET_PPC64) > > mb +=3D 32; > > me +=3D 32; > > #endif > > + mask =3D MASK(mb, me); > > =20 > > - t0 =3D tcg_temp_new_i32(); > > - t1 =3D tcg_temp_new_i32(); > > - tcg_gen_trunc_tl_i32(t0, t_rb); > > - tcg_gen_trunc_tl_i32(t1, t_rs); > > - tcg_gen_andi_i32(t0, t0, 0x1f); > > - tcg_gen_rotl_i32(t1, t1, t0); > > - tcg_temp_free_i32(t0); > > + if (mask <=3D 0xffffffffu) { > > + TCGv_i32 t0 =3D tcg_temp_new_i32(); > > + TCGv_i32 t1 =3D tcg_temp_new_i32(); > > + tcg_gen_trunc_tl_i32(t0, t_rb); > > + tcg_gen_trunc_tl_i32(t1, t_rs); > > + tcg_gen_andi_i32(t0, t0, 0x1f); > > + tcg_gen_rotl_i32(t1, t1, t0); > > + tcg_gen_extu_i32_tl(t_ra, t1); > > + tcg_temp_free_i32(t0); > > + tcg_temp_free_i32(t1); > > + } else { > > +#if defined(TARGET_PPC64) > > + TCGv_i64 t0 =3D tcg_temp_new_i64(); > > + tcg_gen_andi_i64(t0, t_rb, 0x1f); > > + tcg_gen_deposit_i64(t_ra, t_rs, t_rs, 32, 32); > > + tcg_gen_rotl_i64(t_ra, t_ra, t0); > > + tcg_temp_free_i64(t0); > > +#else > > + g_assert_not_reached(); > > +#endif > > + } > > =20 > > - tcg_gen_andi_i32(t1, t1, MASK(mb, me)); > > - tcg_gen_extu_i32_tl(t_ra, t1); > > - tcg_temp_free_i32(t1); > > + tcg_gen_andi_tl(t_ra, t_ra, mask); > > =20 > > if (unlikely(Rc(ctx->opcode) !=3D 0)) { > > gen_set_Rc0(ctx, t_ra); >=20 --=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 --Q0rSlbzrZN6k9QnT Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJXZ1D3AAoJEGw4ysog2bOSN2EP/3XIK9hm+IofNZFAb2tFUhHg Lxw+mqp+sJtOFODdx3pTNBrW3w3bMb3CuiLYsGCOlv7VyC1nmAB5GZ7XoMJqnWAF y1tqtkuI8zINVia6XpoPzHvBpWcHl3w+zQSR88XOrNBswNPWLxRHYelC1M2ue4Rp 2ov0tE/qQe6CcXrshWCsU3IQpxU8uGiq1HFovdr8rRnrigttnT3HRt+n3X2SbMuC BSaEODl40UUza8JhYjnxV2DnIwSHB2m9X8CGVxw84NsnuLOjvxJSS7neGth030lF wLzwN+wOaWurAroTrZzDwxTNNP20JIOAlkNfTKTm6Qa6XKY5Etrt+8YPsUNN4zXy r8KbUETiigFYn/a5w5jyS8naS+GmIYBjwqEQzVJvKh0j9mi67YlnRSpselvquPXY jqwUet0t326f/bbRdNq4odBwiBDwZPNpIlJoQjVhEZbGKg8S+lTRNyZsuxJIi/oa A1PADof6X8BNihlqG1Fut6F10Am2psQWPTtLjv7kxgfYFxl3k1n/fDIT5tt3kLg+ Tqm8tKDA98kapwT8FiQTdrJ5KgUuiui99ucDC+YDMfx+l+jsz5t4nPgeDifx0nFQ GONcUQv1dFfdXmG+iKxVXqtDYuJ9/tUq4kv0AT+BJHtvimtV07Ab3lo2+yoz7nXa 4LBrLU9MYLKaUPsnah50 =iknb -----END PGP SIGNATURE----- --Q0rSlbzrZN6k9QnT--