sakurapyon’s blog

sakurapyon’s blog

二歩のチェック

SSEだと遅くなったので書き直し。

歩のビットボードと、縦1列がONになったビットボードをANDして、0以外ならその列には打てない(既に歩がある列である)。

縦1列のビットボードは定数なんだけど SSEを使うとメモリアクセスになるので、最初の1つ以外はシフトで作った方が速いと思う[要確認]。sakurapyonのビットボードは32bits*3なので _mm_slli_epi32が使える。

BitBoard        b=歩が打てそうな場所;
BitBoard        bf=bb_file0;

if(!((b_pawn&bf).isZero()))     b-=bf;
for(auto i=0;i<8;i++){
        bf.mm=_mm_slli_epi32(bf.mm,1);
        if(!((b_pawn&bf).isZero()))     b-=bf;
} 

// bに歩が打てる場所が入っている