From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:53415) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QPScp-0000zQ-Kg for qemu-devel@nongnu.org; Thu, 26 May 2011 00:56:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QPSco-0007Su-Qh for qemu-devel@nongnu.org; Thu, 26 May 2011 00:56:47 -0400 Received: from moutng.kundenserver.de ([212.227.17.9]:62311) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QPSco-0007Sm-Ia for qemu-devel@nongnu.org; Thu, 26 May 2011 00:56:46 -0400 Message-ID: <4DDDDD8B.5000606@mail.berlios.de> Date: Thu, 26 May 2011 06:56:43 +0200 From: Stefan Weil MIME-Version: 1.0 References: <1306355129-23447-1-git-send-email-weil@mail.berlios.de> <1306355129-23447-2-git-send-email-weil@mail.berlios.de> <8D06C368-886D-4457-B598-0ACE5E2AC3EF@suse.de> <4DDDD7C8.70701@mail.berlios.de> In-Reply-To: <4DDDD7C8.70701@mail.berlios.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH 01/12] target-s390x: Fix wrong argument in call of tcg_gen_shl_i64() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Graf Cc: QEMU Developers Am 26.05.2011 06:32, schrieb Stefan Weil: > Am 26.05.2011 00:15, schrieb Alexander Graf: >> On 25.05.2011, at 22:25, Stefan Weil wrote: >> >>> tcg_gen_shl_i64 needs an argument of type TCGv_i64. >>> Using tmp4 needs some additional changes. >>> >>> Signed-off-by: Stefan Weil >>> --- >>> target-s390x/translate.c | 8 +++++--- >>> 1 files changed, 5 insertions(+), 3 deletions(-) >>> >>> diff --git a/target-s390x/translate.c b/target-s390x/translate.c >>> index 8e71df3..3614516 100644 >>> --- a/target-s390x/translate.c >>> +++ b/target-s390x/translate.c >>> @@ -2056,7 +2056,6 @@ do_mh: >>> even for very long ones... */ >>> tmp = get_address(s, 0, b2, d2); >>> tmp3 = tcg_const_i64(stm_len); >>> - tmp4 = tcg_const_i64(32); >>> for (i = r1;; i = (i + 1) % 16) { >>> switch (op) { >>> case 0x4: >>> @@ -2070,7 +2069,9 @@ do_mh: >>> #else >>> tmp2 = tcg_temp_new_i64(); >>> tcg_gen_qemu_ld32u(tmp2, tmp, get_mem_index(s)); >>> - tcg_gen_shl_i64(tmp2, tmp2, 4); >>> + tmp4 = tcg_const_i64(4); >>> + tcg_gen_shl_i64(tmp2, tmp2, tmp4); >>> + tcg_temp_free_i64(tmp4); >>> tcg_gen_ext32u_i64(regs[i], regs[i]); >>> tcg_gen_or_i64(regs[i], regs[i], tmp2); >>> #endif >>> @@ -2081,7 +2082,9 @@ do_mh: >>> break; >>> case 0x26: >>> tmp2 = tcg_temp_new_i64(); >>> + tmp4 = tcg_const_i64(32); >> This moves the const inside the loop, which is exactly what I was >> trying to avoid here. The problem is that every new const generated >> here issues 1 additional tcg op, which really sums up when there's >> too many of them. I've had the buffer exceed here plenty of times. >> >> Alex > > I noticed that, too. But adding a tmp5 and generating two const > outside the loop > of whom only one or even none is used is also a bad solution. > > What about moving the loop inside the switch statement (one loop for > every case)? > This does not look nice but looks like the best solution here. > > If you prefer a different solution, just omit this part of my patch > series. > > Grüße, Stefan Would it be possible to use tcg_gen_shli_64 / tcg_gen_shri_64 and remove tmp4 completely? Stefan