+ Value singularBeta = ttValue - ((formerPv + 4) * depth) / 2;
+ Depth singularDepth = (depth - 1 + 3 * formerPv) / 2;
+ ss->excludedMove = move;
+ value = search<NonPV>(pos, ss, singularBeta - 1, singularBeta, singularDepth, cutNode);
+ ss->excludedMove = MOVE_NONE;
+
+ if (value < singularBeta)
+ {
+ extension = 1;
+ singularQuietLMR = !ttCapture;
+ }
+
+ // Multi-cut pruning
+ // Our ttMove is assumed to fail high, and now we failed high also on a reduced
+ // search without the ttMove. So we assume this expected Cut-node is not singular,
+ // that multiple moves fail high, and we can prune the whole subtree by returning
+ // a soft bound.
+ else if (singularBeta >= beta)
+ return singularBeta;
+
+ // If the eval of ttMove is greater than beta we try also if there is another
+ // move that pushes it over beta, if so also produce a cutoff.
+ else if (ttValue >= beta)
+ {
+ ss->excludedMove = move;
+ value = search<NonPV>(pos, ss, beta - 1, beta, (depth + 3) / 2, cutNode);
+ ss->excludedMove = MOVE_NONE;
+
+ if (value >= beta)
+ return beta;
+ }