X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=b50792da85a05ae5ad85f3557543cb01bbfc69d6;hp=f5eece7dc0725f8c72f8c91ec75838ba4e7788d7;hb=6c4257520847f7bb0f4008dedb65159cbacce106;hpb=61a6e4666400b1855394e342f3a5c5fe125f4f1f diff --git a/src/evaluate.cpp b/src/evaluate.cpp index f5eece7d..b50792da 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -498,25 +498,24 @@ namespace { enum { Defended, Weak }; enum { Minor, Major }; - Bitboard b, weak, defended, safe_pawns, safe_pawn_threats, unsafe_pawn_threats; + Bitboard b, weak, defended, safeThreats; Score score = SCORE_ZERO; - // Pawn Threats - b = ei.attackedBy[Us][PAWN] & (pos.pieces(Them) ^ pos.pieces(Them, PAWN)); + // Non-pawn enemies attacked by a pawn + weak = (pos.pieces(Them) ^ pos.pieces(Them, PAWN)) & ei.attackedBy[Us][PAWN]; - if (b) + if (weak) { - safe_pawns = pos.pieces(Us, PAWN) & (~ei.attackedBy[Them][ALL_PIECES] | ei.attackedBy[Us][ALL_PIECES]); - safe_pawn_threats = (shift_bb(safe_pawns) | shift_bb(safe_pawns)) & (pos.pieces(Them) ^ pos.pieces(Them, PAWN)); - unsafe_pawn_threats = b ^ safe_pawn_threats; + b = pos.pieces(Us, PAWN) & ( ~ei.attackedBy[Them][ALL_PIECES] + | ei.attackedBy[Us][ALL_PIECES]); + + safeThreats = (shift_bb(b) | shift_bb(b)) & weak; - // Unsafe pawn threats - if (unsafe_pawn_threats) + if (weak ^ safeThreats) score += ThreatenedByHangingPawn; - // Evaluate safe pawn threats - while (safe_pawn_threats) - score += ThreatenedByPawn[type_of(pos.piece_on(pop_lsb(&safe_pawn_threats)))]; + while (safeThreats) + score += ThreatenedByPawn[type_of(pos.piece_on(pop_lsb(&safeThreats)))]; } // Non-pawn enemies defended by a pawn