|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v3 08/17] uk/include: use ukarch_ffs func family in bitopts.h
From: Costin Lupu <costin.lupu@xxxxxxxxx>
ukarch_ffs functions are returning 0-based result. Meaning the least
significant bit is in position 0 (unlike the ffs function from gcc).
So we do not need __ffs wrappers from the original FreeBSD code.
Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
Reviewed-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx>
---
include/uk/bitops.h | 52 ++++++++++++---------------------------------
1 file changed, 13 insertions(+), 39 deletions(-)
diff --git a/include/uk/bitops.h b/include/uk/bitops.h
index cfe7f6a..e003a43 100644
--- a/include/uk/bitops.h
+++ b/include/uk/bitops.h
@@ -64,30 +64,6 @@
#define hweight64(x) bitcount64(x)
#define hweight_long(x) bitcountl(x)
-static inline int
-__ffs(int mask)
-{
- return (ffs(mask) - 1);
-}
-
-static inline int
-__fls(int mask)
-{
- return (fls(mask) - 1);
-}
-
-static inline int
-__ffsl(long mask)
-{
- return (ffsl(mask) - 1);
-}
-
-static inline int
-__flsl(long mask)
-{
- return (flsl(mask) - 1);
-}
-
static inline int
fls64(uint64_t mask)
{
@@ -100,13 +76,11 @@ ror32(uint32_t word, unsigned int shift)
return ((word >> shift) | (word << (32 - shift)));
}
-#define ffz(mask) __ffs(~(mask))
-
static inline int get_count_order(unsigned int count)
{
int order;
- order = fls(count) - 1;
+ order = ukarch_fls(count);
if (count & (count - 1))
order++;
return order;
@@ -122,12 +96,12 @@ find_first_bit(const unsigned long *addr, unsigned long
size)
size -= BITS_PER_LONG, bit += BITS_PER_LONG, addr++) {
if (*addr == 0)
continue;
- return (bit + __ffsl(*addr));
+ return (bit + ukarch_ffsl(*addr));
}
if (size) {
mask = (*addr) & BITMAP_LAST_WORD_MASK(size);
if (mask)
- bit += __ffsl(mask);
+ bit += ukarch_ffsl(mask);
else
bit += size;
}
@@ -144,12 +118,12 @@ find_first_zero_bit(const unsigned long *addr, unsigned
long size)
size -= BITS_PER_LONG, bit += BITS_PER_LONG, addr++) {
if (~(*addr) == 0)
continue;
- return (bit + __ffsl(~(*addr)));
+ return (bit + ukarch_ffsl(~(*addr)));
}
if (size) {
mask = ~(*addr) & BITMAP_LAST_WORD_MASK(size);
if (mask)
- bit += __ffsl(mask);
+ bit += ukarch_ffsl(mask);
else
bit += size;
}
@@ -171,13 +145,13 @@ find_last_bit(const unsigned long *addr, unsigned long
size)
if (offs) {
mask = (*addr) & BITMAP_LAST_WORD_MASK(offs);
if (mask)
- return (bit + __flsl(mask));
+ return (bit + ukarch_flsl(mask));
}
while (pos--) {
addr--;
bit -= BITS_PER_LONG;
if (*addr)
- return (bit + __flsl(*addr));
+ return (bit + ukarch_flsl(*addr));
}
return (size);
}
@@ -200,7 +174,7 @@ find_next_bit(const unsigned long *addr, unsigned long size,
if (offs) {
mask = (*addr) & ~BITMAP_LAST_WORD_MASK(offs);
if (mask)
- return (bit + __ffsl(mask));
+ return (bit + ukarch_ffsl(mask));
if (size - bit <= BITS_PER_LONG)
return (size);
bit += BITS_PER_LONG;
@@ -210,12 +184,12 @@ find_next_bit(const unsigned long *addr, unsigned long
size,
size -= BITS_PER_LONG, bit += BITS_PER_LONG, addr++) {
if (*addr == 0)
continue;
- return (bit + __ffsl(*addr));
+ return (bit + ukarch_ffsl(*addr));
}
if (size) {
mask = (*addr) & BITMAP_LAST_WORD_MASK(size);
if (mask)
- bit += __ffsl(mask);
+ bit += ukarch_ffsl(mask);
else
bit += size;
}
@@ -240,7 +214,7 @@ find_next_zero_bit(const unsigned long *addr, unsigned long
size,
if (offs) {
mask = ~(*addr) & ~BITMAP_LAST_WORD_MASK(offs);
if (mask)
- return (bit + __ffsl(mask));
+ return (bit + ukarch_ffsl(mask));
if (size - bit <= BITS_PER_LONG)
return (size);
bit += BITS_PER_LONG;
@@ -250,12 +224,12 @@ find_next_zero_bit(const unsigned long *addr, unsigned
long size,
size -= BITS_PER_LONG, bit += BITS_PER_LONG, addr++) {
if (~(*addr) == 0)
continue;
- return (bit + __ffsl(~(*addr)));
+ return (bit + ukarch_ffsl(~(*addr)));
}
if (size) {
mask = ~(*addr) & BITMAP_LAST_WORD_MASK(size);
if (mask)
- bit += __ffsl(mask);
+ bit += ukarch_ffsl(mask);
else
bit += size;
}
--
2.18.0
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |