X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=366d61f309ed9706b0bec3d3af5797b9b8fdf48f;hp=45d0147aef1f2c6d4b244ef8ae261ebe36bc4d7a;hb=f7f09b91ea9e915c2c75582c7fffd760e454e99f;hpb=2f01d67a925e01508b4f3ae3bdc1c44d14b85c8e diff --git a/src/position.cpp b/src/position.cpp index 45d0147a..366d61f3 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -658,20 +658,18 @@ inline void Position::update_checkers(Bitboard* pCheckersBB, Square ksq, Square const bool Rook = (Piece == QUEEN || Piece == ROOK); const bool Slider = Bishop || Rook; + assert(*pCheckersBB == EmptyBoardBB); + // Direct checks - if ( ( (Bishop && bit_is_set(BishopPseudoAttacks[ksq], to)) + if ( ( !Slider // try to early skip slide piece attacks + || (Bishop && bit_is_set(BishopPseudoAttacks[ksq], to)) || (Rook && bit_is_set(RookPseudoAttacks[ksq], to))) - && bit_is_set(attacks_from(ksq), to)) // slow, try to early skip - set_bit(pCheckersBB, to); - - else if ( Piece != KING - && !Slider - && bit_is_set(Piece == PAWN ? attacks_from(ksq, opposite_color(sideToMove)) - : attacks_from(ksq), to)) - set_bit(pCheckersBB, to); - + && bit_is_set(Piece == PAWN ? attacks_from(ksq, opposite_color(sideToMove)) : attacks_from(ksq) , to)) + { + *pCheckersBB = SetMaskBB[to]; + } // Discovery checks - if (Piece != QUEEN && bit_is_set(dcCandidates, from)) + if (Piece != QUEEN && dcCandidates && bit_is_set(dcCandidates, from)) { if (Piece != ROOK) (*pCheckersBB) |= (attacks_from(ksq) & pieces(ROOK, QUEEN, side_to_move()));