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)
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to