On Sun, Feb 14, 2010 at 10:36:48AM -0800, H. Peter Anvin wrote: > On 02/14/2010 03:24 AM, Borislav Petkov wrote: > > > > __const_hweightN - for at compile time known constants as arguments > > __arch_hweightN - arch possibly has an optimized hweight version > > __sw_hweightN - fall back when nothing else is there, aka the functions in > > lib/hweight.c > > > > Now, in the x86 case, when the compiler can't know that the argument is > > a constant, we call the __arch_hweightN versions. The alternative does > > call the __sw_hweightN version in case the CPU doesn't support popcnt. > > In this case, we need to build __sw_hweightN with -fcall-saved* for gcc > > to be able to take care of the regs clobbered ny __sw_hweightN. > > > > So, if I understand you correctly, your suggestion might work, we > > simply need to rename the lib/hweight.c versions to __sw_hweightN > > and have <asm-generic/bitops/arch_hweight.h> have __arch_hweightN -> > > __sw_hweightN wrappers in the default case, all arches which have an > > optimized version will provide it in their respective bitops header... > > > > I'm not entirely sure what you're asking; if what you're asking what to > name an x86-specific fallback function, it presumably should be > __arch_sw_hweightN (i.e. __arch prefix with a modifier.) Hmm, basically, what PeterZ suggested is that I drop one indirection under __arch_hweightN, which would make x86-specific fallback functions superfluous. IOW, what we have so far is: #define hweightN(w) (__builtin_constant_p(w) ? __const_hweightN(w) : __arch_hweightN(w)) and have <asm-generic/bitops/arch_hweight.h> provide __arch_hweightN() -> __sw_hweightN wrappers per default, where the __sw_hweightN are the lib/hweight.c generic versions. On architectures/CPUs which provide popcnt in hardware, we create __arch_hweightN implementations in <arch/[:ARCH_NAME:]/include/asm/bitops.h> overriding the <asm-generic/bitops/arch_hweight.h> versions by simply not including that last header. Is that agreeable? -- Regards/Gruss, Boris. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html