- if ( (Pt == QUEEN && !(QueenPseudoAttacks[from] & checkSqs))
- || (Pt == ROOK && !(RookPseudoAttacks[from] & checkSqs))
- || (Pt == BISHOP && !(BishopPseudoAttacks[from] & checkSqs)))
- continue;
-
- if (dc && bit_is_set(dc, from))
- continue;
-
- b = pos.attacks_from<Pt>(from) & checkSqs;
- SERIALIZE_MOVES(b);
-
- } while ((from = *pl++) != SQ_NONE);
-
- return mlist;
- }
-
-
- template<>
- FORCE_INLINE MoveStack* generate_direct_checks<PAWN>(const Position& p, MoveStack* m, Color us, Bitboard dc, Square ksq) {
-
- return (us == WHITE ? generate_pawn_moves<WHITE, MV_CHECK>(p, m, dc, ksq)
- : generate_pawn_moves<BLACK, MV_CHECK>(p, m, dc, ksq));
- }
-
-
- template<PieceType Pt, MoveType Type>
- FORCE_INLINE MoveStack* generate_piece_moves(const Position& p, MoveStack* m, Color us, Bitboard t) {
-
- assert(Pt == PAWN);
- return (us == WHITE ? generate_pawn_moves<WHITE, Type>(p, m, t, SQ_NONE)
- : generate_pawn_moves<BLACK, Type>(p, m, t, SQ_NONE));
- }