[parisc-linux] a fast fls also for 2.6?
Joel Soete
joel.soete@tiscali.be
Fri, 05 Sep 2003 19:26:13 +0000
Grant Grundler wrote:
>On Fri, Sep 05, 2003 at 01:00:35PM +0000, Joel Soete wrote:
>
>
>>remember me that I also suggest a __fls() in:
>><http://lists.parisc-linux.org/pipermail/parisc-linux/2003-August/020628.html>
>>
>>
>
>sorry - I missed that.
>
>
>
>>Without any remark, I don't know if you could also be interested to
>>include it in 2.6.
>>
>>
>
>no - becuase fls() and ffs() return the same values for given input.
>(I see comments in include/asm-ppc/bitops.h to that effect).
>
>parisc __ffs costs the same number of cycles regardless of input.
>(2 cycles per 3 instructions about on PA 2.0 machines).
>ie there is no advantage to "searching from the top" vs "searching
>from the bottom" which is what I think the intent of fls() vs ffs().
>For generic implementations, this intent is important.
>
>What we could do is redefine fls() to also use ffs() and add
>my comment above. Patch appended. Please test/review and tell me
>if that should be committed. I haven't tested it yet and the comments
>in PPC bitops.h could be wrong.
>
>thanks,
>grant
>
>
>Index: include/asm-parisc/bitops.h
>===================================================================
>RCS file: /var/cvs/linux-2.6/include/asm-parisc/bitops.h,v
>retrieving revision 1.2
>diff -u -p -r1.2 bitops.h
>--- include/asm-parisc/bitops.h 1 Sep 2003 00:30:42 -0000 1.2
>+++ include/asm-parisc/bitops.h 5 Sep 2003 18:11:21 -0000
>@@ -281,9 +281,14 @@ static __inline__ int ffs(int x)
>
> /*
> * fls: find last bit set.
>+ *
>+ * parisc __ffs costs the same number of cycles regardless of input.
>+ * A similar implementation for __fls() would have no advantage.
>+ * ie there is no advantage to "searching from the top" vs "searching
>+ * from the bottom" which is the intent of fls() vs ffs().
> */
>
>-#define fls(x) generic_fls(x)
>+#define fls(x) ffs(x)
>
> /*
> * hweightN: returns the hamming weight (i.e. the number
>
>
>
My bad, I undurstand that ffs return the index of the first bit set otc
fls returning the the index of the last bit set
(ie for 1010: ffs would return 2 and fls would return 4)?
Sorry for confusion. It was never the less a good exercice ;)
Thanks,
Joel