Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 8 Dec 2019 04:36:43 +0000 (UTC)
From:      Justin Hibbits <jhibbits@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r355521 - in head: stand/powerpc/kboot sys/conf sys/powerpc/include
Message-ID:  <201912080436.xB84ahxV022820@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912080436.xB84ahxV022820>