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-head mailing list