}}bit_pop1stはbitboardのLSBから立っているビット位置を返し、そのビットをクリアする関数である。bitboardが全てゼロのときは-1を返すようにした。pos;}SSE2ではand128などの128bit論理演算が可能である。(r).x=_mm_or_si128((r).x,_mm_and_si128((a).x,(b).x))SSE4では次の比較関数も使える。Zフラグに結果が入る。(!_mm_testz_si128((a).x,(b).x))上記手生成コードでSIMD命令が有効となるのはand128であろう。後の命令は非SIMD命令であり、SIMDレジスタと通常レジスタの移動のオーバーヘッドがあるだろう。手生成ベンチマークベンチマークができる程度になってきたので色々測ってみた。上記の後手番での手生成回数。1315790SIMD命令はまだうまく書けて無いようなので、参考までに。i3を買ってきた次第。bfs/brs命令がAMDは遅いためbitboardでは不利と見た。}}というふうになるであろう。上記コードにおいて、test128()はbitboardがゼロか非ゼロかをテストする関数である。bit_pop1stはbitboardのLSBから立っているビット位置を返し、そのビットをクリアする関数である。32ビット版では次のようなコードとなっている。pos;}_builtin_ctzはLSB側から'1'のビット位置を返す関数。x86ではbsf命令で展開される。静止探索内では駒を取る手、駒を取らない王手を生成している。竜stack->checkには王への利きが入っている。Bitboardによる手の生成(駒を取る手)駒を取る銀の手の生成。}}飛び駒の取る手生成には、邪魔駒の判定が必要(相手駒へ利きがあるか)。