X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsyzygy%2Ftbprobe.cpp;h=17326970a49c55194ddc7e37c3a2946306c87a47;hp=3276be9e8e7a36927eb0eff03efc32bdb1272fd7;hb=f8f5dcbb682830a66a37f68f3c192bbbfc84a33a;hpb=ba1464751d1186f723a2d2a5d18c06ddfc9a4cb3 diff --git a/src/syzygy/tbprobe.cpp b/src/syzygy/tbprobe.cpp index 3276be9e..17326970 100644 --- a/src/syzygy/tbprobe.cpp +++ b/src/syzygy/tbprobe.cpp @@ -7,6 +7,8 @@ this code to other chess engines. */ +#include + #include "../position.h" #include "../movegen.h" #include "../bitboard.h" @@ -144,7 +146,11 @@ static int probe_wdl_table(Position& pos, int *success) return 0; } // Memory barrier to ensure ptr->ready = 1 is not reordered. +#ifdef _MSC_VER + _ReadWriteBarrier(); +#else __asm__ __volatile__ ("" ::: "memory"); +#endif ptr->ready = 1; } UNLOCK(TB_mutex); @@ -361,7 +367,7 @@ static int probe_ab(Position& pos, int alpha, int beta, int *success) if (!pos.capture(capture) || type_of(capture) == ENPASSANT || !pos.legal(capture, ci.pinned)) continue; - pos.do_move(capture, st, ci, pos.gives_check(capture, ci)); + pos.do_move(capture, st, pos.gives_check(capture, ci)); v = -probe_ab(pos, -beta, -alpha, success); pos.undo_move(capture); if (*success == 0) return 0; @@ -424,7 +430,7 @@ int Tablebases::probe_wdl(Position& pos, int *success) if (type_of(capture) != ENPASSANT || !pos.legal(capture, ci.pinned)) continue; - pos.do_move(capture, st, ci, pos.gives_check(capture, ci)); + pos.do_move(capture, st, pos.gives_check(capture, ci)); int v0 = -probe_ab(pos, -2, 2, success); pos.undo_move(capture); if (*success == 0) return 0; @@ -487,7 +493,7 @@ static int probe_dtz_no_ep(Position& pos, int *success) if (type_of(pos.moved_piece(move)) != PAWN || pos.capture(move) || !pos.legal(move, ci.pinned)) continue; - pos.do_move(move, st, ci, pos.gives_check(move, ci)); + pos.do_move(move, st, pos.gives_check(move, ci)); int v = -probe_ab(pos, -2, -wdl + 1, success); pos.undo_move(move); if (*success == 0) return 0; @@ -509,7 +515,7 @@ static int probe_dtz_no_ep(Position& pos, int *success) if (pos.capture(move) || type_of(pos.moved_piece(move)) == PAWN || !pos.legal(move, ci.pinned)) continue; - pos.do_move(move, st, ci, pos.gives_check(move, ci)); + pos.do_move(move, st, pos.gives_check(move, ci)); int v = -Tablebases::probe_dtz(pos, success); pos.undo_move(move); if (*success == 0) return 0; @@ -528,7 +534,7 @@ static int probe_dtz_no_ep(Position& pos, int *success) Move move = moves->move; if (!pos.legal(move, ci.pinned)) continue; - pos.do_move(move, st, ci, pos.gives_check(move, ci)); + pos.do_move(move, st, pos.gives_check(move, ci)); if (st.rule50 == 0) { if (wdl == -2) v = -1; else { @@ -604,7 +610,7 @@ int Tablebases::probe_dtz(Position& pos, int *success) if (type_of(capture) != ENPASSANT || !pos.legal(capture, ci.pinned)) continue; - pos.do_move(capture, st, ci, pos.gives_check(capture, ci)); + pos.do_move(capture, st, pos.gives_check(capture, ci)); int v0 = -probe_ab(pos, -2, 2, success); pos.undo_move(capture); if (*success == 0) return 0; @@ -694,7 +700,7 @@ bool Tablebases::root_probe(Position& pos, Search::RootMoveVector& rootMoves, Va // 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, ci)); int v = 0; if (pos.checkers() && dtz > 0) { ExtMove s[192]; @@ -804,7 +810,7 @@ bool Tablebases::root_probe_wdl(Position& pos, Search::RootMoveVector& rootMoves // 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, ci)); int v = -Tablebases::probe_wdl(pos, &success); pos.undo_move(move); if (!success) return false;