From 811037c8457fc46dba267e70192d3cd38676249f Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 3 Jun 2011 22:10:23 +0100 Subject: [PATCH] Split non capture in two sets when ordering But keep same ordering. This patch is prerequisite for future work. No functional change. Signed-off-by: Marco Costalba --- src/movepick.cpp | 24 ++++++++++++++---------- src/movepick.h | 2 +- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/movepick.cpp b/src/movepick.cpp index b35d1012..8f3f65b1 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -32,7 +32,8 @@ namespace { PH_GOOD_CAPTURES, // Queen promotions and captures with SEE values >= captureThreshold (captureThreshold <= 0) PH_GOOD_PROBCUT, // Queen promotions and captures with SEE values > captureThreshold (captureThreshold >= 0) PH_KILLERS, // Killer moves from the current ply - PH_NONCAPTURES, // Non-captures and underpromotions + PH_NONCAPTURES_1, // Non-captures and underpromotions with positive score + PH_NONCAPTURES_2, // Non-captures and underpromotions with non-positive score PH_BAD_CAPTURES, // Queen promotions and captures with SEE values < captureThreshold (captureThreshold <= 0) PH_EVASIONS, // Check evasions PH_QCAPTURES, // Captures in quiescence search @@ -41,7 +42,7 @@ namespace { }; CACHE_LINE_ALIGNMENT - const uint8_t MainSearchTable[] = { PH_TT_MOVE, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP }; + const uint8_t MainSearchTable[] = { PH_TT_MOVE, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES_1, PH_NONCAPTURES_2, PH_BAD_CAPTURES, PH_STOP }; const uint8_t EvasionTable[] = { PH_TT_MOVE, PH_EVASIONS, PH_STOP }; const uint8_t QsearchWithChecksTable[] = { PH_TT_MOVE, PH_QCAPTURES, PH_QCHECKS, PH_STOP }; const uint8_t QsearchWithoutChecksTable[] = { PH_TT_MOVE, PH_QCAPTURES, PH_STOP }; @@ -152,10 +153,16 @@ void MovePicker::go_next_phase() { lastMove = curMove + 2; return; - case PH_NONCAPTURES: - lastMove = generate(pos, moves); + case PH_NONCAPTURES_1: + lastNonCapture = lastMove = generate(pos, moves); score_noncaptures(); - sort_moves(moves, lastMove, &lastGoodNonCapture); + sort_moves(moves, lastNonCapture, &lastMove); + return; + + case PH_NONCAPTURES_2: + curMove = lastMove; + lastMove = lastNonCapture; + insertion_sort(curMove, lastMove); return; case PH_BAD_CAPTURES: @@ -319,11 +326,8 @@ Move MovePicker::get_next_move() { return move; break; - case PH_NONCAPTURES: - // Sort negative scored moves only when we get there - if (curMove == lastGoodNonCapture) - insertion_sort(lastGoodNonCapture, lastMove); - + case PH_NONCAPTURES_1: + case PH_NONCAPTURES_2: move = (curMove++)->move; if ( move != ttMove && move != killers[0].move diff --git a/src/movepick.h b/src/movepick.h index 27c33047..c4d665a9 100644 --- a/src/movepick.h +++ b/src/movepick.h @@ -57,7 +57,7 @@ private: MoveStack killers[2]; int captureThreshold, phase; const uint8_t* phasePtr; - MoveStack *curMove, *lastMove, *lastGoodNonCapture, *badCaptures; + MoveStack *curMove, *lastMove, *lastNonCapture, *badCaptures; MoveStack moves[MAX_MOVES]; }; -- 2.39.2