X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=9fe5f893c9da5f199577abeb283fa7942d4bee6e;hp=f5081bd145d401acad94f986585e372695989fc2;hb=0162fb83c21b9ac4d5ed302d4bc5a12b7a0cfc43;hpb=943ae89be11929b09be5c5d0447b2b62b5480ebd diff --git a/src/position.cpp b/src/position.cpp index f5081bd1..9fe5f893 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -1010,11 +1010,9 @@ Value Position::see(Move m) const { occupied ^= to; // For the case when captured piece is a pinner // Don't allow pinned pieces to attack pieces except the king as long all - // pinners are on their original square. When a pinner moves to the - // exchange-square or get captured on it, we fall back to standard SEE behaviour. - if ( (stmAttackers & pinned_pieces(stm)) - && (st->pinnersForKing[stm] & occupied) == st->pinnersForKing[stm]) - stmAttackers &= ~pinned_pieces(stm); + // pinners are on their original square. + if (!(st->pinnersForKing[stm] & ~occupied)) + stmAttackers &= ~st->blockersForKing[stm]; if (!stmAttackers) return swapList[0]; @@ -1037,10 +1035,11 @@ Value Position::see(Move m) const { nextVictim = min_attacker(byTypeBB, to, stmAttackers, occupied, attackers); stm = ~stm; stmAttackers = attackers & pieces(stm); - if ( nextVictim != KING - && (stmAttackers & pinned_pieces(stm)) - && (st->pinnersForKing[stm] & occupied) == st->pinnersForKing[stm]) - stmAttackers &= ~pinned_pieces(stm); + + // Don't allow pinned pieces to attack pieces except the king + if ( nextVictim != KING + && !(st->pinnersForKing[stm] & ~occupied)) + stmAttackers &= ~st->blockersForKing[stm]; ++slIndex;