]> git.sesse.net Git - stockfish/blobdiff - src/syzygy/tbprobe.cpp
Reorder evaluation start
[stockfish] / src / syzygy / tbprobe.cpp
index 14d34e79b097af0ac406d822f5dbe1006e245ff3..0281ccc8684d9c158f07d47b49845dddb78b2729 100644 (file)
@@ -22,7 +22,7 @@
 #include "tbcore.cpp"
 
 namespace Zobrist {
-  extern Key psq[COLOR_NB][PIECE_TYPE_NB][SQUARE_NB];
+  extern Key psq[PIECE_NB][SQUARE_NB];
 }
 
 int Tablebases::MaxCardinality = 0;
@@ -60,11 +60,11 @@ static uint64 calc_key(Position& pos, int mirror)
   color = !mirror ? WHITE : BLACK;
   for (pt = PAWN; pt <= KING; ++pt)
     for (i = popcount(pos.pieces(color, pt)); i > 0; i--)
-      key ^= Zobrist::psq[WHITE][pt][i - 1];
+      key ^= Zobrist::psq[make_piece(WHITE, pt)][i - 1];
   color = ~color;
   for (pt = PAWN; pt <= KING; ++pt)
     for (i = popcount(pos.pieces(color, pt)); i > 0; i--)
-      key ^= Zobrist::psq[BLACK][pt][i - 1];
+      key ^= Zobrist::psq[make_piece(BLACK, pt)][i - 1];
 
   return key;
 }
@@ -83,11 +83,11 @@ static uint64 calc_key_from_pcs(int *pcs, int mirror)
   color = !mirror ? 0 : 8;
   for (pt = PAWN; pt <= KING; ++pt)
     for (i = 0; i < pcs[color + pt]; i++)
-      key ^= Zobrist::psq[WHITE][pt][i];
+      key ^= Zobrist::psq[make_piece(WHITE, pt)][i];
   color ^= 8;
   for (pt = PAWN; pt <= KING; ++pt)
     for (i = 0; i < pcs[color + pt]; i++)
-      key ^= Zobrist::psq[BLACK][pt][i];
+      key ^= Zobrist::psq[make_piece(BLACK, pt)][i];
 
   return key;
 }
@@ -123,7 +123,7 @@ static int probe_wdl_table(Position& pos, int *success)
   key = pos.material_key();
 
   // Test for KvK.
-  if (key == (Zobrist::psq[WHITE][KING][0] ^ Zobrist::psq[BLACK][KING][0]))
+  if (key == (Zobrist::psq[W_KING][0] ^ Zobrist::psq[B_KING][0]))
     return 0;
 
   ptr2 = TB_hash[key >> (64 - TBHASHBITS)];
@@ -361,14 +361,12 @@ static int probe_ab(Position& pos, int alpha, int beta, int *success)
   } else
     end = generate<EVASIONS>(pos, stack);
 
-  CheckInfo ci(pos);
-
   for (moves = stack; moves < end; moves++) {
     Move capture = moves->move;
     if (!pos.capture(capture) || type_of(capture) == ENPASSANT
-                        || !pos.legal(capture, ci.pinned))
+                        || !pos.legal(capture))
       continue;
-    pos.do_move(capture, st, pos.gives_check(capture, ci));
+    pos.do_move(capture, st, pos.gives_check(capture));
     v = -probe_ab(pos, -beta, -alpha, success);
     pos.undo_move(capture);
     if (*success == 0) return 0;
@@ -424,14 +422,12 @@ int Tablebases::probe_wdl(Position& pos, int *success)
   else
     end = generate<EVASIONS>(pos, stack);
 
-  CheckInfo ci(pos);
-
   for (moves = stack; moves < end; moves++) {
     Move capture = moves->move;
     if (type_of(capture) != ENPASSANT
-          || !pos.legal(capture, ci.pinned))
+          || !pos.legal(capture))
       continue;
-    pos.do_move(capture, st, pos.gives_check(capture, ci));
+    pos.do_move(capture, st, pos.gives_check(capture));
     int v0 = -probe_ab(pos, -2, 2, success);
     pos.undo_move(capture);
     if (*success == 0) return 0;
@@ -444,13 +440,13 @@ int Tablebases::probe_wdl(Position& pos, int *success)
       for (moves = stack; moves < end; moves++) {
         Move capture = moves->move;
         if (type_of(capture) == ENPASSANT) continue;
-        if (pos.legal(capture, ci.pinned)) break;
+        if (pos.legal(capture)) break;
       }
       if (moves == end && !pos.checkers()) {
         end = generate<QUIETS>(pos, end);
         for (; moves < end; moves++) {
           Move move = moves->move;
-          if (pos.legal(move, ci.pinned))
+          if (pos.legal(move))
             break;
         }
       }
@@ -479,7 +475,6 @@ static int probe_dtz_no_ep(Position& pos, int *success)
   ExtMove stack[192];
   ExtMove *moves, *end = NULL;
   StateInfo st;
