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++)
{
Color them = opposite_color(us);
- Bitboard ourPawns = pos.pawns(us);
- Bitboard theirPawns = pos.pawns(them);
+ Bitboard ourPawns = pos.pieces(PAWN, us);
+ Bitboard theirPawns = pos.pieces(PAWN, them);
Bitboard pawns = ourPawns;
// Initialize pawn storm scores by giving bonuses for open files
// it cannot be backward. If can capture an enemy pawn or if
// there are friendly pawns behind on neighboring files it cannot
// be backward either.
+
bool backward;
- if ( passed
- || isolated
- || chain
- || (pos.pawn_attacks(us, s) & theirPawns)
- || (ourPawns & behind_bb(us, r) & neighboring_files_bb(f)))
+ if ( (passed | isolated | chain)
+ || (ourPawns & behind_bb(us, r) & neighboring_files_bb(f))
+ || (pos.attacks_from<PAWN>(s, us) & theirPawns))
backward = false;
else
{
// pawn on neighboring files. We now check whether the pawn is
// backward by looking in the forward direction on the neighboring
// files, and seeing whether we meet a friendly or an enemy pawn first.
- Bitboard b = pos.pawn_attacks(us, s);
+ Bitboard b = pos.attacks_from<PAWN>(s, us);
if (us == WHITE)
{
for ( ; !(b & (ourPawns | theirPawns)); b <<= 8);
int PawnInfo::updateShelter(const Position& pos, Color c, Square ksq) {
unsigned shelter = 0;
- Bitboard pawns = pos.pawns(c) & this_and_neighboring_files_bb(ksq);
+ Bitboard pawns = pos.pieces(PAWN, c) & this_and_neighboring_files_bb(ksq);
unsigned r = ksq & (7 << 3);
for (int i = 1, k = (c ? -8 : 8); i < 4; i++)
{