singularExtensionNode = !RootNode
&& !SpNode
- && depth >= (PvNode ? 6 * ONE_PLY : 8 * ONE_PLY)
+ && depth >= 8 * ONE_PLY
&& ttMove != MOVE_NONE
&& !excludedMove // Recursive singular search is not allowed
&& (tte->bound() & BOUND_LOWER)
// Step 15. Reduced depth search (LMR). If the move fails high will be
// re-searched at full depth.
- if ( depth > 3 * ONE_PLY
+ if ( depth >= 3 * ONE_PLY
&& !pvMove
&& !captureOrPromotion
&& move != ttMove
Square m2to = to_sq(second);
// The piece is the same or second's destination was vacated by the first move
- if (m1to == m2from || m2to == m1from)
+ // We exclude the trivial case where a sliding piece does in two moves what
+ // it could do in one move: eg. Ra1a2, Ra2a3.
+ if ( m2to == m1from
+ || (m1to == m2from && !squares_aligned(m1from, m2from, m2to)))
return true;
// Second one moves through the square vacated by first one