// At non-PV nodes we check for an early TT cutoff
if ( !PvNode
&& ss->ttHit
- && tte->depth() >= depth
+ && tte->depth() > depth
&& ttValue != VALUE_NONE // Possible in case of TT access race
&& (ttValue >= beta ? (tte->bound() & BOUND_LOWER)
: (tte->bound() & BOUND_UPPER)))
}
else
{
- // In case of null move search use previous static eval with a different sign
- if ((ss-1)->currentMove != MOVE_NULL)
- ss->staticEval = eval = evaluate(pos);
- else
- ss->staticEval = eval = -(ss-1)->staticEval;
+ ss->staticEval = eval = evaluate(pos);
// Save static evaluation into transposition table
- if(!excludedMove)
- tte->save(posKey, VALUE_NONE, ss->ttPv, BOUND_NONE, DEPTH_NONE, MOVE_NONE, eval);
+ if (!excludedMove)
+ tte->save(posKey, VALUE_NONE, ss->ttPv, BOUND_NONE, DEPTH_NONE, MOVE_NONE, eval);
}
// Use static evaluation difference to improve quiet move ordering
&& (ss-1)->statScore < 23767
&& eval >= beta
&& eval >= ss->staticEval
- && ss->staticEval >= beta - 20 * depth - improvement / 15 + 168 * ss->ttPv + 177
+ && ss->staticEval >= beta - 20 * depth - improvement / 15 + 177
&& !excludedMove
&& pos.non_pawn_material(us)
&& (ss->ply >= thisThread->nmpMinPly || us != thisThread->nmpColor))
assert(probCutBeta < VALUE_INFINITE);
MovePicker mp(pos, ttMove, probCutBeta - ss->staticEval, &captureHistory);
- int probCutCount = 0;
bool ttPv = ss->ttPv;
ss->ttPv = false;
- while ( (move = mp.next_move()) != MOVE_NONE
- && probCutCount < 2 + 2 * cutNode)
+ while ((move = mp.next_move()) != MOVE_NONE)
if (move != excludedMove && pos.legal(move))
{
assert(pos.capture_or_promotion(move));
assert(depth >= 5);
captureOrPromotion = true;
- probCutCount++;
ss->currentMove = move;
ss->continuationHistory = &thisThread->continuationHistory[ss->inCheck]
// In general we want to cap the LMR depth search at newDepth. But if reductions
// are really negative and movecount is low, we allow this move to be searched
// deeper than the first move (this may lead to hidden double extensions).
- int deeper = r >= -1 ? 0
- : moveCount <= 3 && r <= -3 ? 2
- : moveCount <= 5 ? 1
- : PvNode && depth > 6 ? 1
- : 0;
+ int deeper = r >= -1 ? 0
+ : moveCount <= 3 ? 2
+ : moveCount <= 5 ? 1
+ : PvNode && depth > 6 ? 1
+ : 0;
Depth d = std::clamp(newDepth - r, 1, newDepth + deeper);