From 1fa1d4a651c15375ccbf3e2ce2e755a3c20e43d2 Mon Sep 17 00:00:00 2001 From: Andriy Gapon Date: Wed, 17 Jun 2015 12:05:04 +0000 Subject: [PATCH] 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 --- .../opensolaris/uts/common/sys/sysmacros.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h b/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h index 300351482c1..f1adfd115d5 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h +++ b/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h @@ -32,6 +32,13 @@ #include #include +#ifdef __FreeBSD__ +#ifdef _KERNEL +#include +#else +#include +#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