X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=29f573851186dda19a072f32127bc3418ec125a1;hp=829e1bbef9bb3155048e72d65e424b8ba7c2eb87;hb=3185c36a6554390d9061f1d74eb16a6c39caefb4;hpb=fbdabe2975c0e86a04b01c36c9f3eec5494ecf0d diff --git a/src/search.cpp b/src/search.cpp index 829e1bbe..29f57385 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -393,7 +393,7 @@ bool think(Position& pos, const SearchLimits& limits, Move searchMoves[]) { NodesSincePoll = 0; current_search_time(get_system_time()); Limits = limits; - TimeMgr.init(Limits, pos.startpos_ply_counter()); + TimeMgr.init(Limits, pos.game_ply()); // Set output steram in normal or chess960 mode cout << set960(pos.is_chess960()); @@ -633,12 +633,6 @@ namespace { // Check for some early stop condition if (!StopRequest && Limits.useTimeManagement()) { - // Stop search early when the last two iterations returned a mate score - if ( depth >= 5 - && abs(bestValues[depth]) >= VALUE_MATE_IN_PLY_MAX - && abs(bestValues[depth - 1]) >= VALUE_MATE_IN_PLY_MAX) - StopRequest = true; - // Stop search early if one move seems to be much better than the // others or if there is only a single legal move. Also in the latter // case we search up to some depth anyway to get a proper score. @@ -1549,6 +1543,7 @@ split_point_start: // At split points actual search starts from here Square f1, t1, f2, t2; Piece p1, p2; + Square ksq; assert(m1 && move_is_ok(m1)); assert(m2 && move_is_ok(m2)); @@ -1577,16 +1572,13 @@ split_point_start: // At split points actual search starts from here return true; // Case 5: Discovered check, checking piece is the piece moved in m1 + ksq = pos.king_square(pos.side_to_move()); if ( piece_is_slider(p1) - && bit_is_set(squares_between(t1, pos.king_square(pos.side_to_move())), f2) - && !bit_is_set(squares_between(t1, pos.king_square(pos.side_to_move())), t2)) + && bit_is_set(squares_between(t1, ksq), f2)) { - // discovered_check_candidates() works also if the Position's side to - // move is the opposite of the checking piece. - Color them = opposite_color(pos.side_to_move()); - Bitboard dcCandidates = pos.discovered_check_candidates(them); - - if (bit_is_set(dcCandidates, f2)) + Bitboard occ = pos.occupied_squares(); + clear_bit(&occ, f2); + if (bit_is_set(pos.attacks_from(p1, t1, occ), ksq)) return true; } return false; @@ -2025,7 +2017,7 @@ split_point_start: // At split points actual search starts from here while ( (tte = TT.probe(pos.get_key())) != NULL && tte->move() != MOVE_NONE && pos.move_is_pl(tte->move()) - && pos.pl_move_is_legal(tte->move(), pos.pinned_pieces(pos.side_to_move())) + && pos.pl_move_is_legal(tte->move(), pos.pinned_pieces()) && ply < PLY_MAX && (!pos.is_draw() || ply < 2)) {