On 06/11/2010 01:57 PM, Stefan Weil wrote: > mingw32 does not include function ffs. > > Commit c6d29ad6e24533cc3762e1d654275607e1d03058 added a > declaration for ffs, but an implementation was missing. > > For compilations with optimization, the compiler creates > inline code, so the implementation is not always needed. > > Without optimization, linking fails without this patch. > > Signed-off-by: Stefan Weil <w...@mail.berlios.de> > --- > osdep.c | 15 +++++++++++++++ > 1 files changed, 15 insertions(+), 0 deletions(-) > > diff --git a/osdep.c b/osdep.c > index abbc8a2..50b38e3 100644 > --- a/osdep.c > +++ b/osdep.c > @@ -167,6 +167,21 @@ int qemu_create_pidfile(const char *filename) > > #ifdef _WIN32 > > +/* mingw32 needs ffs for compilations without optimization. */ > +int ffs(int i) > +{ > + int position = 0; > + if (i != 0) { > + for (position = 1; i != 0; position++) { > + if (i & 1) { > + break; > + } > + i >>= 1; > + } > + } > + return position; > +}
This is confusingly written. You've already tested for zero. for (pos = 1; (i & 1) == 0; pos++) { i >>= 1; } That said, is there any reason not to just do int ffs(int i) { return __builtin_ffs(i); } ? r~