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. Differential Revision: https://reviews.freebsd.org/D2839 Reviewed by: delphij, mahrens, mav MFC after: 17 days
This commit is contained in:
parent
bda8af6860
commit
ab50c99d40
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user