Rewrite "More bonus for free passed pawn"
authorVizvezdenec <Vizvezdenec@gmail.com>
Fri, 21 Jun 2019 08:04:31 +0000 (10:04 +0200)
committerStéphane Nicolet <cassio@free.fr>
Fri, 21 Jun 2019 08:05:50 +0000 (10:05 +0200)
-removes wideUnsafeSquares bitboard
-removes a couple of bitboard operations
-removes one if operator
-updates comments so they actually represent what this part of code is doing now.

passed non-regression STC
http://tests.stockfishchess.org/tests/view/5d0c1ae50ebc5925cf0aa8db
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 16892 W: 3865 L: 3733 D: 9294

No functional change

src/evaluate.cpp

index cf478909649ed0419c172ed9b7bfadebeca4d246..da76de100f00fcd8fb6326506f95356cb204cf86 100644 (file)
@@ -605,7 +605,6 @@ namespace {
     };
 
     Bitboard b, bb, squaresToQueen, defendedSquares, unsafeSquares;
-    Bitboard wideUnsafeSquares;
     Score score = SCORE_ZERO;
 
     b = pe->passed_pawns(Us);
@@ -636,11 +635,8 @@ namespace {
             // If the pawn is free to advance, then increase the bonus
             if (pos.empty(blockSq))
             {
-                // If there is a rook or queen attacking/defending the pawn from behind,
-                // consider all the squaresToQueen. Otherwise consider only the squares
-                // in the pawn's path attacked or occupied by the enemy.
-                defendedSquares = unsafeSquares = squaresToQueen = forward_file_bb(Us, s);
-                wideUnsafeSquares = AllSquares;
+                defendedSquares = squaresToQueen = forward_file_bb(Us, s);
+                unsafeSquares = passed_pawn_span(Us, s);
 
                 bb = forward_file_bb(Them, s) & pos.pieces(ROOK, QUEEN);
 
@@ -649,14 +645,14 @@ namespace {
 
                 if (!(pos.pieces(Them) & bb))
                     unsafeSquares &= attackedBy[Them][ALL_PIECES] | pos.pieces(Them);
-                      
-                if (!unsafeSquares)
-                    wideUnsafeSquares = (attackedBy[Them][ALL_PIECES] | pos.pieces(Them)) 
-                                       & (shift<WEST>(squaresToQueen) | shift<EAST>(squaresToQueen));
-
-                // If there aren't any enemy attacks, assign a big bonus. Otherwise
-                // assign a smaller bonus if the block square isn't attacked.
-                int k = !wideUnsafeSquares ? 35 : !unsafeSquares ? 20 : !(unsafeSquares & blockSq) ? 9 : 0;
+
+                // If there are no enemy attacks on passed pawn span, assign a big bonus.
+                // Otherwise assign a smaller bonus if the path to queen is not attacked
+                // and even smaller bonus if it is attacked but block square is not.
+                int k = !unsafeSquares                    ? 35 :
+                        !(unsafeSquares & squaresToQueen) ? 20 :
+                        !(unsafeSquares & blockSq)        ?  9 :
+                                                             0 ;
 
                 // Assign a larger bonus if the block square is defended.
                 if (defendedSquares & blockSq)