From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:36696) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q9p7R-0007Dm-OK for qemu-devel@nongnu.org; Tue, 12 Apr 2011 21:43:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q9m7G-0005W7-1T for qemu-devel@nongnu.org; Tue, 12 Apr 2011 18:31:24 -0400 Received: from mail-vw0-f45.google.com ([209.85.212.45]:63821) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q9m7F-0005UN-Sp for qemu-devel@nongnu.org; Tue, 12 Apr 2011 18:31:21 -0400 Received: by vws17 with SMTP id 17so42418vws.4 for ; Tue, 12 Apr 2011 15:31:21 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <20110412213215.GA14070@volta.aurel32.net> References: <1302535928-15901-1-git-send-email-peter.maydell@linaro.org> <20110412213215.GA14070@volta.aurel32.net> Date: Tue, 12 Apr 2011 23:31:20 +0100 Message-ID: From: Peter Maydell Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] target-arm: Don't overflow when calculating value for signed VABAL List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Aurelien Jarno Cc: qemu-devel@nongnu.org, patches@linaro.org On 12 April 2011 22:32, Aurelien Jarno wrote: > On Mon, Apr 11, 2011 at 04:32:08PM +0100, Peter Maydell wrote: >> @@ -1524,12 +1528,12 @@ uint64_t HELPER(neon_abdl_u16)(uint32_t a, uint3= 2_t b) >> =C2=A0{ >> =C2=A0 =C2=A0 =C2=A0uint64_t tmp; >> =C2=A0 =C2=A0 =C2=A0uint64_t result; >> - =C2=A0 =C2=A0DO_ABD(result, a, b, uint8_t); >> - =C2=A0 =C2=A0DO_ABD(tmp, a >> 8, b >> 8, uint8_t); >> + =C2=A0 =C2=A0DO_ABD(result, a, b, uint8_t, uint32_t); >> + =C2=A0 =C2=A0DO_ABD(tmp, a >> 8, b >> 8, uint8_t, uint32_t); >> =C2=A0 =C2=A0 =C2=A0result |=3D tmp << 16; >> - =C2=A0 =C2=A0DO_ABD(tmp, a >> 16, b >> 16, uint8_t); >> + =C2=A0 =C2=A0DO_ABD(tmp, a >> 16, b >> 16, uint8_t, uint32_t); >> =C2=A0 =C2=A0 =C2=A0result |=3D tmp << 32; >> - =C2=A0 =C2=A0DO_ABD(tmp, a >> 24, b >> 24, uint8_t); >> + =C2=A0 =C2=A0DO_ABD(tmp, a >> 24, b >> 24, uint8_t, uint32_t); >> =C2=A0 =C2=A0 =C2=A0result |=3D tmp << 48; >> =C2=A0 =C2=A0 =C2=A0return result; >> =C2=A0} > > Do we really need a 32-bit type for the computation here? No, anything wider than 8 will do, but my guess was that in practice 32 bits would be fractionally more efficient than unnecessarily forcing 16 bit arithmetic. For that matter I guess we could just say "int" and "unsigned int" since C guarantees us at least 16 bits there. -- PMM