X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsyzygy%2Ftbprobe.cpp;h=0281ccc8684d9c158f07d47b49845dddb78b2729;hp=14d34e79b097af0ac406d822f5dbe1006e245ff3;hb=4c95edddbf1aaec22c343adaca4796df0137e4c3;hpb=8fb45caadef67fb2ccc27857c15ade987d9f5e2f diff --git a/src/syzygy/tbprobe.cpp b/src/syzygy/tbprobe.cpp index 14d34e79..0281ccc8 100644 --- a/src/syzygy/tbprobe.cpp +++ b/src/syzygy/tbprobe.cpp @@ -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(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(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(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(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, 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(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;