+
+ // Only move extension
+ if ( forbiddenMove == MOVE_NONE
+ && moveCount == 1
+ && ext < OnePly
+ && depth >= 4 * OnePly
+ && tte
+ && (tte->type() & VALUE_TYPE_LOWER)
+ && tte->move() != MOVE_NONE
+ && tte->depth() >= depth - 3 * OnePly)
+ {
+ Value ttValue = value_from_tt(tte->value(), ply);
+ if (abs(ttValue) < VALUE_KNOWN_WIN)
+ {
+ Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, Max(Min(depth / 2, depth - 4 * OnePly), OnePly), ply, false, threadID, tte->move());
+ if (excValue < ttValue - OnlyMoveMargin)
+ ext = (depth >= 8 * OnePly)? OnePly : ext + OnePly / 2;
+ }
+ }
+