qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [5592] target-ppc: optimize popcntb


From: Laurent Desnogues
Subject: Re: [Qemu-devel] [5592] target-ppc: optimize popcntb
Date: Sat, 1 Nov 2008 13:29:06 +0100

On Sat, Nov 1, 2008 at 1:54 AM, Aurelien Jarno <address@hidden> 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]