]> git.sesse.net Git - stockfish/commitdiff
Sync with master
authorMarco Costalba <mcostalba@gmail.com>
Thu, 26 Feb 2015 19:49:41 +0000 (20:49 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 26 Feb 2015 19:50:39 +0000 (20:50 +0100)
bench: 8069601

1  2 
src/pawns.cpp

diff --combined src/pawns.cpp
index e4c0899ff6d769a9994ab32b6c54ada41f3a3192,e582692e3251c38bd7df3cbf3404aa0a8c5841c3..1ae1b17fb1554d110b345c92633c7d6f87edf3b4
@@@ -50,8 -50,8 +50,8 @@@ namespace 
    { S(20, 28), S(29, 31), S(33, 31), S(33, 31),
      S(33, 31), S(33, 31), S(29, 31), S(20, 28) } };
  
-   // Connected pawn bonus by opposed, phalanx flags and rank
-   Score Connected[2][2][RANK_NB];
+   // Connected pawn bonus by opposed, phalanx, twice supported and rank
+   Score Connected[2][2][2][RANK_NB];
  
    // Levers bonus by rank
    const Score Lever[RANK_NB] = {
      const Square Right = (Us == WHITE ? DELTA_NE : DELTA_SW);
      const Square Left  = (Us == WHITE ? DELTA_NW : DELTA_SE);
  
-     Bitboard b, p, doubled, connected;
+     Bitboard b, p, doubled, connected, supported;
      Square s;
-     bool passed, isolated, opposed, phalanx, backward, unsupported, lever;
+     bool passed, isolated, opposed, phalanx, backward, lever;
      Score score = SCORE_ZERO;
      const Square* pl = pos.list<PAWN>(Us);
      const Bitboard* pawnAttacksBB = StepAttacksBB[make_piece(Us, PAWN)];
          // Flag the pawn
          connected   =   ourPawns   & adjacent_files_bb(f) & (rank_bb(s) | p);
          phalanx     =   connected  & rank_bb(s);
-         unsupported = !(connected  & p);
+         supported   =   connected  & p;
          isolated    = !(ourPawns   & adjacent_files_bb(f));
          doubled     =   ourPawns   & forward_bb(Us, s);
          opposed     =   theirPawns & forward_bb(Us, s);
          lever       =   theirPawns & pawnAttacksBB[s];
  
          // Test for backward pawn.
 -        // If the pawn is passed, isolated, connected or a lever it cannot be
 +        // If the pawn is passed, isolated, lever or connected it cannot be
          // backward. If there are friendly pawns behind on adjacent files
          // it cannot be backward either.
          if (   (passed | isolated | lever | connected)
          if (isolated)
              score -= Isolated[opposed][f];
  
-         if (unsupported && !isolated)
+         if (!supported && !isolated)
              score -= UnsupportedPawnPenalty;
  
          if (doubled)
              score -= Backward[opposed][f];
  
          if (connected)
-             score += Connected[opposed][phalanx][relative_rank(Us, s)];
+             score += Connected[opposed][phalanx][more_than_one(supported)][relative_rank(Us, s)];
  
          if (lever)
              score += Lever[relative_rank(Us, s)];
@@@ -223,11 -223,13 +223,13 @@@ void init(
  
    for (int opposed = 0; opposed <= 1; ++opposed)
        for (int phalanx = 0; phalanx <= 1; ++phalanx)
-           for (Rank r = RANK_2; r < RANK_8; ++r)
-           {
-               int v = (Seed[r] + (phalanx ? (Seed[r + 1] - Seed[r]) / 2 : 0)) >> opposed;
-               Connected[opposed][phalanx][r] = make_score( 3 * v / 2, v);
-           }
+           for (int apex = 0; apex <= 1; ++apex)
+               for (Rank r = RANK_2; r < RANK_8; ++r)
+   {
+       int v = (Seed[r] + (phalanx ? (Seed[r + 1] - Seed[r]) / 2 : 0)) >> opposed;
+       v += (apex ? v / 2 : 0);
+       Connected[opposed][phalanx][apex][r] = make_score(3 * v / 2, v);
+   }
  }