X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsyzygy%2Ftbprobe.cpp;h=6f6627ab08b8fa74d6235c038dce4b1014dc47c0;hp=126fe91cf779b1d5ff0cd32dd97c1de79bf3a955;hb=805afcbf3d5db39c85b759232cfb99ab0a250311;hpb=0af24a14455bbcde181fff7632722ce55419991e diff --git a/src/syzygy/tbprobe.cpp b/src/syzygy/tbprobe.cpp index 126fe91c..6f6627ab 100644 --- a/src/syzygy/tbprobe.cpp +++ b/src/syzygy/tbprobe.cpp @@ -15,7 +15,6 @@ #include "../movegen.h" #include "../bitboard.h" #include "../search.h" -#include "../bitcount.h" #include "tbprobe.h" #include "tbcore.h" @@ -39,12 +38,12 @@ static void prt_str(Position& pos, char *str, int mirror) color = !mirror ? WHITE : BLACK; for (pt = KING; pt >= PAWN; --pt) - for (i = popcount(pos.pieces(color, pt)); i > 0; i--) + for (i = popcount(pos.pieces(color, pt)); i > 0; i--) *str++ = pchr[6 - pt]; *str++ = 'v'; color = ~color; for (pt = KING; pt >= PAWN; --pt) - for (i = popcount(pos.pieces(color, pt)); i > 0; i--) + for (i = popcount(pos.pieces(color, pt)); i > 0; i--) *str++ = pchr[6 - pt]; *str++ = 0; } @@ -60,11 +59,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--) + for (i = popcount(pos.pieces(color, pt)); i > 0; i--) key ^= Zobrist::psq[WHITE][pt][i - 1]; color = ~color; for (pt = PAWN; pt <= KING; ++pt) - for (i = popcount(pos.pieces(color, pt)); i > 0; i--) + for (i = popcount(pos.pieces(color, pt)); i > 0; i--) key ^= Zobrist::psq[BLACK][pt][i - 1]; return key; @@ -362,14 +361,12 @@ static int probe_ab(Position& pos, int alpha, int beta, int *success) } else end = generate(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, ci, 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; @@ -425,14 +422,12 @@ int Tablebases::probe_wdl(Position& pos, int *success) else end = generate(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, ci, 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; @@ -445,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(pos, end); for (; moves < end; moves++) { Move move = moves->move; - if (pos.legal(move, ci.pinned)) + if (pos.legal(move)) break; } } @@ -480,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 @@ -493,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, ci, 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) @@ -515,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, ci, 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; @@ -534,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, ci, pos.gives_check(move, ci)); + pos.do_move(move, st, pos.gives_check(move)); if (st.rule50 == 0) { if (wdl == -2) v = -1; else { @@ -605,14 +599,13 @@ int Tablebases::probe_dtz(Position& pos, int *success) end = generate(pos, stack); else end = generate(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, ci, 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; @@ -624,7 +617,7 @@ int Tablebases::probe_dtz(Position& pos, int *success) if (v1 >= 0) v = v1; } else if (v < 0) { - if (v1 >= 0 || v1 < 100) + if (v1 >= 0 || v1 < -100) v = v1; } else if (v > 100) { if (v1 > 0) @@ -638,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(pos, end); for (; moves < end; moves++) { Move move = moves->move; - if (pos.legal(move, ci.pinned)) + if (pos.legal(move)) break; } } @@ -689,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; @@ -697,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, ci, 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]; @@ -796,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; @@ -805,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, ci, 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;