provide fast versions of ffsl and flsl for i386; ffsll and flsll for amd64
Andriy Gapon
avg at FreeBSD.org
Tue Nov 19 18:50:27 UTC 2013
These are just trivial wrappers based on the fact that int and long on i386 have
the same "bit layout" and likewise for long and long long on amd64.
For your reviewing pleasure :-)
Thanks!
commit fdc1228b113f8b4c9dbda2b0323cb087c6b6df9d
Author: Andriy Gapon <avg at icyb.net.ua>
Date: Thu Nov 7 19:13:00 2013 +0200
provide fast versions of ffsl and flsl for i386; ffsll and flsll for amd64
diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h
index 5f8197b..7464739 100644
--- a/sys/amd64/include/cpufunc.h
+++ b/sys/amd64/include/cpufunc.h
@@ -154,6 +154,14 @@ ffsl(long mask)
return (mask == 0 ? mask : (int)bsfq((u_long)mask) + 1);
}
+#define HAVE_INLINE_FFSLL
+
+static __inline int
+ffsll(long long mask)
+{
+ return (ffsl((long)mask));
+}
+
#define HAVE_INLINE_FLS
static __inline int
@@ -170,6 +178,14 @@ flsl(long mask)
return (mask == 0 ? mask : (int)bsrq((u_long)mask) + 1);
}
+#define HAVE_INLINE_FLSLL
+
+static __inline int
+flsll(long long mask)
+{
+ return (flsl((long)mask));
+}
+
#endif /* _KERNEL */
static __inline void
diff --git a/sys/conf/files b/sys/conf/files
index d41b9d2..8077bfc 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -3029,7 +3029,6 @@ libkern/arc4random.c standard
libkern/bcd.c standard
libkern/bsearch.c standard
libkern/crc32.c standard
-libkern/flsll.c standard
libkern/fnmatch.c standard
libkern/iconv.c optional libiconv
libkern/iconv_converter_if.m optional libiconv
diff --git a/sys/conf/files.arm b/sys/conf/files.arm
index 603fb2d..d15f014 100644
--- a/sys/conf/files.arm
+++ b/sys/conf/files.arm
@@ -87,6 +87,7 @@ libkern/divdi3.c standard
libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
+libkern/flsll.c standard
libkern/lshrdi3.c standard
libkern/moddi3.c standard
libkern/qdivrem.c standard
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
index 23e03a3..030dbe1 100644
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -524,8 +524,7 @@ kern/kern_clocksource.c standard
kern/imgact_aout.c optional compat_aout
kern/imgact_gzip.c optional gzip
libkern/divdi3.c standard
-libkern/ffsl.c standard
-libkern/flsl.c standard
+libkern/flsll.c standard
libkern/memmove.c standard
libkern/memset.c standard
libkern/moddi3.c standard
diff --git a/sys/conf/files.ia64 b/sys/conf/files.ia64
index 6719c98..e85c35d 100644
--- a/sys/conf/files.ia64
+++ b/sys/conf/files.ia64
@@ -120,6 +120,7 @@ libkern/bcmp.c standard
libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
+libkern/flsll.c standard
libkern/ia64/__divdi3.S standard
libkern/ia64/__divsi3.S standard
libkern/ia64/__moddi3.S standard
diff --git a/sys/conf/files.mips b/sys/conf/files.mips
index 82d9a69..6522bb2 100644
--- a/sys/conf/files.mips
+++ b/sys/conf/files.mips
@@ -56,6 +56,7 @@ kern/subr_dummy_vdso_tc.c standard
libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
+libkern/flsll.c standard
libkern/memmove.c standard
libkern/cmpdi2.c optional mips | mipsel
libkern/ucmpdi2.c optional mips | mipsel
diff --git a/sys/conf/files.pc98 b/sys/conf/files.pc98
index fd3ad4a..c95d956 100644
--- a/sys/conf/files.pc98
+++ b/sys/conf/files.pc98
@@ -210,6 +210,7 @@ kern/imgact_gzip.c optional gzip
libkern/divdi3.c standard
libkern/ffsl.c standard
libkern/flsl.c standard
+libkern/flsll.c standard
libkern/memmove.c standard
libkern/memset.c standard
libkern/moddi3.c standard
diff --git a/sys/conf/files.powerpc b/sys/conf/files.powerpc
index 6d90fc7..98b3da0 100644
--- a/sys/conf/files.powerpc
+++ b/sys/conf/files.powerpc
@@ -79,6 +79,7 @@ libkern/ffs.c standard
libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
+libkern/flsll.c standard
libkern/lshrdi3.c optional powerpc
libkern/memmove.c standard
libkern/memset.c standard
diff --git a/sys/conf/files.sparc64 b/sys/conf/files.sparc64
index 5c00350..ccee247 100644
--- a/sys/conf/files.sparc64
+++ b/sys/conf/files.sparc64
@@ -68,6 +68,7 @@ libkern/ffs.c standard
libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
+libkern/flsll.c standard
libkern/memmove.c standard
sparc64/central/central.c optional central
sparc64/ebus/ebus.c optional ebus
diff --git a/sys/i386/include/cpufunc.h b/sys/i386/include/cpufunc.h
index 7cd3663..98f82f2 100644
--- a/sys/i386/include/cpufunc.h
+++ b/sys/i386/include/cpufunc.h
@@ -184,6 +184,14 @@ ffs(int mask)
return (mask == 0 ? mask : (int)bsfl((u_int)mask) + 1);
}
+#define HAVE_INLINE_FFSL
+
+static __inline int
+ffsl(long mask)
+{
+ return (ffs((int)mask));
+}
+
#define HAVE_INLINE_FLS
static __inline int
@@ -192,6 +200,14 @@ fls(int mask)
return (mask == 0 ? mask : (int)bsrl((u_int)mask) + 1);
}
+#define HAVE_INLINE_FLSL
+
+static __inline int
+flsl(long mask)
+{
+ return (fls((int)mask));
+}
+
#endif /* _KERNEL */
static __inline void
--
Andriy Gapon
More information about the freebsd-current
mailing list