- // Single pawn pushes
- b2 = b1 = move_pawns<Us, DELTA_N>(pawns) & emptySquares & ~TRank8BB;
- SERIALIZE_MOVES_D(b2, -TDELTA_N);
-
- // Double pawn pushes
- b2 = move_pawns<Us, DELTA_N>(b1 & TRank3BB) & emptySquares;
- SERIALIZE_MOVES_D(b2, -TDELTA_N -TDELTA_N);
- return mlist;
- }
-
-
- template<Color Us>
- MoveStack* generate_pawn_checks(const Position& pos, Bitboard dc, Square ksq, MoveStack* mlist)
- {
- // Calculate our parametrized parameters at compile time
- const Color Them = (Us == WHITE ? BLACK : WHITE);
- const Bitboard TRank8BB = (Us == WHITE ? Rank8BB : Rank1BB);
- const Bitboard TRank3BB = (Us == WHITE ? Rank3BB : Rank6BB);
- const SquareDelta TDELTA_N = (Us == WHITE ? DELTA_N : DELTA_S);
- const SquareDelta TDELTA_S = (Us == WHITE ? DELTA_S : DELTA_N);
-
- Square to;
- Bitboard b1, b2, b3;
- Bitboard pawns = pos.pawns(Us);
-
- if (dc & pawns)