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