svn commit: r355521 - in head: stand/powerpc/kboot sys/conf sys/powerpc/include
Justin Hibbits
jhibbits at FreeBSD.org
Sun Dec 8 04:36:44 UTC 2019
Author: jhibbits
Date: Sun Dec 8 04:36:42 2019
New Revision: 355521
URL: https://svnweb.freebsd.org/changeset/base/355521
Log:
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
Modified:
head/stand/powerpc/kboot/main.c
head/sys/conf/files.powerpc
head/sys/powerpc/include/cpufunc.h
Modified: head/stand/powerpc/kboot/main.c
==============================================================================
--- head/stand/powerpc/kboot/main.c Sun Dec 8 04:19:05 2019 (r355520)
+++ head/stand/powerpc/kboot/main.c Sun Dec 8 04:36:42 2019 (r355521)
@@ -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"
Modified: head/sys/conf/files.powerpc
==============================================================================
--- head/sys/conf/files.powerpc Sun Dec 8 04:19:05 2019 (r355520)
+++ head/sys/conf/files.powerpc Sun Dec 8 04:36:42 2019 (r355521)
@@ -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
Modified: head/sys/powerpc/include/cpufunc.h
==============================================================================
--- head/sys/powerpc/include/cpufunc.h Sun Dec 8 04:19:05 2019 (r355520)
+++ head/sys/powerpc/include/cpufunc.h Sun Dec 8 04:36:42 2019 (r355521)
@@ -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)
More information about the svn-src-all
mailing list