[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] bitops: provide an inline implementation of find_fi
From: |
Aurelien Jarno |
Subject: |
[Qemu-devel] [PATCH] bitops: provide an inline implementation of find_first_bit |
Date: |
Sun, 22 Dec 2013 12:32:37 +0100 |
find_first_bit has started to be used heavily in TCG code. The current
implementation based on find_next_bit is not optimal and can't be
optimized be the compiler if the bit array has a fixed size, which is
the case most of the time.
This new implementation does not use find_next_bit and is yet small
enough to be inlined.
Cc: Richard Henderson <address@hidden>
Cc: Corentin Chary <address@hidden>
Signed-off-by: Aurelien Jarno <address@hidden>
---
include/qemu/bitops.h | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/include/qemu/bitops.h b/include/qemu/bitops.h
index 304c90c..041142a 100644
--- a/include/qemu/bitops.h
+++ b/include/qemu/bitops.h
@@ -157,7 +157,17 @@ unsigned long find_next_zero_bit(const unsigned long *addr,
static inline unsigned long find_first_bit(const unsigned long *addr,
unsigned long size)
{
- return find_next_bit(addr, size, 0);
+ unsigned long result, tmp;
+
+ for (result = 0; result < size; result += BITS_PER_LONG) {
+ tmp = *addr++;
+ if (tmp) {
+ result += ctzl(tmp);
+ return result < size ? result : size;
+ }
+ }
+ /* Not found */
+ return size;
}
/**
--
1.7.10.4
- [Qemu-devel] [PATCH] bitops: provide an inline implementation of find_first_bit,
Aurelien Jarno <=