X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fpawns.cpp;h=095126d451964942b26b6a79d5118e606d524b31;hp=e2b26344986ad51d129aafbf9fba91ba8d2857fc;hb=a858b5a84e8702390adee4388034c57570e65fee;hpb=3b46df546dd8b17963abae887acff6e91e2b945e diff --git a/src/pawns.cpp b/src/pawns.cpp index e2b26344..095126d4 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -212,11 +212,15 @@ Score Entry::do_king_safety(const Position& pos) { Square ksq = pos.square(Us); kingSquares[Us] = ksq; castlingRights[Us] = pos.castling_rights(Us); - int minKingPawnDistance = 0; Bitboard pawns = pos.pieces(Us, PAWN); - if (pawns) - while (!(DistanceRingBB[ksq][++minKingPawnDistance] & pawns)) {} + int minPawnDist = pawns ? 8 : 0; + + if (pawns & PseudoAttacks[KING][ksq]) + minPawnDist = 1; + + else while (pawns) + minPawnDist = std::min(minPawnDist, distance(ksq, pop_lsb(&pawns))); Value bonus = evaluate_shelter(pos, ksq); @@ -227,7 +231,7 @@ Score Entry::do_king_safety(const Position& pos) { if (pos.can_castle(Us | QUEEN_SIDE)) bonus = std::max(bonus, evaluate_shelter(pos, relative_square(Us, SQ_C1))); - return make_score(bonus, -16 * minKingPawnDistance); + return make_score(bonus, -16 * minPawnDist); } // Explicit template instantiation