- ExtMove* generate_all(const Position& pos, ExtMove* moveList, Bitboard target) {
- constexpr bool Checks = Type == QUIET_CHECKS; // Reduce template instantations
+ ExtMove* generate_all(const Position& pos, ExtMove* moveList) {
+
+ static_assert(Type != LEGAL, "Unsupported type in generate_all()");
+
+ constexpr bool Checks = Type == QUIET_CHECKS; // Reduce template instantiations
+ Bitboard target, piecesToMove = pos.pieces(Us);
+
+ if(Type == QUIET_CHECKS)
+ piecesToMove &= ~pos.blockers_for_king(~Us);
+
+ switch (Type)
+ {
+ case CAPTURES:
+ target = pos.pieces(~Us);
+ break;
+ case QUIETS:
+ case QUIET_CHECKS:
+ target = ~pos.pieces();
+ break;
+ case EVASIONS:
+ target = between_bb(pos.square<KING>(Us), lsb(pos.checkers()));
+ break;
+ case NON_EVASIONS:
+ target = ~pos.pieces(Us);
+ break;
+ }