From bef317767a95df3d2c01aeedba0ec877e4757e3f Mon Sep 17 00:00:00 2001 From: avg Date: Fri, 23 Oct 2015 10:05:43 +0000 Subject: MFC r261891: provide fast versions of ffsl and flsl for i386; ffsll and flsll for amd64 --- sys/amd64/include/cpufunc.h | 16 ++++++++++++++++ sys/conf/files | 1 - sys/conf/files.arm | 1 + sys/conf/files.i386 | 3 +-- sys/conf/files.ia64 | 1 + sys/conf/files.mips | 1 + sys/conf/files.pc98 | 3 +-- sys/conf/files.powerpc | 1 + sys/conf/files.sparc64 | 1 + sys/i386/include/cpufunc.h | 16 ++++++++++++++++ 10 files changed, 39 insertions(+), 5 deletions(-) (limited to 'sys') 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 a18bbc0..9b241d6 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -3219,7 +3219,6 @@ libkern/asprintf.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 1c98eee..ecb7f85 100644 --- a/sys/conf/files.arm +++ b/sys/conf/files.arm @@ -92,6 +92,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 d5af459..8cfb6c2 100644 --- a/sys/conf/files.i386 +++ b/sys/conf/files.i386 @@ -538,8 +538,7 @@ kern/imgact_aout.c optional compat_aout kern/imgact_binmisc.c optional imagact_binmisc 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 abe23b2..79caeaf 100644 --- a/sys/conf/files.ia64 +++ b/sys/conf/files.ia64 @@ -121,6 +121,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 88fa470..a1a9663 100644 --- a/sys/conf/files.pc98 +++ b/sys/conf/files.pc98 @@ -210,8 +210,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.powerpc b/sys/conf/files.powerpc index e889a5e..771968a 100644 --- a/sys/conf/files.powerpc +++ b/sys/conf/files.powerpc @@ -83,6 +83,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 0a8f574..5775d9b 100644 --- a/sys/conf/files.sparc64 +++ b/sys/conf/files.sparc64 @@ -69,6 +69,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 2221ce9..c625dcb 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 -- cgit v1.1