diff --git a/src/bitboard.h b/src/bitboard.h index a813ea12..7ae1effd 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -107,22 +107,27 @@ extern Magic BishopMagics[SQUARE_NB]; /// whether a given bit is set in a bitboard, and for setting and clearing bits. inline Bitboard operator&(Bitboard b, Square s) { + assert(s >= SQ_A1 && s <= SQ_H8); return b & SquareBB[s]; } inline Bitboard operator|(Bitboard b, Square s) { + assert(s >= SQ_A1 && s <= SQ_H8); return b | SquareBB[s]; } inline Bitboard operator^(Bitboard b, Square s) { + assert(s >= SQ_A1 && s <= SQ_H8); return b ^ SquareBB[s]; } inline Bitboard& operator|=(Bitboard& b, Square s) { + assert(s >= SQ_A1 && s <= SQ_H8); return b |= SquareBB[s]; } inline Bitboard& operator^=(Bitboard& b, Square s) { + assert(s >= SQ_A1 && s <= SQ_H8); return b ^= SquareBB[s]; } diff --git a/src/pawns.cpp b/src/pawns.cpp index 6664742e..3e926005 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -226,8 +226,8 @@ Value Entry::evaluate_shelter(const Position& pos, Square ksq) { enum { Unopposed, BlockedByPawn, Unblocked }; constexpr Color Them = (Us == WHITE ? BLACK : WHITE); - constexpr Direction Up = (Us == WHITE ? NORTH : SOUTH); - constexpr Bitboard BlockRanks = (Us == WHITE ? Rank2BB | Rank3BB : Rank7BB | Rank6BB); + constexpr Direction Down = (Us == WHITE ? SOUTH : NORTH); + constexpr Bitboard BlockRanks = (Us == WHITE ? Rank1BB | Rank2BB : Rank8BB | Rank7BB); Bitboard b = pos.pieces(PAWN) & (forward_ranks_bb(Us, ksq) | rank_bb(ksq)); Bitboard ourPawns = b & pos.pieces(Us); @@ -235,7 +235,7 @@ Value Entry::evaluate_shelter(const Position& pos, Square ksq) { Value safety = (ourPawns & file_bb(ksq)) ? Value(5) : Value(-5); - if ((theirPawns & (FileABB | FileHBB) & BlockRanks) & (ksq + Up)) + if ((shift(theirPawns) & (FileABB | FileHBB) & BlockRanks) & ksq) safety += 374; File center = std::max(FILE_B, std::min(FILE_G, file_of(ksq)));