X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=55a4c4a2fa0e0ca56ae6fe3832a2649698ad3963;hp=755e22d85a7c9317d2682f5838fda4b6bfd6a11c;hb=262c380c4bf8dcadf07741ec458a9e6565ecf8b4;hpb=6a6fd0b5f51046d09ee1f2377ef14c6aad611b18 diff --git a/src/position.cpp b/src/position.cpp index 755e22d8..55a4c4a2 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -633,20 +633,17 @@ bool Position::gives_check(Move m, const CheckInfo& ci) const { // Is there a discovered check? if ( unlikely(ci.dcCandidates) && (ci.dcCandidates & from) - && !aligned(from, to, king_square(~sideToMove))) + && !aligned(from, to, ci.ksq)) return true; // Can we skip the ugly special cases? if (type_of(m) == NORMAL) return false; - Color us = sideToMove; - Square ksq = king_square(~us); - switch (type_of(m)) { case PROMOTION: - return attacks_bb(Piece(promotion_type(m)), to, pieces() ^ from) & ksq; + return attacks_bb(Piece(promotion_type(m)), to, pieces() ^ from) & ci.ksq; // En passant capture with check? We have already handled the case // of direct checks and ordinary discovered check, so the only case we @@ -657,18 +654,18 @@ bool Position::gives_check(Move m, const CheckInfo& ci) const { Square capsq = file_of(to) | rank_of(from); Bitboard b = (pieces() ^ from ^ capsq) | to; - return (attacks_bb< ROOK>(ksq, b) & pieces(us, QUEEN, ROOK)) - | (attacks_bb(ksq, b) & pieces(us, QUEEN, BISHOP)); + return (attacks_bb< ROOK>(ci.ksq, b) & pieces(sideToMove, QUEEN, ROOK)) + | (attacks_bb(ci.ksq, b) & pieces(sideToMove, QUEEN, BISHOP)); } case CASTLING: { Square kfrom = from; Square rfrom = to; // Castling is encoded as 'King captures the rook' - Square kto = relative_square(us, rfrom > kfrom ? SQ_G1 : SQ_C1); - Square rto = relative_square(us, rfrom > kfrom ? SQ_F1 : SQ_D1); + Square kto = relative_square(sideToMove, rfrom > kfrom ? SQ_G1 : SQ_C1); + Square rto = relative_square(sideToMove, rfrom > kfrom ? SQ_F1 : SQ_D1); - return (PseudoAttacks[ROOK][rto] & ksq) - && (attacks_bb(rto, (pieces() ^ kfrom ^ rfrom) | rto | kto) & ksq); + return (PseudoAttacks[ROOK][rto] & ci.ksq) + && (attacks_bb(rto, (pieces() ^ kfrom ^ rfrom) | rto | kto) & ci.ksq); } default: assert(false);