summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlexander van Heukelum <heukelum@mailshack.com>2008-03-09 21:01:04 +0100
committerIngo Molnar <mingo@elte.hu>2008-04-23 09:01:17 +0200
commit3572dc32afe379bbcc927fe1ac6640b44aa9cbbc (patch)
tree460183f3f2139e2af8b247e874750329341a7005 /lib
parent4eb73ec20230535f1ef63bd7d787e132f62a48b3 (diff)
x86: change x86 to use generic find_next_bit
x86: Change x86 to use the generic find_next_bit implementation The versions with inline assembly are in fact slower on the machines I tested them on (in userspace) (Athlon XP 2800+, p4-like Xeon 2.8GHz, AMD Opteron 270). The i386-version needed a fix similar to 06024f21 to avoid crashing the benchmark. Benchmark using: gcc -fomit-frame-pointer -Os. For each bitmap size 1...512, for each possible bitmap with one bit set, for each possible offset: find the position of the first bit starting at offset. If you follow ;). Times include setup of the bitmap and checking of the results. Athlon Xeon Opteron 32/64bit x86-specific: 0m3.692s 0m2.820s 0m3.196s / 0m2.480s generic: 0m2.622s 0m1.662s 0m2.100s / 0m1.572s If the bitmap size is not a multiple of BITS_PER_LONG, and no set (cleared) bit is found, find_next_bit (find_next_zero_bit) returns a value outside of the range [0, size]. The generic version always returns exactly size. The generic version also uses unsigned long everywhere, while the x86 versions use a mishmash of int, unsigned (int), long and unsigned long. Using the generic version does give a slightly bigger kernel, though. defconfig: text data bss dec hex filename x86-specific: 4738555 481232 626688 5846475 5935cb vmlinux (32 bit) generic: 4738621 481232 626688 5846541 59360d vmlinux (32 bit) x86-specific: 5392395 846568 724424 6963387 6a40bb vmlinux (64 bit) generic: 5392458 846568 724424 6963450 6a40fa vmlinux (64 bit) arch/x86/Kconfig | 3 + arch/x86/lib/Makefile | 2 - arch/x86/lib/bitops_32.c | 70 -------------------------------------------- arch/x86/lib/bitops_64.c | 68 ------------------------------------------ include/asm-x86/bitops.h | 6 +++ include/asm-x86/bitops_32.h | 16 ---------- include/asm-x86/bitops_64.h | 2 - lib/find_next_bit.c | 2 + 8 files changed, 12 insertions(+), 157 deletions(-) Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'lib')
-rw-r--r--lib/find_next_bit.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/find_next_bit.c b/lib/find_next_bit.c
index 78ccd73a8841..5820e072b890 100644
--- a/lib/find_next_bit.c
+++ b/lib/find_next_bit.c
@@ -15,6 +15,8 @@
#include <asm/byteorder.h>
#define BITOP_WORD(nr) ((nr) / BITS_PER_LONG)
+#undef find_next_bit
+#undef find_next_zero_bit
/**
* find_next_bit - find the next set bit in a memory region