summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
b873086)
remove the QRECAPTURES and QSEARCH_RECAPTURES stages as they can be
incoorporated in QCAPTURES stage with a simple condition on depth.
passed STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 214964 W: 46188 L: 46443 D: 122333
http://tests.stockfishchess.org/tests/view/
5a98544b0ebc590297cc8e35
passed LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 14552 W: 2404 L: 2274 D: 9874
http://tests.stockfishchess.org/tests/view/
5a9947b20ebc590297cc8e93
Bench:
6361582
MAIN_SEARCH, CAPTURES_INIT, GOOD_CAPTURES, KILLER0, KILLER1, COUNTERMOVE, QUIET_INIT, QUIET, BAD_CAPTURES,
EVASION, EVASIONS_INIT, ALL_EVASIONS,
PROBCUT, PROBCUT_CAPTURES_INIT, PROBCUT_CAPTURES,
MAIN_SEARCH, CAPTURES_INIT, GOOD_CAPTURES, KILLER0, KILLER1, COUNTERMOVE, QUIET_INIT, QUIET, BAD_CAPTURES,
EVASION, EVASIONS_INIT, ALL_EVASIONS,
PROBCUT, PROBCUT_CAPTURES_INIT, PROBCUT_CAPTURES,
- QSEARCH, QCAPTURES_INIT, QCAPTURES, QCHECKS, QSEARCH_RECAPTURES, QRECAPTURES
+ QSEARCH, QCAPTURES_INIT, QCAPTURES, QCHECKS
};
// partial_insertion_sort() sorts moves in descending order up to and including
};
// partial_insertion_sort() sorts moves in descending order up to and including
/// MovePicker constructor for quiescence search
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const ButterflyHistory* mh, const CapturePieceToHistory* cph, Square s)
/// MovePicker constructor for quiescence search
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const ButterflyHistory* mh, const CapturePieceToHistory* cph, Square s)
- : pos(p), mainHistory(mh), captureHistory(cph), depth(d) {
+ : pos(p), mainHistory(mh), captureHistory(cph), recaptureSquare(s), depth(d) {
- if (pos.checkers())
- stage = EVASION;
-
- else if (d > DEPTH_QS_RECAPTURES)
- stage = QSEARCH;
-
- else
- {
- stage = QSEARCH_RECAPTURES;
- recaptureSquare = s;
- return;
- }
-
- ttMove = ttm && pos.pseudo_legal(ttm) ? ttm : MOVE_NONE;
+ stage = pos.checkers() ? EVASION : QSEARCH;
+ ttMove = ttm
+ && pos.pseudo_legal(ttm)
+ && (depth > DEPTH_QS_RECAPTURES || to_sq(ttm) == recaptureSquare) ? ttm : MOVE_NONE;
stage += (ttMove == MOVE_NONE);
}
stage += (ttMove == MOVE_NONE);
}
&& pos.pseudo_legal(ttm)
&& pos.capture(ttm)
&& pos.see_ge(ttm, threshold) ? ttm : MOVE_NONE;
&& pos.pseudo_legal(ttm)
&& pos.capture(ttm)
&& pos.see_ge(ttm, threshold) ? ttm : MOVE_NONE;
stage += (ttMove == MOVE_NONE);
}
stage += (ttMove == MOVE_NONE);
}
case CAPTURES_INIT:
case PROBCUT_CAPTURES_INIT:
case QCAPTURES_INIT:
case CAPTURES_INIT:
case PROBCUT_CAPTURES_INIT:
case QCAPTURES_INIT:
- case QSEARCH_RECAPTURES:
endBadCaptures = cur = moves;
endMoves = generate<CAPTURES>(pos, cur);
score<CAPTURES>();
endBadCaptures = cur = moves;
endMoves = generate<CAPTURES>(pos, cur);
score<CAPTURES>();
case QUIET:
if (!skipQuiets)
case QUIET:
if (!skipQuiets)
- while (cur < endMoves)
- {
- move = *cur++;
-
- if ( move != ttMove
- && move != killers[0]
- && move != killers[1]
- && move != countermove)
- return move;
- }
+ while (cur < endMoves)
+ {
+ move = *cur++;
+ if ( move != ttMove
+ && move != killers[0]
+ && move != killers[1]
+ && move != countermove)
+ return move;
+ }
++stage;
cur = moves; // Point to beginning of bad captures
/* fallthrough */
++stage;
cur = moves; // Point to beginning of bad captures
/* fallthrough */
while (cur < endMoves)
{
move = pick_best(cur++, endMoves);
while (cur < endMoves)
{
move = pick_best(cur++, endMoves);
+ if ( move != ttMove
+ && (depth > DEPTH_QS_RECAPTURES || to_sq(move) == recaptureSquare))
return move;
}
if (depth <= DEPTH_QS_NO_CHECKS)
return move;
}
if (depth <= DEPTH_QS_NO_CHECKS)
/* fallthrough */
case QCHECKS:
/* fallthrough */
case QCHECKS:
- while (cur < endMoves)
- {
- move = cur++->move;
- if (move != ttMove)
- return move;
- }
- break;
-
- case QRECAPTURES:
while (cur < endMoves)
{
move = *cur++;
while (cur < endMoves)
{
move = *cur++;
- if (to_sq(move) == recaptureSquare)