// Step 5. Evaluate the position statically and update parent's gain statistics
if (inCheck)
+ {
ss->staticEval = ss->evalMargin = eval = VALUE_NONE;
+ goto iid_start;
+ }
else if (tte)
{
// Step 6. Razoring (is omitted in PV nodes)
if ( !PvNode
&& depth < 4 * ONE_PLY
- && !inCheck
&& eval + razor_margin(depth) < beta
&& ttMove == MOVE_NONE
&& abs(beta) < VALUE_MATE_IN_MAX_PLY
if ( !PvNode
&& !ss->skipNullMove
&& depth < 4 * ONE_PLY
- && !inCheck
&& eval - futility_margin(depth, (ss-1)->futilityMoveCount) >= beta
&& abs(beta) < VALUE_MATE_IN_MAX_PLY
&& abs(eval) < VALUE_KNOWN_WIN
if ( !PvNode
&& !ss->skipNullMove
&& depth > ONE_PLY
- && !inCheck
&& eval >= beta
&& abs(beta) < VALUE_MATE_IN_MAX_PLY
&& pos.non_pawn_material(pos.side_to_move()))
// prune the previous move.
if ( !PvNode
&& depth >= 5 * ONE_PLY
- && !inCheck
&& !ss->skipNullMove
&& abs(beta) < VALUE_MATE_IN_MAX_PLY)
{
}
}
+iid_start: // When in check we skip early cut tests
+
// Step 10. Internal iterative deepening
if ( depth >= (PvNode ? 5 * ONE_PLY : 8 * ONE_PLY)
&& ttMove == MOVE_NONE