Commit 08cd3657 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

[PATCH] x86_64: Optimize bitmap_weight for small bitmaps

Use inline code bitmaps <= BITS_PER_LONG in bitmap_weight. This
gives _much_ better code.
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 5282aab8
...@@ -24,6 +24,9 @@ ...@@ -24,6 +24,9 @@
* The available bitmap operations and their rough meaning in the * The available bitmap operations and their rough meaning in the
* case that the bitmap is a single unsigned long are thus: * case that the bitmap is a single unsigned long are thus:
* *
* Note that nbits should be always a compile time evaluable constant.
* Otherwise many inlines will generate horrible code.
*
* bitmap_zero(dst, nbits) *dst = 0UL * bitmap_zero(dst, nbits) *dst = 0UL
* bitmap_fill(dst, nbits) *dst = ~0UL * bitmap_fill(dst, nbits) *dst = ~0UL
* bitmap_copy(dst, src, nbits) *dst = *src * bitmap_copy(dst, src, nbits) *dst = *src
...@@ -244,6 +247,8 @@ static inline int bitmap_full(const unsigned long *src, int nbits) ...@@ -244,6 +247,8 @@ static inline int bitmap_full(const unsigned long *src, int nbits)
static inline int bitmap_weight(const unsigned long *src, int nbits) static inline int bitmap_weight(const unsigned long *src, int nbits)
{ {
if (nbits <= BITS_PER_LONG)
return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits));
return __bitmap_weight(src, nbits); return __bitmap_weight(src, nbits);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment