>>794
strings.h にも ffs.cにも書いてありませんが、
/usr/src/lib/libc/arch/i386/string/ffs.Sに >>788と同じファイルが
ありました(NetBSDです)。
インラインアセンブラは
asm("ffs2:");
asm("bsfl 4(%esp), %eax");
asm("ret");
って書いただけです。
ffsは-O2以上で
xorl %eax, %eax
bsfl %ecx, %edx
sete %al
negl %eax
orl %eax, %edx
incl %edx
というのが埋めこまれていました。ffs2は
pushl %ebx
call ffs2
movl %ebx, (%esp)
となっていました。他にもGCCの最適化が頭良すぎてちゃんと計れてないっぽいです。
副作用を起こさない、とか引数一緒なら返り値一緒ってどうやって判断してるんでしょうか?