From 67535711e8d86a975ff9aac9c2d2fdad24ec5915 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Wed, 11 Feb 2009 12:13:58 +0100 Subject: [PATCH] generate_evasions() avoid to calculate pinned pieces Pass as function argument. No functional change. Signed-off-by: Marco Costalba --- src/movegen.cpp | 12 +++++------- src/movegen.h | 2 +- src/movepick.cpp | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/movegen.cpp b/src/movegen.cpp index 4bb2a7f7..f30d4572 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -204,7 +204,7 @@ int generate_checks(const Position& pos, MoveStack* mlist, Bitboard dc) { /// only legal moves. It returns the number of generated moves. This /// function is very ugly, and needs cleaning up some time later. FIXME -int generate_evasions(const Position& pos, MoveStack* mlist) { +int generate_evasions(const Position& pos, MoveStack* mlist, Bitboard pinned) { assert(pos.is_ok()); assert(pos.is_check()); @@ -265,12 +265,10 @@ int generate_evasions(const Position& pos, MoveStack* mlist) { if (!(checkers & (checkers - 1))) // Only one bit set? { Square checksq = first_1(checkers); + Bitboard not_pinned = ~pinned; assert(pos.color_of_piece_on(checksq) == them); - // Find pinned pieces - Bitboard not_pinned = ~pos.pinned_pieces(us); - // Generate captures of the checking piece // Pawn captures @@ -361,15 +359,15 @@ int generate_legal_moves(const Position& pos, MoveStack* mlist) { assert(pos.is_ok()); + Bitboard pinned = pos.pinned_pieces(pos.side_to_move()); + if (pos.is_check()) - return generate_evasions(pos, mlist); + return generate_evasions(pos, mlist, pinned); // Generate pseudo-legal moves int n = generate_captures(pos, mlist); n += generate_noncaptures(pos, mlist + n); - Bitboard pinned = pos.pinned_pieces(pos.side_to_move()); - // Remove illegal moves from the list for (int i = 0; i < n; i++) if (!pos.pl_move_is_legal(mlist[i].move, pinned)) diff --git a/src/movegen.h b/src/movegen.h index 034dd389..48e0dec0 100644 --- a/src/movegen.h +++ b/src/movegen.h @@ -35,7 +35,7 @@ extern int generate_captures(const Position &pos, MoveStack *mlist); extern int generate_noncaptures(const Position &pos, MoveStack *mlist); extern int generate_checks(const Position &pos, MoveStack *mlist, Bitboard dc); -extern int generate_evasions(const Position &pos, MoveStack *mlist); +extern int generate_evasions(const Position &pos, MoveStack *mlist, Bitboard pinned); extern int generate_legal_moves(const Position &pos, MoveStack *mlist); extern bool move_is_legal(const Position &pos, const Move m, Bitboard pinned); diff --git a/src/movepick.cpp b/src/movepick.cpp index eb57f78a..67143070 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -162,7 +162,7 @@ Move MovePicker::get_next_move() { case PH_EVASIONS: assert(pos.is_check()); - numOfMoves = generate_evasions(pos, moves); + numOfMoves = generate_evasions(pos, moves, pinned); score_evasions(); movesPicked = 0; break; -- 2.39.2