X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=20beb23a11c44e0f75bcd99a08c506d7373e1658;hp=7249a113862f87ebe8cd6563f0bb3fa08e937ddb;hb=b5178597bd71c210de9e4245e26153c24fbb2c13;hpb=1322ab97c737fe761bd6ae8786f852851b8f019f diff --git a/src/search.cpp b/src/search.cpp index 7249a113..20beb23a 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -363,15 +363,12 @@ void init_search() { void SearchStack::init() { currentMove = threatMove = bestMove = MOVE_NONE; - reduction = Depth(0); } // SearchStack::initKillers() initializes killers for a search stack entry void SearchStack::initKillers() { - mateKiller = MOVE_NONE; - for (int i = 0; i < KILLER_MAX; i++) - killers[i] = MOVE_NONE; + killers[0] = killers[1] = mateKiller = MOVE_NONE; } @@ -763,7 +760,9 @@ namespace { beta = *betaPtr; isCheck = pos.is_check(); - // Step 1. Initialize node and poll (omitted at root, init_ss_array() has already initialized root node) + // Step 1. Initialize node (polling is omitted at root) + ss->init(); + // Step 2. Check for aborted search (omitted at root) // Step 3. Mate distance pruning (omitted at root) // Step 4. Transposition table lookup (omitted at root) @@ -1873,10 +1872,8 @@ namespace { bool move_is_killer(Move m, SearchStack* ss) { - const Move* k = ss->killers; - for (int i = 0; i < KILLER_MAX; i++, k++) - if (*k == m) - return true; + if (ss->killers[0] == m || ss->killers[1] == m) + return true; return false; } @@ -2053,9 +2050,7 @@ namespace { if (m == ss->killers[0]) return; - for (int i = KILLER_MAX - 1; i > 0; i--) - ss->killers[i] = ss->killers[i - 1]; - + ss->killers[1] = ss->killers[0]; ss->killers[0] = m; } @@ -2212,12 +2207,10 @@ namespace { { ss->excludedMove = MOVE_NONE; ss->skipNullMove = false; + ss->reduction = Depth(0); if (i < 3) - { - ss->init(); ss->initKillers(); - } } } @@ -2737,6 +2730,11 @@ namespace { StateInfo st; bool includeAllMoves = (searchMoves[0] == MOVE_NONE); + // Initialize search stack + init_ss_array(ss, PLY_MAX_PLUS_2); + ss[0].init(); + ss[0].eval = VALUE_NONE; + // Generate all legal moves MoveStack* last = generate_moves(pos, mlist); @@ -2752,10 +2750,8 @@ namespace { continue; // Find a quick score for the move - init_ss_array(ss, PLY_MAX_PLUS_2); - ss[0].eval = VALUE_NONE; - ss[0].currentMove = cur->move; pos.do_move(cur->move, st); + ss[0].currentMove = cur->move; moves[count].move = cur->move; moves[count].score = -qsearch(pos, ss+1, -VALUE_INFINITE, VALUE_INFINITE, Depth(0), 1); moves[count].pv[0] = cur->move;