X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmovepick.cpp;h=c90f8df1e6d398e2cf7f7ab3a4ae63be7c4f3dc1;hp=bff6ac46f0e029fa3c7ba80cde72e8873877ed45;hb=0a0ea36e25b2f6fff8859e02027c5842edeccc03;hpb=c97104e8540b72ee2c6c9c13d3773d2c0f9ec32f diff --git a/src/movepick.cpp b/src/movepick.cpp index bff6ac46..c90f8df1 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -130,7 +130,7 @@ Move MovePicker::get_next_move() { if (ttMove != MOVE_NONE) { assert(move_is_ok(ttMove)); - if (move_is_legal(pos, ttMove, pinned)) + if (move_is_legal(pos, ttMove)) return ttMove; } break; @@ -139,7 +139,7 @@ Move MovePicker::get_next_move() { if (mateKiller != MOVE_NONE) { assert(move_is_ok(mateKiller)); - if (move_is_legal(pos, mateKiller, pinned)) + if (move_is_legal(pos, mateKiller)) return mateKiller; } break; @@ -151,7 +151,7 @@ Move MovePicker::get_next_move() { break; case PH_BAD_CAPTURES: - badCapturesPicked = 0; + movesPicked = 0; break; case PH_NONCAPTURES: @@ -174,7 +174,7 @@ Move MovePicker::get_next_move() { break; case PH_QCHECKS: - numOfMoves = generate_checks(pos, moves, dc); + numOfMoves = generate_checks(pos, moves); movesPicked = 0; break; @@ -318,9 +318,11 @@ void MovePicker::score_qcaptures() { int MovePicker::find_best_index() { - int bestScore = -10000000, bestIndex = -1; + assert(movesPicked < numOfMoves); - for (int i = movesPicked; i < numOfMoves; i++) + int bestIndex = movesPicked, bestScore = moves[movesPicked].score; + + for (int i = movesPicked + 1; i < numOfMoves; i++) if (moves[i].score > bestScore) { bestIndex = i; @@ -331,6 +333,8 @@ int MovePicker::find_best_index() { int MovePicker::find_best_index(Bitboard* squares, int values[]) { + assert(movesPicked < numOfMoves); + int hs; Move m; Square to; @@ -378,6 +382,7 @@ Move MovePicker::pick_move_from_list() { Move move; switch (PhaseTable[phaseIndex]) { + case PH_GOOD_CAPTURES: assert(!pos.is_check()); assert(movesPicked >= 0); @@ -385,16 +390,12 @@ Move MovePicker::pick_move_from_list() { while (movesPicked < numOfMoves) { bestIndex = find_best_index(); - - if (bestIndex != -1) // Found a good capture - { - move = moves[bestIndex].move; - moves[bestIndex] = moves[movesPicked++]; - if ( move != ttMove - && move != mateKiller - && pos.pl_move_is_legal(move, pinned)) - return move; - } + move = moves[bestIndex].move; + moves[bestIndex] = moves[movesPicked++]; + if ( move != ttMove + && move != mateKiller + && pos.pl_move_is_legal(move, pinned)) + return move; } break; @@ -409,16 +410,12 @@ Move MovePicker::pick_move_from_list() { // been searched and it is not a PV node, we are probably failing low // anyway, so we just pick the first move from the list. bestIndex = (pvNode || movesPicked < 12) ? find_best_index() : movesPicked; - - if (bestIndex != -1) - { - move = moves[bestIndex].move; - moves[bestIndex] = moves[movesPicked++]; - if ( move != ttMove - && move != mateKiller - && pos.pl_move_is_legal(move, pinned)) - return move; - } + move = moves[bestIndex].move; + moves[bestIndex] = moves[movesPicked++]; + if ( move != ttMove + && move != mateKiller + && pos.pl_move_is_legal(move, pinned)) + return move; } break; @@ -429,24 +426,20 @@ Move MovePicker::pick_move_from_list() { while (movesPicked < numOfMoves) { bestIndex = find_best_index(); - - if (bestIndex != -1) - { - move = moves[bestIndex].move; - moves[bestIndex] = moves[movesPicked++]; - return move; - } + move = moves[bestIndex].move; + moves[bestIndex] = moves[movesPicked++]; + return move; } break; case PH_BAD_CAPTURES: assert(!pos.is_check()); - assert(badCapturesPicked >= 0); + assert(movesPicked >= 0); // It's probably a good idea to use SEE move ordering here, instead // of just picking the first move. FIXME - while (badCapturesPicked < numOfBadCaptures) + while (movesPicked < numOfBadCaptures) { - move = badCaptures[badCapturesPicked++].move; + move = badCaptures[movesPicked++].move; if ( move != ttMove && move != mateKiller && pos.pl_move_is_legal(move, pinned)) @@ -460,16 +453,12 @@ Move MovePicker::pick_move_from_list() { while (movesPicked < numOfMoves) { bestIndex = (movesPicked < 4 ? find_best_index() : movesPicked); - - if (bestIndex != -1) - { - move = moves[bestIndex].move; - moves[bestIndex] = moves[movesPicked++]; - // Remember to change the line below if we decide to hash the qsearch! - // Maybe also postpone the legality check until after futility pruning? - if (/* move != ttMove && */ pos.pl_move_is_legal(move, pinned)) - return move; - } + move = moves[bestIndex].move; + moves[bestIndex] = moves[movesPicked++]; + // Remember to change the line below if we decide to hash the qsearch! + // Maybe also postpone the legality check until after futility pruning? + if (/* move != ttMove && */ pos.pl_move_is_legal(move, pinned)) + return move; } break;