-  CheckInfo ci(pos);
 
   if (wdl > 0) {
     // Generate at least all legal non-capturing pawn moves
@@ -492,10 +487,10 @@ static int probe_dtz_no_ep(Position& pos, int *success)
     for (moves = stack; moves < end; moves++) {
       Move move = moves->move;
       if (type_of(pos.moved_piece(move)) != PAWN || pos.capture(move)
-                || !pos.legal(move, ci.pinned))
+                || !pos.legal(move))
         continue;
-      pos.do_move(move, st, pos.gives_check(move, ci));
-      int v = -probe_ab(pos, -2, -wdl + 1, success);
+      pos.do_move(move, st, pos.gives_check(move));
+      int v = -Tablebases::probe_wdl(pos, success);
       pos.undo_move(move);
       if (*success == 0) return 0;
       if (v == wdl)
@@ -514,9 +509,9 @@ static int probe_dtz_no_ep(Position& pos, int *success)
     for (moves = stack; moves < end; moves++) {
       Move move = moves->move;
       if (pos.capture(move) || type_of(pos.moved_piece(move)) == PAWN
-                || !pos.legal(move, ci.pinned))
+                || !pos.legal(move))
         continue;
-      pos.do_move(move, st, pos.gives_check(move, ci));
+      pos.do_move(move, st, pos.gives_check(move));
       int v = -Tablebases::probe_dtz(pos, success);
       pos.undo_move(move);
       if (*success == 0) return 0;
@@ -533,9 +528,9 @@ static int probe_dtz_no_ep(Position& pos, int *success)
     for (moves = stack; moves < end; moves++) {
       int v;
       Move move = moves->move;
-      if (!pos.legal(move, ci.pinned))
+      if (!pos.legal(move))
         continue;
-      pos.do_move(move, st, pos.gives_check(move, ci));
+      pos.do_move(move, st, pos.gives_check(move));
       if (st.rule50 == 0) {
         if (wdl == -2) v = -1;
         else {
@@ -604,14 +599,13 @@ int Tablebases::probe_dtz(Position& pos, int *success)
     end = generate<CAPTURES>(pos, stack);
   else
     end = generate<EVASIONS>(pos, stack);
-  CheckInfo ci(pos);
 
   for (moves = stack; moves < end; moves++) {
     Move capture = moves->move;
     if (type_of(capture) != ENPASSANT
-                || !pos.legal(capture, ci.pinned))
+                || !pos.legal(capture))
       continue;
-    pos.do_move(capture, st, pos.gives_check(capture, ci));
+    pos.do_move(capture, st, pos.gives_check(capture));
     int v0 = -probe_ab(pos, -2, 2, success);
     pos.undo_move(capture);
     if (*success == 0) return 0;
@@ -637,13 +631,13 @@ int Tablebases::probe_dtz(Position& pos, int *success)
       for (moves = stack; moves < end; moves++) {
         Move move = moves->move;
         if (type_of(move) == ENPASSANT) continue;
-        if (pos.legal(move, ci.pinned)) break;
+        if (pos.legal(move)) break;
       }
       if (moves == end && !pos.checkers()) {
         end = generate<QUIETS>(pos, end);
         for (; moves < end; moves++) {
           Move move = moves->move;
-          if (pos.legal(move, ci.pinned))
+          if (pos.legal(move))
             break;
         }
       }
@@ -688,7 +682,7 @@ static Value wdl_to_Value[5] = {
 //
 // A return value false indicates that not all probes were successful and that
 // no moves were filtered out.
-bool Tablebases::root_probe(Position& pos, Search::RootMoveVector& rootMoves, Value& score)
+bool Tablebases::root_probe(Position& pos, Search::RootMoves& rootMoves, Value& score)
 {
   int success;
 
@@ -696,12 +690,11 @@ bool Tablebases::root_probe(Position& pos, Search::RootMoveVector& rootMoves, Va
   if (!success) return false;
 
   StateInfo st;
-  CheckInfo ci(pos);
 
   // Probe each move.
   for (size_t i = 0; i < rootMoves.size(); i++) {
     Move move = rootMoves[i].pv[0];
-    pos.do_move(move, st, pos.gives_check(move, ci));
+    pos.do_move(move, st, pos.gives_check(move));
     int v = 0;
     if (pos.checkers() && dtz > 0) {
       ExtMove s[192];
@@ -795,7 +788,7 @@ bool Tablebases::root_probe(Position& pos, Search::RootMoveVector& rootMoves, Va
 //
 // A return value false indicates that not all probes were successful and that
 // no moves were filtered out.
-bool Tablebases::root_probe_wdl(Position& pos, Search::RootMoveVector& rootMoves, Value& score)
+bool Tablebases::root_probe_wdl(Position& pos, Search::RootMoves& rootMoves, Value& score)
 {
   int success;
 
@@ -804,14 +797,13 @@ bool Tablebases::root_probe_wdl(Position& pos, Search::RootMoveVector& rootMoves
   score = wdl_to_Value[wdl + 2];
 
   StateInfo st;
-  CheckInfo ci(pos);
 
   int best = -2;
 
   // Probe each move.
   for (size_t i = 0; i < rootMoves.size(); i++) {
     Move move = rootMoves[i].pv[0];
-    pos.do_move(move, st, pos.gives_check(move, ci));
+    pos.do_move(move, st, pos.gives_check(move));
     int v = -Tablebases::probe_wdl(pos, &success);
     pos.undo_move(move);
     if (!success) return false;