X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmovepick.cpp;h=95bbddba670788af7d2b937a72ddb4c28a791a31;hb=32934c0c8d75fe63e08046f6ba7dd546de67dc01;hp=d4242a300de7620e5f58665cb20c7e5ff0aa102c;hpb=cff3a6d33e50d37322ffae511ddbe4c7e846505e;p=stockfish diff --git a/src/movepick.cpp b/src/movepick.cpp index d4242a30..95bbddba 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -228,18 +228,29 @@ void MovePicker::score_captures() { // to the badCaptures[] array. Move m; int seeValue; + Square from, to; for (int i = 0; i < numOfMoves; i++) { m = moves[i].move; - seeValue = pos.see(m); + from = move_from(m); + to = move_to(m); + + bool hxl = ( int(pos.midgame_value_of_piece_on(from)) + -int(pos.midgame_value_of_piece_on(to)) > 0) + || pos.type_of_piece_on(from) == KING; + + // Avoid calling see() for LxH and equal captures because + // SEE is always >= 0 and we order for MVV/LVA anyway. + seeValue = (hxl ? pos.see(m) : 0); + if (seeValue >= 0) { if (move_promotion(m)) moves[i].score = QueenValueMidgame; else - moves[i].score = int(pos.midgame_value_of_piece_on(move_to(m))) - -int(pos.type_of_piece_on(move_from(m))); + moves[i].score = int(pos.midgame_value_of_piece_on(to)) + -int(pos.type_of_piece_on(from)); } else {