From f7f09b91ea9e915c2c75582c7fffd760e454e99f Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Tue, 10 Nov 2009 10:05:09 +0100 Subject: [PATCH] Small update_checkers() cleanup And is a bit faster too. No functional change. Signed-off-by: Marco Costalba --- src/position.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) 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())); -- 2.39.2