diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 7408a77c..fbe768bb 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -358,8 +358,8 @@ namespace { score += RookOnPawn * popcount(pos.pieces(Them, PAWN) & PseudoAttacks[ROOK][s]); // Bonus for rook on an open or semi-open file - if (pe->semiopen_file(Us, file_of(s))) - score += RookOnFile[bool(pe->semiopen_file(Them, file_of(s)))]; + if (pos.semiopen_file(Us, file_of(s))) + score += RookOnFile[bool(pos.semiopen_file(Them, file_of(s)))]; // Penalty when trapped by the king, even more if the king cannot castle else if (mob <= 3) @@ -720,7 +720,7 @@ namespace { int bonus = popcount(safe) + popcount(behind & safe); int weight = pos.count(Us) - - 2 * popcount(pe->semiopenFiles[WHITE] & pe->semiopenFiles[BLACK]); + - (16 - pos.count()) / 4; Score score = make_score(bonus * weight * weight / 16, 0); diff --git a/src/pawns.cpp b/src/pawns.cpp index b034f478..7e29f506 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -77,7 +77,6 @@ namespace { Bitboard theirPawns = pos.pieces(Them, PAWN); e->passedPawns[Us] = e->pawnAttacksSpan[Us] = e->weakUnopposed[Us] = 0; - e->semiopenFiles[Us] = 0xFF; e->kingSquares[Us] = SQ_NONE; e->pawnAttacks[Us] = pawn_attacks_bb(ourPawns); e->pawnsOnSquares[Us][BLACK] = popcount(ourPawns & DarkSquares); @@ -91,7 +90,6 @@ namespace { File f = file_of(s); Rank r = relative_rank(Us, s); - e->semiopenFiles[Us] &= ~(1 << f); e->pawnAttacksSpan[Us] |= pawn_attack_span(Us, s); // Flag the pawn diff --git a/src/pawns.h b/src/pawns.h index 71d18ee8..5f5411f6 100644 --- a/src/pawns.h +++ b/src/pawns.h @@ -40,10 +40,6 @@ struct Entry { int weak_unopposed(Color c) const { return weakUnopposed[c]; } int passed_count() const { return passedCount; } - int semiopen_file(Color c, File f) const { - return semiopenFiles[c] & (1 << f); - } - int pawns_on_same_color_squares(Color c, Square s) const { return pawnsOnSquares[c][bool(DarkSquares & s)]; } @@ -69,7 +65,6 @@ struct Entry { Score kingSafety[COLOR_NB]; int weakUnopposed[COLOR_NB]; int castlingRights[COLOR_NB]; - int semiopenFiles[COLOR_NB]; int pawnsOnSquares[COLOR_NB][COLOR_NB]; // [color][light/dark squares] int passedCount; }; diff --git a/src/position.h b/src/position.h index 03c00148..1351d0d1 100644 --- a/src/position.h +++ b/src/position.h @@ -95,6 +95,7 @@ public: template int count() const; template const Square* squares(Color c) const; template Square square(Color c) const; + int semiopen_file(Color c, File f) const; // Castling int castling_rights(Color c) const; @@ -260,6 +261,10 @@ inline Square Position::ep_square() const { return st->epSquare; } +inline int Position::semiopen_file(Color c, File f) const { + return !(pieces(c, PAWN) & file_bb(f)); +} + inline bool Position::can_castle(CastlingRight cr) const { return st->castlingRights & cr; }