From 32934c0c8d75fe63e08046f6ba7dd546de67dc01 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 5 Dec 2008 12:00:30 +0100 Subject: [PATCH] MovePicker: avoid calling see() for LxH and equal captures No functional change but should speed-up the captures scoring. Signed-off-by: Marco Costalba --- src/movepick.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) 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 { -- 2.39.2