X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=176806976bb4234105d25826a973097537984b4a;hp=c5c63c2b3862701ffdf65ba258d0a407b82c2a5c;hb=4d170725ab0ea2d219ff402495a1c541e7f75d6c;hpb=2f6927ac08887ff3b709cfe9228b27a85bdd1d88 diff --git a/src/position.cpp b/src/position.cpp index c5c63c2b..17680697 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -641,10 +641,10 @@ bool Position::move_is_check(Move m, const CheckInfo& ci) const { } } - // En passant capture with check? We have already handled the case + // En passant capture with check ? We have already handled the case // of direct checks and ordinary discovered check, the only case we - // need to handle is the unusual case of a discovered check through the - // captured pawn. + // need to handle is the unusual case of a discovered check through + // the captured pawn. if (move_is_ep(m)) { Square capsq = make_square(square_file(to), square_rank(from)); @@ -703,7 +703,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI // pointer to point to the new, ready to be updated, state. struct ReducedStateInfo { Key pawnKey, materialKey; - int castleRights, rule50, ply, pliesFromNull; + int castleRights, rule50, gamePly, pliesFromNull; Square epSquare; Score value; Value npMaterial[2]; @@ -715,7 +715,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI // Save the current key to the history[] array, in order to be able to // detect repetition draws. - history[st->ply++] = key; + history[st->gamePly++] = key; // Update side to move key ^= zobSideToMove; @@ -772,7 +772,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI } // Prefetch TT access as soon as we know key is updated - TT.prefetch(key); + prefetch((char*)TT.first_entry(key)); // Move the piece Bitboard move_bb = make_move_bb(from, to); @@ -1243,14 +1243,14 @@ void Position::do_null_move(StateInfo& backupSt) { // Save the current key to the history[] array, in order to be able to // detect repetition draws. - history[st->ply++] = st->key; + history[st->gamePly++] = st->key; // Update the necessary information if (st->epSquare != SQ_NONE) st->key ^= zobEp[st->epSquare]; st->key ^= zobSideToMove; - TT.prefetch(st->key); + prefetch((char*)TT.first_entry(st->key)); sideToMove = opposite_color(sideToMove); st->epSquare = SQ_NONE; @@ -1278,7 +1278,7 @@ void Position::undo_null_move() { // Update the necessary information sideToMove = opposite_color(sideToMove); st->rule50--; - st->ply--; + st->gamePly--; } @@ -1307,11 +1307,11 @@ int Position::see_sign(Move m) const { Square from = move_from(m); Square to = move_to(m); - // Early return if SEE cannot be negative because capturing piece value - // is not bigger then captured one. - if ( midgame_value_of_piece_on(from) <= midgame_value_of_piece_on(to) - && type_of_piece_on(from) != KING) - return 1; + // Early return if SEE cannot be negative because captured piece value + // is not less then capturing one. Note that king moves always return + // here because king midgame value is set to 0. + if (midgame_value_of_piece_on(to) >= midgame_value_of_piece_on(from)) + return 1; return see(from, to); } @@ -1481,15 +1481,15 @@ void Position::clear() { } -/// Position::reset_ply() simply sets ply to 0. It is used from the +/// Position::reset_game_ply() simply sets gamePly to 0. It is used from the /// UCI interface code, whenever a non-reversible move is made in a /// 'position fen moves m1 m2 ...' command. This makes it possible /// for the program to handle games of arbitrary length, as long as the GUI /// handles draws by the 50 move rule correctly. -void Position::reset_ply() { +void Position::reset_game_ply() { - st->ply = 0; + st->gamePly = 0; } @@ -1666,11 +1666,9 @@ bool Position::is_draw() const { if (st->rule50 > 100 || (st->rule50 == 100 && !is_check())) return true; - assert(st->ply >= st->rule50); - // Draw by repetition? - for (int i = 4, e = Min(st->rule50, st->pliesFromNull); i <= e; i += 2) - if (history[st->ply - i] == st->key) + for (int i = 4, e = Min(Min(st->gamePly, st->rule50), st->pliesFromNull); i <= e; i += 2) + if (history[st->gamePly - i] == st->key) return true; return false;