e->kingSquares[Us] = SQ_NONE;
e->semiopenFiles[Us] = 0xFF;
e->pawnAttacks[Us] = shift_bb<Right>(ourPawns) | shift_bb<Left>(ourPawns);
- e->pawnsOnSquares[Us][BLACK] = popcount<Max15>(ourPawns & BlackSquares);
+ e->pawnsOnSquares[Us][BLACK] = popcount<Max15>(ourPawns & DarkSquares);
e->pawnsOnSquares[Us][WHITE] = pos.count<PAWN>(Us) - e->pawnsOnSquares[Us][BLACK];
// Loop through all pawns of the current color and score each pawn
opposed = theirPawns & forward_bb(Us, s);
passed = !(theirPawns & passed_pawn_mask(Us, s));
- // Test for backward pawn
- backward = false;
-
+ // Test for backward pawn.
// If the pawn is passed, isolated, or member of a pawn chain it cannot
// be backward. If there are friendly pawns behind on adjacent files
// or if can capture an enemy pawn it cannot be backward either.
- if ( !(passed | isolated | chain)
- && !(ourPawns & pawn_attack_span(Them, s))
- && !(pos.attacks_from<PAWN>(s, Us) & theirPawns))
+ if ( (passed | isolated | chain)
+ || (ourPawns & pawn_attack_span(Them, s))
+ || (pos.attacks_from<PAWN>(s, Us) & theirPawns))
+ backward = false;
+ else
{
// We now know that there are no friendly pawns beside or behind this
// pawn on adjacent files. We now check whether the pawn is
Bitboard ourPawns = b & pos.pieces(Us);
Bitboard theirPawns = b & pos.pieces(Them);
Rank rkUs, rkThem;
- File kf = file_of(ksq);
-
- kf = (kf == FILE_A) ? FILE_B : (kf == FILE_H) ? FILE_G : kf;
+ File kf = std::max(FILE_B, std::min(FILE_G, file_of(ksq)));
for (int f = kf - 1; f <= kf + 1; f++)
{