svn commit: r284511 - head/sys/cddl/contrib/opensolaris/uts/common/sys
Andriy Gapon
avg at FreeBSD.org
Wed Jun 17 12:43:08 UTC 2015
Author: avg
Date: Wed Jun 17 12:05:04 2015
New Revision: 284511
URL: https://svnweb.freebsd.org/changeset/base/284511
Log:
illumos compat: use flsl/flsll for highbit/highbit64
This is a micro optimization.
The upstream code uses the binary search.
Differential Revision: https://reviews.freebsd.org/D2839
Reviewed by: delphij, mav
MFC after: 15 days
Modified:
head/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h
Modified: head/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h Wed Jun 17 11:48:00 2015 (r284510)
+++ head/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h Wed Jun 17 12:05:04 2015 (r284511)
@@ -32,6 +32,13 @@
#include <sys/param.h>
#include <sys/isa_defs.h>
+#ifdef __FreeBSD__
+#ifdef _KERNEL
+#include <machine/cpufunc.h>
+#else
+#include <strings.h>
+#endif
+#endif
#ifdef __cplusplus
extern "C" {
@@ -382,6 +389,9 @@ extern unsigned char bcd_to_byte[256];
static __inline int
highbit(ulong_t i)
{
+#ifdef __FreeBSD__
+ return (flsl(i));
+#else
register int h = 1;
if (i == 0)
@@ -407,6 +417,7 @@ highbit(ulong_t i)
h += 1;
}
return (h);
+#endif
}
/*
@@ -416,6 +427,9 @@ highbit(ulong_t i)
static __inline int
highbit64(uint64_t i)
{
+#ifdef __FreeBSD__
+ return (flsll(i));
+#else
int h = 1;
if (i == 0)
@@ -439,6 +453,7 @@ highbit64(uint64_t i)
h += 1;
}
return (h);
+#endif
}
#ifdef __cplusplus
More information about the svn-src-head
mailing list