summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
c3af52c)
Handle the countermove in the same way we use stages to progress
through the killer moves, using a common array called "refutations".
Removes some lines of code and simplifies a bit the jump table.
STC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 71707 W: 14622 L: 14595 D: 42490
http://tests.stockfishchess.org/tests/view/
5aa003cf0ebc590297cb6276
LTC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 22320 W: 3470 L: 3352 D: 15498
http://tests.stockfishchess.org/tests/view/
5aa051020ebc590297cb62ba
Closes https://github.com/official-stockfish/Stockfish/pull/1468
No functional change.
/// MovePicker constructor for the main search
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const ButterflyHistory* mh,
const CapturePieceToHistory* cph, const PieceToHistory** ch, Move cm, Move* killers_p)
/// MovePicker constructor for the main search
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const ButterflyHistory* mh,
const CapturePieceToHistory* cph, const PieceToHistory** ch, Move cm, Move* killers_p)
- : pos(p), mainHistory(mh), captureHistory(cph), contHistory(ch), countermove(cm),
- killers{killers_p[0], killers_p[1]}, depth(d){
+ : pos(p), mainHistory(mh), captureHistory(cph), contHistory(ch),
+ refutations{killers_p[0], killers_p[1], cm}, depth(d){
- case MAIN_SEARCH: case EVASION: case QSEARCH: case PROBCUT:
+ case MAIN_SEARCH:
+ case EVASION:
+ case QSEARCH:
+ case PROBCUT:
score<CAPTURES>();
++stage;
score<CAPTURES>();
++stage;
- // Rebranch at the top of the switch via a recursive call
- return next_move(skipQuiets);
+ // Rebranch at the top of the switch
+ goto begin_switch;
case GOOD_CAPTURES:
while (cur < endMoves)
case GOOD_CAPTURES:
while (cur < endMoves)
+
+ // If the countermove is the same as a killer, skip it
+ if ( refutations[0] == refutations[2]
+ || refutations[1] == refutations[2])
+ refutations[2] = MOVE_NONE;
+
/* fallthrough */
case KILLER0:
case KILLER1:
/* fallthrough */
case KILLER0:
case KILLER1:
+ case COUNTERMOVE:
+ while (stage <= COUNTERMOVE)
- move = killers[++stage - KILLER1];
+ move = refutations[ stage++ - KILLER0 ];
if ( move != MOVE_NONE
&& move != ttMove
&& pos.pseudo_legal(move)
&& !pos.capture(move))
return move;
if ( move != MOVE_NONE
&& move != ttMove
&& pos.pseudo_legal(move)
&& !pos.capture(move))
return move;
- } while (stage <= KILLER1);
- /* fallthrough */
-
- case COUNTERMOVE:
- ++stage;
- move = countermove;
- if ( move != MOVE_NONE
- && move != ttMove
- && move != killers[0]
- && move != killers[1]
- && pos.pseudo_legal(move)
- && !pos.capture(move))
- return move;
/* fallthrough */
case QUIET_INIT:
/* fallthrough */
case QUIET_INIT:
{
move = *cur++;
if ( move != ttMove
{
move = *cur++;
if ( move != ttMove
- && move != killers[0]
- && move != killers[1]
- && move != countermove)
+ && move != refutations[0]
+ && move != refutations[1]
+ && move != refutations[2])
const ButterflyHistory* mainHistory;
const CapturePieceToHistory* captureHistory;
const PieceToHistory** contHistory;
const ButterflyHistory* mainHistory;
const CapturePieceToHistory* captureHistory;
const PieceToHistory** contHistory;
- Move ttMove, countermove, killers[2];
+ Move ttMove, refutations[3];
ExtMove *cur, *endMoves, *endBadCaptures;
int stage;
Square recaptureSquare;
ExtMove *cur, *endMoves, *endBadCaptures;
int stage;
Square recaptureSquare;