X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmovegen.cpp;h=0598249d404e81bfa5fbb64eea5802e8dc47598d;hb=0363b5435847e66678cd3fa0d8a94e30b9a91663;hp=df2b9b87b1b2cd96adb42986b0e14e3be40c81dd;hpb=df7cd94aeeb4e99bed2d46c008efdd5e24085e0f;p=stockfish diff --git a/src/movegen.cpp b/src/movegen.cpp index df2b9b87..0598249d 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -140,6 +140,32 @@ MoveStack* generate_noncaptures(const Position& pos, MoveStack* mlist) { } +/// generate_non_evasions() generates all pseudo-legal captures and +/// non-captures. Returns a pointer to the end of the move list. + +MoveStack* generate_non_evasions(const Position& pos, MoveStack* mlist) { + + assert(pos.is_ok()); + assert(!pos.is_check()); + + Color us = pos.side_to_move(); + Bitboard target = pos.pieces_of_color(opposite_color(us)); + + mlist = generate_piece_moves(pos, mlist, us, target); + mlist = generate_piece_moves(pos, mlist, us, pos.empty_squares()); + + target |= pos.empty_squares(); + + mlist = generate_piece_moves(pos, mlist, us, target); + mlist = generate_piece_moves(pos, mlist, us, target); + mlist = generate_piece_moves(pos, mlist, us, target); + mlist = generate_piece_moves(pos, mlist, us, target); + mlist = generate_piece_moves(pos, mlist, us, target); + mlist = generate_castle_moves(pos, mlist); + return generate_castle_moves(pos, mlist); +} + + /// generate_non_capture_checks() generates all pseudo-legal non-captures and knight /// underpromotions that give check. Returns a pointer to the end of the move list. @@ -260,11 +286,8 @@ MoveStack* generate_moves(const Position& pos, MoveStack* mlist, bool pseudoLega Bitboard pinned = pos.pinned_pieces(pos.side_to_move()); // Generate pseudo-legal moves - if (pos.is_check()) - last = generate_evasions(pos, mlist); - else - last = generate_noncaptures(pos, generate_captures(pos, mlist)); - + last = pos.is_check() ? generate_evasions(pos, mlist) + : generate_non_evasions(pos, mlist); if (pseudoLegal) return last;