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
This commit is contained in:
Andriy Gapon 2015-06-17 12:05:04 +00:00
parent 8fe344fa48
commit 1fa1d4a651

View File

@ -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