From 6181e01c2a6a40c82c6b76036cc7ba25c952fbe4 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 15 May 2010 13:29:21 +0100 Subject: [PATCH] Introduce init_attack_tables() in evaluate() No functional change. Signed-off-by: Marco Costalba --- src/evaluate.cpp | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index e44bcdcc..6c563f72 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -242,6 +242,9 @@ namespace { template Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID); + template + void init_attack_tables(const Position& pos, EvalInfo& ei); + template void evaluate_pieces_of_color(const Position& pos, EvalInfo& ei); @@ -285,7 +288,6 @@ namespace { template Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { - Bitboard b; ScaleFactor factor[2]; assert(pos.is_ok()); @@ -315,22 +317,9 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { ei.pi = PawnTable[threadID]->get_pawn_info(pos); ei.value += apply_weight(ei.pi->pawns_value(), Weights[PawnStructure]); - // Initialize king attack bitboards and king attack zones for both sides - ei.attackedBy[WHITE][KING] = pos.attacks_from(pos.king_square(WHITE)); - ei.attackedBy[BLACK][KING] = pos.attacks_from(pos.king_square(BLACK)); - ei.kingZone[WHITE] = ei.attackedBy[BLACK][KING] | (ei.attackedBy[BLACK][KING] >> 8); - ei.kingZone[BLACK] = ei.attackedBy[WHITE][KING] | (ei.attackedBy[WHITE][KING] << 8); - - // Initialize pawn attack bitboards for both sides - ei.attackedBy[WHITE][PAWN] = ei.pi->pawn_attacks(WHITE); - b = ei.attackedBy[WHITE][PAWN] & ei.attackedBy[BLACK][KING]; - if (b) - ei.kingAttackersCount[WHITE] = count_1s_max_15(b)/2; - - ei.attackedBy[BLACK][PAWN] = ei.pi->pawn_attacks(BLACK); - b = ei.attackedBy[BLACK][PAWN] & ei.attackedBy[WHITE][KING]; - if (b) - ei.kingAttackersCount[BLACK] = count_1s_max_15(b)/2; + // Initialize attack bitboards with pawns evaluation + init_attack_tables(pos, ei); + init_attack_tables(pos, ei); // Evaluate pieces evaluate_pieces_of_color(pos, ei); @@ -481,6 +470,23 @@ void read_weights(Color us) { namespace { + // init_king_tables() initializes king bitboards for both sides adding + // pawn attacks. To be done before other evaluations. + + template + void init_attack_tables(const Position& pos, EvalInfo& ei) { + + const Color Them = (Us == WHITE ? BLACK : WHITE); + + Bitboard b = ei.attackedBy[Them][KING] = pos.attacks_from(pos.king_square(Them)); + ei.kingZone[Us] = (b | (Us == WHITE ? b >> 8 : b << 8)); + ei.attackedBy[Us][PAWN] = ei.pi->pawn_attacks(Us); + b &= ei.attackedBy[Us][PAWN]; + if (b) + ei.kingAttackersCount[Us] = count_1s_max_15(b) / 2; + } + + // evaluate_outposts() evaluates bishop and knight outposts squares template -- 2.39.2