if (!rootNode)
{
// Step 2. Check for aborted search and immediate draw
- if (Signals.stop.load(std::memory_order_relaxed) || pos.is_draw() || ss->ply >= MAX_PLY)
+ if (Signals.stop.load(std::memory_order_relaxed) || pos.is_draw(ss->ply) || ss->ply >= MAX_PLY)
return ss->ply >= MAX_PLY && !inCheck ? evaluate(pos)
: DrawValue[pos.side_to_move()];
if (value > alpha)
{
- // If there is an easy move for this position, clear it if unstable
- if ( PvNode
- && thisThread == Threads.main()
- && EasyMove.get(pos.key())
- && (move != EasyMove.get(pos.key()) || moveCount > 1))
- EasyMove.clear();
-
bestMove = move;
if (PvNode && !rootNode) // Update pv even in fail-high case
ss->ply = (ss-1)->ply + 1;
// Check for an instant draw or if the maximum ply has been reached
- if (pos.is_draw() || ss->ply >= MAX_PLY)
+ if (pos.is_draw(ss->ply) || ss->ply >= MAX_PLY)
return ss->ply >= MAX_PLY && !InCheck ? evaluate(pos)
: DrawValue[pos.side_to_move()];