linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: mita@miraclelinux.com (Akinobu Mita)
To: Gabriel Paubert <paubert@iram.es>
Cc: linux-kernel@vger.kernel.org, linux-mips@linux-mips.org,
	linux-ia64@vger.kernel.org, Ian Molton <spyro@f2s.com>,
	David Howells <dhowells@redhat.com>,
	linuxppc-dev@ozlabs.org, Greg Ungerer <gerg@uclinux.org>,
	sparclinux@vger.kernel.org,
	Miles Bader <uclinux-v850@lsi.nec.co.jp>,
	Linus Torvalds <torvalds@osdl.org>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	Hirokazu Takata <takata@linux-m32r.org>,
	linuxsh-shmedia-dev@lists.sourceforge.net,
	linux-m68k@vger.kernel.org,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Richard Henderson <rth@twiddle.net>,
	Chris Zankel <chris@zankel.net>,
	dev-etrax@axis.com, ultralinux@vger.kernel.org,
	Andi Kleen <ak@suse.de>,
	linuxsh-dev@lists.sourceforge.net, linux390@de.ibm.com,
	Russell King <rmk@arm.linux.org.uk>,
	parisc-linux@parisc-linux.org,
	Balbir Singh <bsingharora@gmail.com>,
	linux@horizon.com
Subject: Re: [patch 14/44] generic hweight{64,32,16,8}()
Date: Mon, 6 Feb 2006 20:52:57 +0900	[thread overview]
Message-ID: <20060206115257.GB11836@miraclelinux.com> (raw)
In-Reply-To: <20060202012637.GA25093@iram.es>

On Thu, Feb 02, 2006 at 02:26:38AM +0100, Gabriel Paubert wrote:
> 
> The first step can be implemented slightly better:
> 
> unsigned int res = w-((w>>1)&0x55555555);
> 

Yes. I've got many advices about hweight speedup.


static unsigned int hweight32(unsigned int w)
{
        unsigned int res = w - ((w >> 1) & 0x55555555);
        res = (res & 0x33333333) + ((res >> 2) & 0x33333333);
        res = (res + (res >> 4)) & 0x0F0F0F0F;
        res = res + (res >> 8);
        return (res + (res >> 16)) & 0x000000FF;
}

static unsigned int hweight16(unsigned int w)
{
        unsigned int res = w - ((w >> 1) & 0x5555);
        res = (res & 0x3333) + ((res >> 2) & 0x3333);
        res = (res + (res >> 4)) & 0x0F0F;
        return (res + (res >> 8)) & 0x00FF;
}

static unsigned int hweight8(unsigned int w)
{
        unsigned int res = w - ((w >> 1) & 0x55);
        res = (res & 0x33) + ((res >> 2) & 0x33);
        return (res + (res >> 4)) & 0x0F;
}

static unsigned long hweight64(__u64 w)
{
#if BITS_PER_LONG < 64
	return hweight32((unsigned int)(w >> 32)) +
				hweight32((unsigned int)w);
#else
	__u64 res = w - ((w >> 1) & 0x5555555555555555ul);
	res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul);
	res = (res + (res >> 4)) & 0x0F0F0F0F0F0F0F0Ful;
	res = res + (res >> 8);
	res = res + (res >> 16);
	return (res + (res >> 32)) & 0x00000000000000FFul;
