X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=563e707ffe48df1c01d0e65dd5b4cbb7fb03e2f9;hp=0194079b3724a6ba07d98ec5f56d318f8b7dd8aa;hb=078625e33389536addc9f94b7fc197230ef2f0fb;hpb=63500274db9beb08c726c27c45f19a22601a0743 diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 0194079b..563e707f 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -438,7 +438,7 @@ namespace { { // ...and then remove squares not supported by another enemy piece b &= ( ei.attackedBy[Them][PAWN] | ei.attackedBy[Them][KNIGHT] - | ei.attackedBy[Them][BISHOP] | ei.attackedBy[Them][QUEEN]); + | ei.attackedBy[Them][BISHOP]); if (b) attackUnits += RookContactCheck * popcount(b); @@ -498,24 +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)); - if(b) + // Non-pawn enemies attacked by a pawn + weak = (pos.pieces(Them) ^ pos.pieces(Them, PAWN)) & ei.attackedBy[Us][PAWN]; + + 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; - // Unsafe pawn threats - if(unsafe_pawn_threats) - score += ThreatenedByHangingPawn; + b = pos.pieces(Us, PAWN) & ( ~ei.attackedBy[Them][ALL_PIECES] + | ei.attackedBy[Us][ALL_PIECES]); + + safeThreats = (shift_bb(b) | shift_bb(b)) & weak; - // Evaluate safe pawn threats - while(safe_pawn_threats) - score += ThreatenedByPawn[type_of(pos.piece_on(pop_lsb(&safe_pawn_threats)))]; + if (weak ^ safeThreats) + score += ThreatenedByHangingPawn; + while (safeThreats) + score += ThreatenedByPawn[type_of(pos.piece_on(pop_lsb(&safeThreats)))]; } // Non-pawn enemies defended by a pawn