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)
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++)
{
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;
Key key;
Bitboard passedPawns;
+ Bitboard pawnAttacks[2];
int16_t mgValue, egValue;
int16_t ksStormValue[2], qsStormValue[2];
uint8_t halfOpenFiles[2];
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]);
}