linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rutger Nijlunsing <rutger@nospam.com>
To: Balbir Singh <bsingharora@gmail.com>
Cc: Akinobu Mita <mita@miraclelinux.com>,
	Grant Grundler <iod00d@hp.com>,
	Linux Kernel Development <linux-kernel@vger.kernel.org>,
	linux-ia64@vger.kernel.org
Subject: Re: [PATCH 8/12] generic hweight{32,16,8}()
Date: Thu, 26 Jan 2006 11:04:25 +0100	[thread overview]
Message-ID: <20060126100425.GA12345@nospam.com> (raw)
In-Reply-To: <661de9470601252312m1f9c9256peb79451e49fc8662@mail.gmail.com>

[snip]
> >  /*
> >   * hweightN: returns the hamming weight (i.e. the number
> >   * of bits set) of a N-bit word
> >   */
> >
> > -#define hweight32(x) generic_hweight32(x)
> > -#define hweight16(x) generic_hweight16(x)
> > -#define hweight8(x) generic_hweight8(x)
> > +static inline unsigned int hweight32(unsigned int w)
> > +{
> > +        unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555);
> > +        res = (res & 0x33333333) + ((res >> 2) & 0x33333333);
> > +        res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F);
> > +        res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF);
> > +        return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF);
> > +}
> > +
> 
> This can be replaced with
> 
>   register int res=w;
>   res=res-((res>>1)&0x55555555);
>   res=(res&0x33333333)+((res>>2)&0x33333333);
>   res=(res+(res>>4))&0x0f0f0f0f;
>   res=res+(res>>8);
>   return (res+(res>>16)) & 0xff;
> 
> Similar optimizations can be applied to the routines below. Please see
> http://www-cs-faculty.stanford.edu/~knuth/mmixware.html errata and the code
> in mmix-arith.w for the complete set of optimizations and credits.
> 
> http://www.jjj.de/fxt/fxtbook.pdf is another inspirational source for
> such algorithms.

Ah, the joys of bit twiddling!

http://graphics.stanford.edu/~seander/bithacks.html
...has some more.

