From: Marco Costalba Date: Wed, 11 Nov 2009 20:17:38 +0000 (+0100) Subject: Retire evaluate_mobility() X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=ad44ff2bca7a4e919ce8375cda95ec849e63ef60;hp=8e96149c8cc6c3359484b2874b022932f1499927 Retire evaluate_mobility() Move the code to the caller and also move mob_area computation out of evaluate_pieces(). It is more clear the code flow and it is also faster. No functional change. Signed-off-by: Marco Costalba --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index add85408..da85b4c6 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -515,35 +515,6 @@ void read_weights(Color us) { namespace { - // evaluate_mobility() computes mobility and attacks for every piece - - template - int evaluate_mobility(Bitboard b, Bitboard mob_area, EvalInfo& ei) { - - const Color Them = (Us == WHITE ? BLACK : WHITE); - - // Update attack info - ei.attackedBy[Us][Piece] |= b; - - // King attacks - if (b & ei.kingZone[Us]) - { - ei.kingAttackersCount[Us]++; - ei.kingAttackersWeight[Us] += AttackWeight[Piece]; - Bitboard bb = (b & ei.attackedBy[Them][KING]); - if (bb) - ei.kingAdjacentZoneAttacksCount[Us] += count_1s_max_15(bb); - } - - // Mobility - int mob = (Piece != QUEEN ? count_1s_max_15(b & mob_area) - : count_1s(b & mob_area)); - - ei.mobility += Sign[Us] * MobilityBonus[Piece][mob]; - return mob; - } - - // evaluate_outposts() evaluates bishop and knight outposts squares template @@ -572,7 +543,7 @@ namespace { // evaluate_pieces<>() assigns bonuses and penalties to the pieces of a given color template - void evaluate_pieces(const Position& pos, EvalInfo& ei) { + void evaluate_pieces(const Position& pos, EvalInfo& ei, Bitboard mob_area) { Bitboard b; Square s, ksq; @@ -582,9 +553,6 @@ namespace { const Color Them = (Us == WHITE ? BLACK : WHITE); const Square* ptr = pos.piece_list_begin(Us, Piece); - // Do not include in mobility squares protected by enemy pawns or occupied by our pieces - const Bitboard mob_area = ~(ei.attackedBy[Them][PAWN] | pos.pieces_of_color(Us)); - while ((s = *ptr++) != SQ_NONE) { if (Piece == KNIGHT || Piece == QUEEN) @@ -596,8 +564,24 @@ namespace { else assert(false); - // Attacks and mobility - mob = evaluate_mobility(b, mob_area, ei); + // Update attack info + ei.attackedBy[Us][Piece] |= b; + + // King attacks + if (b & ei.kingZone[Us]) + { + ei.kingAttackersCount[Us]++; + ei.kingAttackersWeight[Us] += AttackWeight[Piece]; + Bitboard bb = (b & ei.attackedBy[Them][KING]); + if (bb) + ei.kingAdjacentZoneAttacksCount[Us] += count_1s_max_15(bb); + } + + // Mobility + mob = (Piece != QUEEN ? count_1s_max_15(b & mob_area) + : count_1s(b & mob_area)); + + ei.mobility += Sign[Us] * MobilityBonus[Piece][mob]; // Decrease score if we are attacked by an enemy pawn. Remaining part // of threat evaluation must be done later when we have full attack info. @@ -711,15 +695,20 @@ namespace { template void evaluate_pieces_of_color(const Position& pos, EvalInfo& ei) { - evaluate_pieces(pos, ei); - evaluate_pieces(pos, ei); - evaluate_pieces(pos, ei); - evaluate_pieces(pos, ei); + const Color Them = (Us == WHITE ? BLACK : WHITE); + + // Do not include in mobility squares protected by enemy pawns or occupied by our pieces + const Bitboard mob_area = ~(ei.attackedBy[Them][PAWN] | pos.pieces_of_color(Us)); + + evaluate_pieces(pos, ei, mob_area); + evaluate_pieces(pos, ei, mob_area); + evaluate_pieces(pos, ei, mob_area); + evaluate_pieces(pos, ei, mob_area); - // Sum up all attacked squares - ei.attackedBy[Us][0] = ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT] - | ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK] - | ei.attackedBy[Us][QUEEN] | ei.attackedBy[Us][KING]; + // Sum up all attacked squares + ei.attackedBy[Us][0] = ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT] + | ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK] + | ei.attackedBy[Us][QUEEN] | ei.attackedBy[Us][KING]; }