]> git.sesse.net Git - stockfish/blobdiff - src/evaluate.cpp
Passed pawns evaluation tweak
[stockfish] / src / evaluate.cpp
index 1d4be67b2d0e7c3d4c5405c64ea6ebda36444aa2..372313b778e688a7333f5fc6815c85c5ff44e8dc 100644 (file)
@@ -494,8 +494,8 @@ void init_eval(int threads) {
 
   for (Bitboard b = 0ULL; b < 256ULL; b++)
   {
-      assert(count_1s<false>(b) == int(uint8_t(count_1s<false>(b))));
-      BitCount8Bit[b] = (uint8_t)count_1s<false>(b);
+      assert(count_1s(b) == int(uint8_t(count_1s(b))));
+      BitCount8Bit[b] = (uint8_t)count_1s(b);
   }
 }
 
@@ -757,7 +757,7 @@ namespace {
       // quality of the pawn shelter.
       int attackUnits =
             Min((ei.kingAttackersCount[them] * ei.kingAttackersWeight[them]) / 2, 25)
-          + (ei.kingAdjacentZoneAttacksCount[them] + count_1s_max_15<false>(undefended)) * 3
+          + (ei.kingAdjacentZoneAttacksCount[them] + count_1s_max_15(undefended)) * 3
           + InitKingDanger[relative_square(us, s)] - (shelter >> 5);
 
       // Analyse safe queen contact checks
@@ -773,7 +773,7 @@ namespace {
         {
           // The bitboard b now contains the squares available for safe queen
           // contact checks.
-          int count = count_1s_max_15<false>(b);
+          int count = count_1s_max_15(b);
           attackUnits += QueenContactCheckBonus * count * (sente ? 2 : 1);
 
           // Is there a mate threat?
@@ -813,12 +813,12 @@ namespace {
           // Queen checks
           b2 = b & ei.attacked_by(them, QUEEN);
           if( b2)
-              attackUnits += QueenCheckBonus * count_1s_max_15<false>(b2);
+              attackUnits += QueenCheckBonus * count_1s_max_15(b2);
 
           // Rook checks
           b2 = b & ei.attacked_by(them, ROOK);
           if (b2)
-              attackUnits += RookCheckBonus * count_1s_max_15<false>(b2);
+              attackUnits += RookCheckBonus * count_1s_max_15(b2);
       }
       if (QueenCheckBonus > 0 || BishopCheckBonus > 0)
       {
@@ -827,12 +827,12 @@ namespace {
           // Queen checks
           b2 = b & ei.attacked_by(them, QUEEN);
           if (b2)
-              attackUnits += QueenCheckBonus * count_1s_max_15<false>(b2);
+              attackUnits += QueenCheckBonus * count_1s_max_15(b2);
 
           // Bishop checks
           b2 = b & ei.attacked_by(them, BISHOP);
           if (b2)
-              attackUnits += BishopCheckBonus * count_1s_max_15<false>(b2);
+              attackUnits += BishopCheckBonus * count_1s_max_15(b2);
       }
       if (KnightCheckBonus > 0)
       {
@@ -841,7 +841,7 @@ namespace {
           // Knight checks
           b2 = b & ei.attacked_by(them, KNIGHT);
           if (b2)
-              attackUnits += KnightCheckBonus * count_1s_max_15<false>(b2);
+              attackUnits += KnightCheckBonus * count_1s_max_15(b2);
       }
 
       // Analyse discovered checks (only for non-pawns right now, consider
@@ -850,7 +850,7 @@ namespace {
       {
         b = p.discovered_check_candidates(them) & ~p.pawns();
         if (b)
-          attackUnits += DiscoveredCheckBonus * count_1s_max_15<false>(b) * (sente? 2 : 1);
+          attackUnits += DiscoveredCheckBonus * count_1s_max_15(b) * (sente? 2 : 1);
       }
 
       // Has a mate threat been found?  We don't do anything here if the
@@ -933,29 +933,23 @@ namespace {
                         && (squares_behind(us, s) & pos.rooks_and_queens(them)))
                         b3 = b2;
 
-                    if ((b2 & pos.pieces_of_color(them)) == EmptyBoardBB)
-                    {
-                        // There are no enemy pieces in the pawn's path! Are any of the
-                        // squares in the pawn's path attacked by the enemy?
-                        if (b3 == EmptyBoardBB)
-                            // No enemy attacks, huge bonus!
-                            ebonus += Value(tr * (b2 == b4 ? 17 : 15));
-                        else
-                            // OK, there are enemy attacks. Are those squares which are
-                            // attacked by the enemy also attacked by us?  If yes, big bonus
-                            // (but smaller than when there are no enemy attacks), if no,
-                            // somewhat smaller bonus.
-                            ebonus += Value(tr * ((b3 & b4) == b3 ? 13 : 8));
-                    }
+                    // Squares attacked or occupied by enemy pieces
+                    b3 |= (b2 & pos.pieces_of_color(them));
+
+                    // There are no enemy pawns in the pawn's path
+                    assert((b2 & pos.pieces_of_color_and_type(them, PAWN)) == EmptyBoardBB);
+
+                    // Are any of the squares in the pawn's path attacked or occupied by the enemy?
+                    if (b3 == EmptyBoardBB)
+                        // No enemy attacks or pieces, huge bonus!
+                        ebonus += Value(tr * (b2 == b4 ? 17 : 15));
                     else
-                    {
-                        // There are some enemy pieces in the pawn's path. While this is
-                        // sad, we still assign a moderate bonus if all squares in the path
-                        // which are either occupied by or attacked by enemy pieces are
-                        // also attacked by us.
-                        if (((b3 | (b2 & pos.pieces_of_color(them))) & ~b4) == EmptyBoardBB)
-                            ebonus += Value(tr * 6);
-                    }
+                        // OK, there are enemy attacks or pieces (but not pawns). Are those
+                        // squares which are attacked by the enemy also attacked by us?
+                        // If yes, big bonus (but smaller than when there are no enemy attacks),
+                        // if no, somewhat smaller bonus.
+                        ebonus += Value(tr * ((b3 & b4) == b3 ? 13 : 8));
+
                     // At last, add a small bonus when there are no *friendly* pieces
                     // in the pawn's path.
                     if ((b2 & pos.pieces_of_color(us)) == EmptyBoardBB)
@@ -985,7 +979,7 @@ namespace {
                 if (d < 0)
                 {
                     int mtg = RANK_8 - relative_rank(us, s);
-                    int blockerCount = count_1s_max_15<false>(squares_in_front_of(us,s) & pos.occupied_squares());
+                    int blockerCount = count_1s_max_15(squares_in_front_of(us,s) & pos.occupied_squares());
                     mtg += blockerCount;
                     d += blockerCount;
                     if (d < 0)
@@ -1146,8 +1140,8 @@ namespace {
         behindFriendlyPawns |= (behindFriendlyPawns << 16);
     }
 
-    int space =  count_1s_max_15<false>(safeSquares)
-               + count_1s_max_15<false>(behindFriendlyPawns & safeSquares);
+    int space =  count_1s_max_15(safeSquares)
+               + count_1s_max_15(behindFriendlyPawns & safeSquares);
 
     ei.mgValue += Sign[us] * apply_weight(Value(space * ei.mi->space_weight()), WeightSpace);
   }