if (type_of(pc) == PAWN)
si->pawnKey ^= Zobrist::psq[pc][s];
- else if (type_of(pc) != PAWN && type_of(pc) != KING)
+ else if (type_of(pc) != KING)
si->nonPawnMaterial[color_of(pc)] += PieceValue[MG][pc];
}
// Snipers are sliders that attack 's' when a piece and other snipers are removed
Bitboard snipers = ( (PseudoAttacks[ ROOK][s] & pieces(QUEEN, ROOK))
| (PseudoAttacks[BISHOP][s] & pieces(QUEEN, BISHOP))) & sliders;
- Bitboard occupancy = pieces() & ~snipers;
+ Bitboard occupancy = pieces() ^ snipers;
while (snipers)
{
if (!(between_bb(s1, s2) & pieces()))
{
- // In the cuckoo table, both moves Rc1c5 and Rc5c1 are stored in the same
- // location. We select the legal one by reversing the move variable if necessary.
- if (empty(s1))
- move = make_move(s2, s1);
-
if (ply > i)
return true;
- // For nodes before or at the root, check that the move is a repetition one
- // rather than a move to the current position
+ // For nodes before or at the root, check that the move is a
+ // repetition rather than a move to the current position.
+ // In the cuckoo table, both moves Rc1c5 and Rc5c1 are stored in
+ // the same location, so we have to select which square to check.
if (color_of(piece_on(empty(s1) ? s2 : s1)) != side_to_move())
continue;