ffsはいろいろ試して
unsigned ffs(unsigned n){
n = (~n & (n - 1));

n = n - ((n >> 1) & 0x5555);
n = (n & 0x3333) + ((n >> 2) & 0x3333);
n = (n + (n >> 4)) & 0x0F0F;
n = n + (n >> 8);
return n & 0x1F;
}
としています(高々16ビットなので)。

インクリメントしていくんなら ffsを呼ばないでできないかなあ
と思っているんですが無理でしょうか?