From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KwFbK-0004CU-EE for qemu-devel@nongnu.org; Sat, 01 Nov 2008 08:29:10 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KwFbI-0004CI-Ca for qemu-devel@nongnu.org; Sat, 01 Nov 2008 08:29:09 -0400 Received: from [199.232.76.173] (port=55512 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KwFbI-0004CF-7K for qemu-devel@nongnu.org; Sat, 01 Nov 2008 08:29:08 -0400 Received: from wf-out-1314.google.com ([209.85.200.169]:3160) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KwFbH-0005Gu-TB for qemu-devel@nongnu.org; Sat, 01 Nov 2008 08:29:08 -0400 Received: by wf-out-1314.google.com with SMTP id 27so1676180wfd.4 for ; Sat, 01 Nov 2008 05:29:07 -0700 (PDT) Message-ID: <761ea48b0811010529w50904850h41028a811609fefc@mail.gmail.com> Date: Sat, 1 Nov 2008 13:29:06 +0100 From: "Laurent Desnogues" Subject: Re: [Qemu-devel] [5592] target-ppc: optimize popcntb In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org On Sat, Nov 1, 2008 at 1:54 AM, Aurelien Jarno wrote: > Revision: 5592 > http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5592 [...] > Modified: trunk/target-ppc/op_helper.c > =================================================================== > --- trunk/target-ppc/op_helper.c 2008-11-01 00:54:23 UTC (rev 5591) > +++ trunk/target-ppc/op_helper.c 2008-11-01 00:54:33 UTC (rev 5592) > @@ -222,25 +222,19 @@ > > target_ulong helper_popcntb (target_ulong val) > { > - uint32_t ret; > - int i; > - > - ret = 0; > - for (i = 0; i < 32; i += 8) > - ret |= ctpop8((val >> i) & 0xFF) << i; > - return ret; > + val = (val & 0x55555555) + ((val >> 1) & 0x55555555); > + val = (val & 0x33333333) + ((val >> 2) & 0x33333333); > + val = (val & 0x0f0f0f0f) + ((val >> 4) & 0x0f0f0f0f); > + return val; > } > > #if defined(TARGET_PPC64) > target_ulong helper_popcntb_64 (target_ulong val) > { > - uint64_t ret; > - int i; > - > - ret = 0; > - for (i = 0; i < 64; i += 8) > - ret |= ctpop8((val >> i) & 0xFF) << i; > - return ret; > + val = (val & 0x5555555555555555ULL) + ((val >> 1) & 0x5555555555555555ULL); > + val = (val & 0x3333333333333333ULL) + ((val >> 2) & 0x3333333333333333ULL); > + val = (val & 0x0f0f0f0f0f0f0f0fULL) + ((val >> 4) & 0x0f0f0f0f0f0f0f0fULL); > + return val; > } > #endif Wouldn't it make sense to use builtin's as is done in host-utils.h? Laurent