allow ffs & co. a binary search

Erich Dollansky erichsfreebsdlist at alogt.com
Sun Jun 7 11:52:52 UTC 2015


Hi Hanns,

On Sun, 07 Jun 2015 08:53:18 +0200
Hans Petter Selasky <hps at selasky.org> wrote:

> On 06/07/15 02:13, Erich Dollansky wrote:
> >
> > If you like the binary way I could give you the sources for the
> > complete family following your style to replace the older functions.
> >
> I think this is not the fastest way to do it. You first find the LSB, 

I never thought of this as I took the code a long, long time from
university and expanded it over time from 8 to 64 bits.

> then you do a sumbits, which doesn't have any conditionals IF/ELSE
> and performs better with the CPU pipeline. I think the software ffs()
> is only used for platforms which doesn't have a hardware version btw:

The code is not x86 specific.
> 
This one is the same:

>  From my libmbin:
> 
> int ffs(int value)
> {
> 	int retval = mbin_sumbits32(mbin_lsb32(value) - 1);
> 	if (retval == 32)
> 		retval = 0;
> 	else
> 		retval++;
> 	return (retval);
> }
> 
Where is this? Should this also be in 10.1?

What I saw is that all CPUs except ARM uses the software version.

Erich


More information about the freebsd-hackers mailing list