aboutsummaryrefslogtreecommitdiff
path: root/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h
diff options
context:
space:
mode:
authorAndriy Gapon <avg@FreeBSD.org>2015-06-19 06:41:53 +0000
committerAndriy Gapon <avg@FreeBSD.org>2015-06-19 06:41:53 +0000
commitab50c99d40525cf5422f46525a31bf18380c0104 (patch)
tree78c5fe18a0c02f0b96779e1e18ccb78b058f9b33 /sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h
parentbda8af6860978f3d8c8c08fb66fd5f1564a26793 (diff)
downloadsrc-ab50c99d40525cf5422f46525a31bf18380c0104.tar.gz
src-ab50c99d40525cf5422f46525a31bf18380c0104.zip
illums compat: use flsl/flsll for highbit/highbit64
Do that only when when fast inline versions are available. At the moment that can be the case only in the kernel and not for all platforms. The original code uses the binary search and that's kept as a fallback. This is a micro optimization. Differential Revision: https://reviews.freebsd.org/D2839 Reviewed by: delphij, mahrens, mav MFC after: 17 days
Notes
Notes: svn path=/head/; revision=284591
Diffstat (limited to 'sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h')
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h b/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h
index 300351482c10..aa84f361d68d 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h
@@ -32,6 +32,9 @@
#include <sys/param.h>
#include <sys/isa_defs.h>
+#if defined(__FreeBSD__) && defined(_KERNEL)
+#include <sys/libkern.h>
+#endif
#ifdef __cplusplus
extern "C" {
@@ -382,6 +385,9 @@ extern unsigned char bcd_to_byte[256];
static __inline int
highbit(ulong_t i)
{
+#if defined(__FreeBSD__) && defined(_KERNEL) && defined(HAVE_INLINE_FLSL)
+ return (flsl(i));
+#else
register int h = 1;
if (i == 0)
@@ -407,6 +413,7 @@ highbit(ulong_t i)
h += 1;
}
return (h);
+#endif
}
/*
@@ -416,6 +423,9 @@ highbit(ulong_t i)
static __inline int
highbit64(uint64_t i)
{
+#if defined(__FreeBSD__) && defined(_KERNEL) && defined(HAVE_INLINE_FLSLL)
+ return (flsll(i));
+#else
int h = 1;
if (i == 0)
@@ -439,6 +449,7 @@ highbit64(uint64_t i)
h += 1;
}
return (h);
+#endif
}
#ifdef __cplusplus