On Thu, Apr 28, 2016 at 07:51:06PM +0200, Geert Uytterhoeven wrote: > On Thu, Apr 28, 2016 at 6:48 PM, George Spelvin <linux@xxxxxxxxxxx> wrote: > > Another few comments: > > > > 1. Would ARCH_HAS_FAST_FFS involve fewer changes than CPU_NO_EFFICIENT_FFS? > > No, as you want to _disable_ ARCH_HAS_FAST_FFS / _enable_ > CPU_NO_EFFICIENT_FFS as soon as you're enabling support for a > CPU that doesn't support it. > > Logical OR is easier in both the Kconfig and C preprocessor languages > than logical NAND. > > E.g. in Kconfig, a CPU core not supporting it can just select > CPU_NO_EFFICIENT_FFS. How does a CPU lack an efficient ffs/ctz anyway? There are all sorts of ways to implement it without a native insn, some of which are almost or just as fast as the native insn on cpus that have the latter. On anything with a fast multiply, the de Bruijn sequence approach is near-optimal, and otherwise one of the binary-search type approaches (possibly branchless) can be used. If the compiler doesn't generate an appropriate one for __builtin_ctz, that's arguably a compiler bug. Rich