1
0
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:
Andriy Gapon 2015-06-19 06:41:53 +00:00
parent bda8af6860
commit ab50c99d40
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=284591

View File

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