]> git.sesse.net Git - stockfish/commitdiff
Store pawn attacks in PawnInfo
authorMarco Costalba <mcostalba@gmail.com>
Wed, 30 Sep 2009 07:07:46 +0000 (08:07 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Wed, 30 Sep 2009 15:11:37 +0000 (16:11 +0100)
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 <mcostalba@gmail.com>
src/evaluate.cpp
src/pawns.cpp
src/pawns.h

index e83f792848d2aa4c8e2941fa6862709123b2005d..acd5f0bdd18a43a528a1ae926d8e9b40ac0e0a7c 100644 (file)
@@ -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.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)
   Bitboard b1 = ei.attackedBy[WHITE][PAWN] & ei.attackedBy[BLACK][KING];
   Bitboard b2 = ei.attackedBy[BLACK][PAWN] & ei.attackedBy[WHITE][KING];
   if (b1)
index f06b1283d418a529e8196150a5de85e8b934bd02..8f5e18904f7503f5e9b81fd42fa6073e387b0de7 100644 (file)
@@ -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)};
 
   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++)
   {
   // Loop through the pawns for both colors
   for (Color us = WHITE; us <= BLACK; us++)
   {
index 9dc08a669e1a63e24d9f47e2053aa0d3f19061c2..5d3d85fecca9f23f4bd50cd4b377f0cd83933f86 100644 (file)
@@ -51,6 +51,7 @@ public:
   Value eg_value() const;
   Value kingside_storm_value(Color c) const;
   Value queenside_storm_value(Color c) const;
   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;
   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;
 
   Key key;
   Bitboard passedPawns;
+  Bitboard pawnAttacks[2];
   int16_t mgValue, egValue;
   int16_t ksStormValue[2], qsStormValue[2];
   uint8_t halfOpenFiles[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;
 }
 
   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]);
 }
 inline Value PawnInfo::kingside_storm_value(Color c) const {
   return Value(ksStormValue[c]);
 }