- ei.attackedBy[WHITE][PAWN] = ((pos.pawns(WHITE) << 9) & ~FileABB) | ((pos.pawns(WHITE) << 7) & ~FileHBB);
- ei.attackedBy[BLACK][PAWN] = ((pos.pawns(BLACK) >> 7) & ~FileABB) | ((pos.pawns(BLACK) >> 9) & ~FileHBB);
- ei.kingAttackersCount[WHITE] = count_1s_max_15(ei.attackedBy[WHITE][PAWN] & ei.attackedBy[BLACK][KING])/2;
- ei.kingAttackersCount[BLACK] = count_1s_max_15(ei.attackedBy[BLACK][PAWN] & ei.attackedBy[WHITE][KING])/2;
-
- // Evaluate pieces
- for (Color c = WHITE; c <= BLACK; c++)
- {
- // Knights
- for (int i = 0; i < pos.piece_count(c, KNIGHT); i++)
- evaluate_knight(pos, pos.piece_list(c, KNIGHT, i), c, ei);
-
- // Bishops
- for (int i = 0; i < pos.piece_count(c, BISHOP); i++)
- evaluate_bishop(pos, pos.piece_list(c, BISHOP, i), c, ei);
-
- // Rooks
- for (int i = 0; i < pos.piece_count(c, ROOK); i++)
- evaluate_rook(pos, pos.piece_list(c, ROOK, i), c, ei);
-
- // Queens
- for(int i = 0; i < pos.piece_count(c, QUEEN); i++)
- evaluate_queen(pos, pos.piece_list(c, QUEEN, i), c, ei);
+ 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)
+ ei.kingAttackersCount[WHITE] = count_1s_max_15<HasPopCnt>(b1)/2;