From e677185567173a0b50f0ca47bd2496c5f814dab4 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Wed, 30 Sep 2009 08:07:46 +0100 Subject: [PATCH] Store pawn attacks in PawnInfo They are pawn structure invariant so has a sense to store togheter with pawn info instead of recalculating them each time evaluate() is called. Speed up is around 1% No functional change. Signed-off-by: Marco Costalba --- src/evaluate.cpp | 4 ++-- src/pawns.cpp | 4 ++++ src/pawns.h | 6 ++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index e83f7928..acd5f0bd 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -344,8 +344,8 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { ei.kingZone[BLACK] = ei.attackedBy[WHITE][KING] | (ei.attackedBy[WHITE][KING] << 8); // Initialize pawn attack bitboards for both sides - ei.attackedBy[WHITE][PAWN] = ((pos.pieces(PAWN, WHITE) << 9) & ~FileABB) | ((pos.pieces(PAWN, WHITE) << 7) & ~FileHBB); - ei.attackedBy[BLACK][PAWN] = ((pos.pieces(PAWN, BLACK) >> 7) & ~FileABB) | ((pos.pieces(PAWN, BLACK) >> 9) & ~FileHBB); + ei.attackedBy[WHITE][PAWN] = ei.pi->pawn_attacks(WHITE); + ei.attackedBy[BLACK][PAWN] = ei.pi->pawn_attacks(BLACK); Bitboard b1 = ei.attackedBy[WHITE][PAWN] & ei.attackedBy[BLACK][KING]; Bitboard b2 = ei.attackedBy[BLACK][PAWN] & ei.attackedBy[WHITE][KING]; if (b1) diff --git a/src/pawns.cpp b/src/pawns.cpp index f06b1283..8f5e1890 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -193,6 +193,10 @@ PawnInfo* PawnInfoTable::get_pawn_info(const Position& pos) { Value mgValue[2] = {Value(0), Value(0)}; Value egValue[2] = {Value(0), Value(0)}; + // Calculate pawn attacks + pi->pawnAttacks[WHITE] = ((pos.pieces(PAWN, WHITE) << 9) & ~FileABB) | ((pos.pieces(PAWN, WHITE) << 7) & ~FileHBB); + pi->pawnAttacks[BLACK] = ((pos.pieces(PAWN, BLACK) >> 7) & ~FileABB) | ((pos.pieces(PAWN, BLACK) >> 9) & ~FileHBB); + // Loop through the pawns for both colors for (Color us = WHITE; us <= BLACK; us++) { diff --git a/src/pawns.h b/src/pawns.h index 9dc08a66..5d3d85fe 100644 --- a/src/pawns.h +++ b/src/pawns.h @@ -51,6 +51,7 @@ public: Value eg_value() const; Value kingside_storm_value(Color c) const; Value queenside_storm_value(Color c) const; + Bitboard pawn_attacks(Color c) const; Bitboard passed_pawns() const; int file_is_half_open(Color c, File f) const; int has_open_file_to_left(Color c, File f) const; @@ -63,6 +64,7 @@ private: Key key; Bitboard passedPawns; + Bitboard pawnAttacks[2]; int16_t mgValue, egValue; int16_t ksStormValue[2], qsStormValue[2]; uint8_t halfOpenFiles[2]; @@ -104,6 +106,10 @@ inline Bitboard PawnInfo::passed_pawns() const { return passedPawns; } +inline Bitboard PawnInfo::pawn_attacks(Color c) const { + return pawnAttacks[c]; +} + inline Value PawnInfo::kingside_storm_value(Color c) const { return Value(ksStormValue[c]); } -- 2.39.2