[coreboot] [PATCH 3/5] libpayload: Implement ffs()

Stefan Reinauer stefan.reinauer at coreboot.org
Fri Feb 25 22:19:29 CET 2011


* Peter Stuge <peter at stuge.se> [110225 21:48]:
> Patrick Georgi wrote:
> > +int ffs(int i);
> 
> Wording in my ffs(3) page suggests that int can be 64 bit. We don't
> care?

So far the only compiler I know where this could happen is MSVC. Since
we have an endless amount of GNUisms in all of our code that basically
limits us to gcc/llvm/sun compiler/intel compiler/... it will never be a
problem for us.

We might want to consider a slightly bigger but non-looping and faster
implementation

int ffs(int i)
{
        int count = 1;

        if (i == 0)
                return 0;

        if (!(i & 0xffff)) {
                i >>= 16;
                count += 16;
        }

        if (!(i & 0xff)) {
                i >>= 8;
                count += 8;
        }

        if (!(i & 0xf)) {
                i >>= 4;
                count += 4;
        }

        if (!(i & 3)) {
                i >>= 2;
                count += 2;
        }

        if (!(i & 1)) {
                i >>= 1;
                count += 1;
        }

        return count;
}


Stefan





More information about the coreboot mailing list