#endif
}

  reply	other threads:[~2006-02-06 11:53 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-02-01  9:02 [patch 00/44] generic bitops Akinobu Mita
2006-02-01  9:02 ` [patch 01/44] ia64: use cpu_set() instead of __set_bit() Akinobu Mita
2006-02-01  9:02 ` [patch 02/44] parisc: add ()-pair in __ffz() macro Akinobu Mita
2006-02-01  9:02 ` [patch 03/44] cris: remove unnecessary local_irq_restore() Akinobu Mita
2006-02-01  9:02 ` [patch 04/44] use non atomic operations for minix_*_bit() and ext2_*_bit() Akinobu Mita
2006-02-01  9:02 ` [patch 05/44] generic {,test_and_}{set,clear,change}_bit() Akinobu Mita
2006-02-03  9:55   ` Martin Waitz
2006-02-06 23:07     ` Russell King
2006-02-01  9:02 ` [patch 06/44] generic __{,test_and_}{set,clear,change}_bit() and test_bit() Akinobu Mita
2006-02-01  9:02 ` [patch 07/44] generic __ffs() Akinobu Mita
2006-02-01  9:02 ` [patch 08/44] generic ffz() Akinobu Mita
2006-02-01  9:02 ` [patch 09/44] generic fls() Akinobu Mita
2006-02-01  9:02 ` [patch 10/44] generic fls64() Akinobu Mita
2006-02-01  9:02 ` [patch 11/44] generic find_{next,first}{,_zero}_bit() Akinobu Mita
2006-02-01  9:02 ` [patch 12/44] generic sched_find_first_bit() Akinobu Mita
2006-02-03  3:58   ` [parisc-linux] " Grant Grundler
2006-02-01  9:02 ` [patch 13/44] generic ffs() Akinobu Mita
2006-02-01  9:02 ` [patch 14/44] generic hweight{64,32,16,8}() Akinobu Mita
2006-02-01  9:06   ` Andi Kleen
2006-02-01  9:26     ` Michael Tokarev
2006-02-01 10:24       ` Andi Kleen
2006-02-02 12:50         ` Akinobu Mita
2006-02-09  5:55           ` [PATCH] alpha: remove __alpha_cix__ and __alpha_fix__ Akinobu Mita
2006-02-09 19:12             ` Richard Henderson
2006-02-10  5:40               ` Akinobu Mita
2006-02-02  1:26   ` [patch 14/44] generic hweight{64,32,16,8}() Gabriel Paubert
2006-02-06 11:52     ` Akinobu Mita [this message]
2006-02-03  8:31   ` Ulrich Eckhardt
2006-02-01  9:02 ` [patch 15/44] generic ext2_{set,clear,test,find_first_zero,find_next_zero}_bit() Akinobu Mita
2006-02-01 11:27   ` Roman Zippel
2006-02-06 11:47     ` Akinobu Mita
2006-02-08 10:41     ` Akinobu Mita
2006-02-01  9:02 ` [patch 16/44] generic ext2_{set,clear}_bit_atomic() Akinobu Mita
2006-02-01  9:02 ` [patch 17/44] generic minix_{test,set,test_and_clear,test,find_first_zero}_bit() Akinobu Mita
2006-02-01  9:02 ` [patch 18/44] alpha: use generic bitops Akinobu Mita
2006-02-01  9:02 ` [patch 19/44] arm: " Akinobu Mita
2006-02-01  9:02 ` [patch 20/44] arm26: " Akinobu Mita
2006-02-01  9:02 ` [patch 21/44] cris: " Akinobu Mita
2006-02-01  9:02 ` [patch 22/44] frv: " Akinobu Mita
2006-02-01  9:02 ` [patch 23/44] h8300: " Akinobu Mita
2006-02-01  9:02 ` [patch 24/44] i386: " Akinobu Mita
2006-02-01  9:02 ` [patch 25/44] ia64: " Akinobu Mita
2006-02-01  9:02 ` [patch 26/44] m32r: " Akinobu Mita
2006-02-01  9:02 ` [patch 27/44] m68k: " Akinobu Mita
2006-02-01  9:02 ` [patch 28/44] m68knommu: " Akinobu Mita
2006-02-01  9:02 ` [patch 29/44] mips: " Akinobu Mita
2006-02-01  9:02 ` [patch 30/44] parisc: " Akinobu Mita
2006-02-01  9:02 ` [patch 31/44] powerpc: " Akinobu Mita
2006-02-01  9:02 ` [patch 32/44] s390: " Akinobu Mita
2006-02-01  9:02 ` [patch 33/44] sh: " Akinobu Mita
2006-02-01  9:02 ` [patch 34/44] sh64: " Akinobu Mita
2006-02-01  9:02 ` [patch 35/44] sparc: " Akinobu Mita
2006-02-01  9:03 ` [patch 36/44] sparc64: " Akinobu Mita
2006-02-01  9:03 ` [patch 37/44] v850: " Akinobu Mita
2006-02-01  9:03 ` [patch 38/44] x86_64: " Akinobu Mita
2006-02-01  9:03 ` [patch 39/44] xtensa: " Akinobu Mita
2006-02-01  9:03 ` [patch 40/44] update include/asm-generic/bitops.h Akinobu Mita
2006-02-01  9:03 ` [patch 41/44] make thread_info.flags an unsigned long Akinobu Mita
2006-02-01  9:03 ` [patch 42/44] ia64: make partial_page.bitmap " Akinobu Mita
2006-02-01  9:03 ` [patch 43/44] ntfs: remove generic_ffs() Akinobu Mita
2006-02-01  9:03 ` [patch 44/44] remove unused generic bitops in include/linux/bitops.h Akinobu Mita
2006-02-06 10:26 ` [patch 11/44] generic find_{next,first}{,_zero}_bit() David Howells
2006-02-07  2:02   ` Akinobu Mita

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060206115257.GB11836@miraclelinux.com \
    --to=mita@miraclelinux.com \
    --cc=ak@suse.de \
    --cc=bsingharora@gmail.com \
    --cc=chris@zankel.net \
    --cc=dev-etrax@axis.com \
    --cc=dhowells@redhat.com \
    --cc=gerg@uclinux.org \
    --cc=ink@jurassic.park.msu.ru \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=linux390@de.ibm.com \
    --cc=linux@horizon.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=linuxsh-dev@lists.sourceforge.net \
    --cc=linuxsh-shmedia-dev@lists.sourceforge.net \
    --cc=parisc-linux@parisc-linux.org \
    --cc=paubert@iram.es \
    --cc=rmk@arm.linux.org.uk \
    --cc=rth@twiddle.net \
    --cc=sparclinux@vger.kernel.org \
    --cc=spyro@f2s.com \
    --cc=takata@linux-m32r.org \
    --cc=torvalds@osdl.org \
    --cc=uclinux-v850@lsi.nec.co.jp \
    --cc=ultralinux@vger.kernel.org \
    --cc=ysato@users.sourceforge.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).