case PH_EVASIONS:
assert(pos.is_check());
lastMove = generate_evasions(pos, moves);
- score_evasions();
+ score_evasions_or_checks();
return;
case PH_QCAPTURES:
return;
case PH_QCHECKS:
- // Perhaps we should order moves move here? FIXME
lastMove = generate_non_capture_checks(pos, moves);
+ score_evasions_or_checks();
return;
case PH_STOP:
}
}
-void MovePicker::score_evasions() {
+void MovePicker::score_evasions_or_checks() {
// Try good captures ordered by MVV/LVA, then non-captures if
// destination square is not under attack, ordered by history
// value, and at the end bad-captures and non-captures with a
Move m;
int seeScore;
+ // Skip if we don't have at least two moves to order
+ if (lastMove < moves + 2)
+ return;
+
for (MoveStack* cur = moves; cur != lastMove; cur++)
{
m = cur->move;