aboutsummaryrefslogtreecommitdiff
path: root/sys/sys/blist.h
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>2002-05-14 08:01:34 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>2002-05-14 08:01:34 +0000
commit085559c4fc62322455543afa1bc0b4a022495560 (patch)
tree5d20d1025f703d5764a107ed23ed71df3bba1b0e /sys/sys/blist.h
parentbe1d673d24eb7656c01123fc89be9c224eb25383 (diff)
downloadsrc-085559c4fc62322455543afa1bc0b4a022495560.tar.gz
src-085559c4fc62322455543afa1bc0b4a022495560.zip
Roll the LOG2 macro up again, I don't belive unrolling this for 64bits
make sense. Sponsored by: DARPA & NAI Labs.
Notes
Notes: svn path=/head/; revision=96567
Diffstat (limited to 'sys/sys/blist.h')
-rw-r--r--sys/sys/blist.h44
1 files changed, 13 insertions, 31 deletions
diff --git a/sys/sys/blist.h b/sys/sys/blist.h
index a26932cae89f..cb52a6a281f2 100644
--- a/sys/sys/blist.h
+++ b/sys/sys/blist.h
@@ -30,37 +30,19 @@
#ifndef _SYS_BLIST_H_
#define _SYS_BLIST_H_
-#define LOG2(v) (((u_daddr_t)(v) >= 0x80000000U) ? 31 : \
- ((u_daddr_t)(v) >= 0x40000000U) ? 30 : \
- ((u_daddr_t)(v) >= 0x20000000U) ? 29 : \
- ((u_daddr_t)(v) >= 0x10000000U) ? 28 : \
- ((u_daddr_t)(v) >= 0x08000000U) ? 27 : \
- ((u_daddr_t)(v) >= 0x04000000U) ? 26 : \
- ((u_daddr_t)(v) >= 0x02000000U) ? 25 : \
- ((u_daddr_t)(v) >= 0x01000000U) ? 24 : \
- ((u_daddr_t)(v) >= 0x00800000U) ? 23 : \
- ((u_daddr_t)(v) >= 0x00400000U) ? 22 : \
- ((u_daddr_t)(v) >= 0x00200000U) ? 21 : \
- ((u_daddr_t)(v) >= 0x00100000U) ? 20 : \
- ((u_daddr_t)(v) >= 0x00080000U) ? 19 : \
- ((u_daddr_t)(v) >= 0x00040000U) ? 18 : \
- ((u_daddr_t)(v) >= 0x00020000U) ? 17 : \
- ((u_daddr_t)(v) >= 0x00010000U) ? 16 : \
- ((u_daddr_t)(v) >= 0x00008000U) ? 15 : \
- ((u_daddr_t)(v) >= 0x00004000U) ? 14 : \
- ((u_daddr_t)(v) >= 0x00002000U) ? 13 : \
- ((u_daddr_t)(v) >= 0x00001000U) ? 12 : \
- ((u_daddr_t)(v) >= 0x00000800U) ? 11 : \
- ((u_daddr_t)(v) >= 0x00000400U) ? 10 : \
- ((u_daddr_t)(v) >= 0x00000200U) ? 9 : \
- ((u_daddr_t)(v) >= 0x00000100U) ? 8 : \
- ((u_daddr_t)(v) >= 0x00000080U) ? 7 : \
- ((u_daddr_t)(v) >= 0x00000040U) ? 6 : \
- ((u_daddr_t)(v) >= 0x00000020U) ? 5 : \
- ((u_daddr_t)(v) >= 0x00000010U) ? 4 : \
- ((u_daddr_t)(v) >= 0x00000008U) ? 3 : \
- ((u_daddr_t)(v) >= 0x00000004U) ? 2 : \
- ((u_daddr_t)(v) >= 0x00000002U) ? 1 : 0)
+static __inline int
+LOG2(u_daddr_t v)
+{
+ int i = -1;
+
+ if (!v)
+ return(0);
+ while (v) {
+ i++;
+ v >>= 1;
+ }
+ return (i);
+}
/*
* blmeta and bl_bitmap_t MUST be a power of 2 in size.