svn commit: r288521 - stable/10/sys/cddl/contrib/opensolaris/uts/common/sys
Alexander Motin
mav at FreeBSD.org
Fri Oct 2 20:13:57 UTC 2015
Author: mav
Date: Fri Oct 2 20:13:56 2015
New Revision: 288521
URL: https://svnweb.freebsd.org/changeset/base/288521
Log:
MFC r284591 (by avg): 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.
Modified:
stable/10/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h
==============================================================================
--- stable/10/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h Fri Oct 2 20:09:16 2015 (r288520)
+++ stable/10/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h Fri Oct 2 20:13:56 2015 (r288521)
@@ -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
More information about the svn-src-stable-10
mailing list