powerpc: Use builtins for fls/flsl
Summary: There's no need to use the fallback fls() and flsl() libkern functions when the PowerISA includes instructions that already do the bulk of the work. Take advantage of this through the GCC builtins __builtin_clz() and __builtin_clzl(). Reviewed by: luporl Differential Revision: https://reviews.freebsd.org/D22340
This commit is contained in:
parent
a795401110
commit
9e319462a0
@ -31,7 +31,6 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/param.h>
|
||||
#include <fdt_platform.h>
|
||||
|
||||
#define _KERNEL
|
||||
#include <machine/cpufunc.h>
|
||||
#include "bootstrap.h"
|
||||
#include "host_syscall.h"
|
||||
|
@ -88,8 +88,6 @@ libkern/divdi3.c optional powerpc | powerpcspe
|
||||
libkern/ffs.c standard
|
||||
libkern/ffsl.c standard
|
||||
libkern/ffsll.c standard
|
||||
libkern/fls.c standard
|
||||
libkern/flsl.c standard
|
||||
libkern/flsll.c standard
|
||||
libkern/lshrdi3.c optional powerpc | powerpcspe
|
||||
libkern/memcmp.c standard
|
||||
|
@ -212,6 +212,20 @@ get_pcpu(void)
|
||||
return (ret);
|
||||
}
|
||||
|
||||
#define HAVE_INLINE_FLS
|
||||
static __inline __pure2 int
|
||||
fls(int mask)
|
||||
{
|
||||
return (mask ? 32 - __builtin_clz(mask) : 0);
|
||||
}
|
||||
|
||||
#define HAVE_INLINE_FLSL
|
||||
static __inline __pure2 int
|
||||
flsl(long mask)
|
||||
{
|
||||
return (mask ? (8 * sizeof(long) - __builtin_clzl(mask)) : 0);
|
||||
}
|
||||
|
||||
/* "NOP" operations to signify priorities to the kernel. */
|
||||
static __inline void
|
||||
nop_prio_vlow(void)
|
||||
|
Loading…
Reference in New Issue
Block a user