X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=24230ee7fd6b4ebe4b38369d9fd0ad3d4e5252e5;hp=acd5d1da4ef7793f7ba02668b5907c2a461ff75e;hb=91f0c0878962f80ca27d78da9a096b52a5aec684;hpb=f74f42b2982e25e180417948771843e8bb6bd4b7 diff --git a/src/search.cpp b/src/search.cpp index acd5d1da..24230ee7 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1535,15 +1535,15 @@ namespace { if (isCheck) staticValue = -VALUE_INFINITE; - else if (tte && tte->type() == VALUE_TYPE_EVAL) + else if (tte && (tte->type() & VALUE_TYPE_EVAL)) { // Use the cached evaluation score if possible assert(ei.futilityMargin == Value(0)); - staticValue = tte->value() + ply; + staticValue = tte->value(); } else - staticValue = evaluate(pos, ei, threadID) + ply; + staticValue = evaluate(pos, ei, threadID); if (ply == PLY_MAX - 1) return evaluate(pos, ei, threadID); @@ -1556,7 +1556,7 @@ namespace { { // Store the score to avoid a future costly evaluation() call if (!isCheck && !tte && ei.futilityMargin == 0) - TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_EVAL, Depth(-127*OnePly), MOVE_NONE); + TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_EV_LO, Depth(-127*OnePly), MOVE_NONE); return bestValue; } @@ -1644,9 +1644,13 @@ namespace { Move m = ss[ply].pv[ply]; if (!pvNode) { + // If bestValue isn't changed it means it is still the static evaluation of + // the node, so keep this info to avoid a future costly evaluation() call. + ValueType type = (bestValue == staticValue && !ei.futilityMargin ? VALUE_TYPE_EV_UP : VALUE_TYPE_UPPER); Depth d = (depth == Depth(0) ? Depth(0) : Depth(-1)); + if (bestValue < beta) - TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_UPPER, d, MOVE_NONE); + TT.store(pos.get_key(), value_to_tt(bestValue, ply), type, d, MOVE_NONE); else TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_LOWER, d, m); } @@ -1962,7 +1966,7 @@ namespace { bool includeAllMoves = (searchMoves[0] == MOVE_NONE); // Generate all legal moves - MoveStack* last = generate_legal_moves(pos, mlist); + MoveStack* last = generate_moves(pos, mlist); // Add each move to the moves[] array for (MoveStack* cur = mlist; cur != last; cur++) @@ -2182,7 +2186,7 @@ namespace { // Case 4: The destination square for m2 is attacked by the moving piece in m1 p = pos.piece_on(t1); - if (bit_is_set(pos.piece_attacks(p, t1), t2)) + if (bit_is_set(pos.attacks_from(p, t1), t2)) return true; // Case 5: Discovered check, checking piece is the piece moved in m1