mirror of
https://git.FreeBSD.org/src.git
synced 2025-02-01 17:00:36 +00:00
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
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=284591
@ -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