wineport: Use a lookup table to make our slow ffs() a bit faster.
Dan Kegel
dank at kegel.com
Fri Mar 11 07:51:27 CST 2011
Do you actually have a system that doesn't have HAVE_FFS set?
On my machine,
int main(int argc, char **argv)
{
return ffs(argc);
}
compiles to
pushl %ebp
movl %esp, %ebp
movl $-1, %edx
bsfl 8(%ebp), %eax
cmove %edx, %eax
addl $1, %eax
popl %ebp
ret
which is probably pretty fast.
Large lookup tables can dirty the L1 cache and slow other things down.
See also http://stackoverflow.com/questions/757059/position-of-least-significant-bit-that-is-set
More information about the wine-devel
mailing list