- // evaluate_mobility() computes mobility and attacks for every piece
-
- template<PieceType Piece, Color Us, bool HasPopCnt>
- int evaluate_mobility(Bitboard b, Bitboard mob_area, EvalInfo& ei) {
-
- const Color Them = (Us == WHITE ? BLACK : WHITE);
-
- // Update attack info
- ei.attackedBy[Us][Piece] |= b;
-
- // King attacks
- if (b & ei.kingZone[Us])
- {
- ei.kingAttackersCount[Us]++;
- ei.kingAttackersWeight[Us] += AttackWeight[Piece];
- Bitboard bb = (b & ei.attackedBy[Them][KING]);
- if (bb)
- ei.kingAdjacentZoneAttacksCount[Us] += count_1s_max_15<HasPopCnt>(bb);
- }
-
- // Mobility
- int mob = (Piece != QUEEN ? count_1s_max_15<HasPopCnt>(b & mob_area)
- : count_1s<HasPopCnt>(b & mob_area));
-
- ei.mobility += Sign[Us] * MobilityBonus[Piece][mob];
- return mob;
- }
-
-