From eced15fe36a16c38659f586bc558b1175114cc76 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 20 Apr 2014 15:15:43 +0200 Subject: [PATCH] Generalize shift_bb() to handle double pushes And use it in evaluate_space. No functional change. --- src/bitboard.h | 5 ++--- src/evaluate.cpp | 8 +++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/bitboard.h b/src/bitboard.h index 98142683..888e9690 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -130,10 +130,9 @@ inline int rank_distance(Square s1, Square s2) { template inline Bitboard shift_bb(Bitboard b) { - return Delta == DELTA_N ? b << 8 : Delta == DELTA_S ? b >> 8 - : Delta == DELTA_NE ? (b & ~FileHBB) << 9 : Delta == DELTA_SE ? (b & ~FileHBB) >> 7 + return Delta == DELTA_NE ? (b & ~FileHBB) << 9 : Delta == DELTA_SE ? (b & ~FileHBB) >> 7 : Delta == DELTA_NW ? (b & ~FileABB) << 7 : Delta == DELTA_SW ? (b & ~FileABB) >> 9 - : 0; + : Delta > 0 ? b << Delta : b >> -Delta; } diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 8eb03648..b1422ac6 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -702,7 +702,9 @@ namespace { template int evaluate_space(const Position& pos, const EvalInfo& ei) { - const Color Them = (Us == WHITE ? BLACK : WHITE); + const Color Them = (Us == WHITE ? BLACK : WHITE); + const Square Down = (Us == WHITE ? DELTA_S : DELTA_N); + const Square DownDown = (Us == WHITE ? DELTA_SS : DELTA_NN); // Find the safe squares for our pieces inside the area defined by // SpaceMask[]. A square is unsafe if it is attacked by an enemy @@ -714,8 +716,8 @@ namespace { // Find all squares which are at most three squares behind some friendly pawn Bitboard behind = pos.pieces(Us, PAWN); - behind |= (Us == WHITE ? behind >> 8 : behind << 8); - behind |= (Us == WHITE ? behind >> 16 : behind << 16); + behind |= shift_bb< Down>(behind); + behind |= shift_bb(behind); // Since SpaceMask[Us] is fully on our half of the board assert(unsigned(safe >> (Us == WHITE ? 32 : 0)) == 0); -- 2.39.2