-- 
Rutger Nijlunsing ---------------------------------- eludias ed dse.nl
never attribute to a conspiracy which can be explained by incompetence
----------------------------------------------------------------------

  reply	other threads:[~2006-01-26 10:04 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-25 11:26 [PATCH 0/6] RFC: use include/asm-generic/bitops.h Akinobu Mita
2006-01-25 11:28 ` [PATCH 1/6] {set,clear,test}_bit() related cleanup Akinobu Mita
2006-01-25 11:46   ` Andi Kleen
2006-01-26 16:14   ` Pavel Machek
2006-01-26 16:47     ` Russell King
2006-01-26 19:14     ` Paul Jackson
2006-01-25 11:30 ` [PATCH 2/6] use non atomic operations for minix_*_bit() and ext2_*_bit() Akinobu Mita
2006-01-25 11:32 ` [PATCH 3/6] C-language equivalents of include/asm-*/bitops.h Akinobu Mita
2006-01-25 11:54   ` Keith Owens
2006-01-26  2:13     ` Akinobu Mita
2006-01-26  2:19       ` Akinobu Mita
2006-01-25 20:02   ` Russell King
2006-01-25 20:59     ` Grant Grundler
2006-01-26  3:27       ` Akinobu Mita
2006-01-26  3:29         ` [PATCH 1/12] generic *_bit() Akinobu Mita
2006-02-01 15:11           ` Chen, Kenneth W
2006-02-01 18:02             ` Christoph Hellwig
2006-02-01 18:07               ` Chen, Kenneth W
2006-02-01 19:19                 ` Russell King
2006-02-01 19:25                   ` Chen, Kenneth W
2006-02-01 19:35                     ` Russell King
2006-02-03 10:24                   ` Geert Uytterhoeven
2006-02-03 10:27                     ` Russell King
2006-02-01 19:39                 ` Grant Grundler
2006-02-01 21:41                   ` Chen, Kenneth W
2006-02-01 22:09                     ` Grant Grundler
2006-02-01 22:49                       ` Anton Altaparmakov
2006-02-02  0:08                         ` Grant Grundler
2006-02-02  8:52                           ` Anton Altaparmakov
2006-02-02 10:13                             ` Andreas Schwab
2006-02-02 22:43                 ` Paul Mackerras
2006-01-26  3:30         ` [PATCH 2/12] generic __ffs() Akinobu Mita
2006-01-26  3:31         ` [PATCH 3/12] generic ffz() Akinobu Mita
2006-01-26  8:21           ` Michael Tokarev
2006-01-27  6:39             ` [PATCH] parisc: add ()-pair in __ffs() Akinobu Mita
2006-01-26  3:32         ` [PATCH 4/12] generic fls() and fls64() Akinobu Mita
2006-01-26  3:33         ` [PATCH 5/12] generic find_{next,first}{,_zero}_bit() Akinobu Mita
2006-01-26  3:34         ` [PATCH 6/12] generic sched_find_first_bit() Akinobu Mita
2006-01-26  3:35         ` [PATCH 7/12] generic ffs() Akinobu Mita
2006-01-26  3:36         ` [PATCH 8/12] generic hweight{32,16,8}() Akinobu Mita
2006-01-26  7:12           ` Balbir Singh
2006-01-26 10:04             ` Rutger Nijlunsing [this message]
2006-01-27  4:55             ` Akinobu Mita
2006-01-27  5:40               ` Balbir Singh
2006-01-27  6:40                 ` Akinobu Mita
2006-01-31 11:14                   ` Balbir Singh
2006-01-26 18:57           ` Bryan O'Sullivan
2006-01-27  4:43             ` Akinobu Mita
2006-01-27  5:23               ` Bryan O'Sullivan
2006-01-26  3:36         ` [PATCH 9/12] generic hweight64() Akinobu Mita
2006-01-26  7:05           ` Balbir Singh
2006-01-26  3:38         ` [PATCH 10/12] generic ext2_{set,clear,test,find_first_zero,find_next_zero}_bit() Akinobu Mita
2006-01-26  3:38         ` [PATCH 11/12] generic ext2_{set,clear}_bit_atomic() Akinobu Mita
2006-01-26  3:39         ` [PATCH 12/12] generic minix_{test,set,test_and_clear,test,find_first_zero}_bit() Akinobu Mita
2006-01-25 23:25     ` [PATCH 3/6] C-language equivalents of include/asm-*/bitops.h Ian Molton
2006-01-26  0:06     ` Richard Henderson
2006-01-26  4:34       ` Edgar Toernig
2006-01-26 17:30         ` Richard Henderson
2006-01-26  8:55       ` Russell King
2006-01-26 16:18         ` [parisc-linux] " Grant Grundler
2006-01-26 16:30           ` Nicolas Pitre
2006-01-26 16:40           ` Russell King
2006-01-26 23:04             ` Grant Grundler
2006-01-26 23:03               ` Russell King
2006-01-29  7:12                 ` Stuart Brady
2006-01-30  4:03                   ` David S. Miller
2006-01-30 17:06                   ` Ralf Baechle
2006-01-30 19:50                     ` Stuart Brady
2006-01-30 23:02                       ` David S. Miller
2006-01-27  0:28               ` [parisc-linux] Re: [PATCH 3/6] C-language equivalents of John David Anglin
2006-01-27 12:51   ` [PATCH 3/6] C-language equivalents of include/asm-*/bitops.h Hirokazu Takata
2006-01-30  3:29     ` Akinobu Mita
2006-01-25 11:34 ` [PATCH 5/6] fix warning on test_ti_thread_flag() Akinobu Mita
2006-01-25 12:28   ` Geert Uytterhoeven
2006-01-25 22:28   ` Paul Mackerras
2006-01-26  0:04     ` David S. Miller
2006-01-25 11:35 ` [PATCH 6/6] remove unused generic bitops in include/linux/bitops.h Akinobu Mita
     [not found] ` <20060125113336.GE18584@miraclelinux.com>
2006-01-26  1:49   ` [PATCH 4/6] use include/asm-generic/bitops for each architecture Akinobu Mita
2006-01-26  2:37     ` Grant Grundler
2006-01-27 13:04     ` Hirokazu Takata
2006-01-30  3:15       ` Akinobu Mita
2006-01-31 16:49 [PATCH 8/12] generic hweight{32,16,8}() linux
2006-01-31 18:14 ` Grant Grundler
2006-02-02  9:34 ` Balbir Singh

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=20060126100425.GA12345@nospam.com \
    --to=rutger@nospam.com \
    --cc=bsingharora@gmail.com \
    --cc=iod00d@hp.com \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@tux.tmfweb.nl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mita@miraclelinux.com \
    /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).