]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Revert F_90 and F_92
[stockfish] / src / search.cpp
index 6f9c8b2bdd14f8e7736288b06f532c3fc934c731..978f6622d3f142a178cf2c92a59ea07bdb9d76bd 100644 (file)
@@ -199,7 +199,7 @@ namespace {
   Depth PassedPawnExtension[2], PawnEndgameExtension[2], MateThreatExtension[2];
 
   // Minimum depth for use of singular extension
-  const Depth SingularExtensionDepth[2] = { 7 * OnePly /* non-PV */, 6 * OnePly /* PV */};
+  const Depth SingularExtensionDepth[2] = { 8 * OnePly /* non-PV */, 6 * OnePly /* PV */};
 
   // If the TT move is at least SingularExtensionMargin better then the
   // remaining ones we will extend it.
@@ -366,26 +366,27 @@ void init_search() {
 
 int perft(Position& pos, Depth depth)
 {
+    MoveStack mlist[256];
     StateInfo st;
-    Move move;
+    Move m;
     int sum = 0;
-    MovePicker mp(pos, MOVE_NONE, depth, H);
+
+    // Generate all legal moves
+    MoveStack* last = generate_moves(pos, mlist);
 
     // If we are at the last ply we don't need to do and undo
     // the moves, just to count them.
-    if (depth <= OnePly) // Replace with '<' to test also qsearch
-    {
-        while (mp.get_next_move()) sum++;
-        return sum;
-    }
+    if (depth <= OnePly)
+        return int(last - mlist);
 
     // Loop through all legal moves
     CheckInfo ci(pos);
-    while ((move = mp.get_next_move()) != MOVE_NONE)
+    for (MoveStack* cur = mlist; cur != last; cur++)
     {
-        pos.do_move(move, st, ci, pos.move_is_check(move, ci));
+        m = cur->move;
+        pos.do_move(m, st, ci, pos.move_is_check(m, ci));
         sum += perft(pos, depth - OnePly);
-        pos.undo_move(move);
+        pos.undo_move(m);
     }
     return sum;
 }
@@ -714,6 +715,7 @@ namespace {
     alpha = *alphaPtr;
     beta = *betaPtr;
     isCheck = pos.is_check();
+    depth = (Iteration - 2) * OnePly + InitialDepth;
 
     // Step 1. Initialize node (polling is omitted at root)
     ss->currentMove = ss->bestMove = MOVE_NONE;
@@ -763,7 +765,6 @@ namespace {
             captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
             // Step 11. Decide the new search depth
-            depth = (Iteration - 2) * OnePly + InitialDepth;
             ext = extension<PV>(pos, move, captureOrPromotion, moveIsCheck, false, false, &dangerous);
             newDepth = depth + ext;
 
@@ -969,7 +970,7 @@ namespace {
     Move movesSearched[256];
     EvalInfo ei;
     StateInfo st;
-    const TTEntry *tte, *ttx;
+    const TTEntry *tte;
     Key posKey;
     Move ttMove, move, excludedMove, threatMove;
     Depth ext, newDepth;
@@ -1167,7 +1168,7 @@ namespace {
 
     // Expensive mate threat detection (only for PV nodes)
     if (PvNode)
-        mateThreat = pos.has_mate_threat(opposite_color(pos.side_to_move()));
+        mateThreat = pos.has_mate_threat();
 
     // Initialize a MovePicker object for the current position
     MovePicker mp = MovePicker(pos, ttMove, depth, H, ss, (PvNode ? -VALUE_INFINITE : beta));
@@ -1206,22 +1207,9 @@ namespace {
           && move == tte->move()
           && ext < OnePly)
       {
-          // Avoid to do an expensive singular extension search on nodes where
-          // such search have already been done in the past, so assume the last
-          // singular extension search result is still valid.
-          if (  !PvNode
-              && depth < SingularExtensionDepth[PvNode] + 5 * OnePly
-              && (ttx = TT.retrieve(pos.get_exclusion_key())) != NULL)
-          {
-              if (is_upper_bound(ttx->type()))
-                  ext = OnePly;
-
-              singularExtensionNode = false;
-          }
-
           Value ttValue = value_from_tt(tte->value(), ply);
 
-          if (singularExtensionNode && abs(ttValue) < VALUE_KNOWN_WIN)
+          if (abs(ttValue) < VALUE_KNOWN_WIN)
           {
               Value b = ttValue - SingularExtensionMargin;
               ss->excludedMove = move;
@@ -2034,7 +2022,7 @@ namespace {
     if (   m != MOVE_NULL
         && before != VALUE_NONE
         && after != VALUE_NONE
-        && pos.captured_piece() == NO_PIECE_TYPE
+        && pos.captured_piece_type() == PIECE_TYPE_NONE
         && !move_is_special(m))
         H.set_gain(pos.piece_on(move_to(m)), move_to(m), -(before + after));
   }