mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 08:13:08 +00:00
Another push to perft speed
We don't need to generate captures and non captures in a separate step. This gives another 7% push to perft speed. yes, I know, it is totally useless :-) No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
3a2cd37080
commit
be540b6dd7
2 changed files with 29 additions and 5 deletions
|
@ -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<PAWN, CAPTURE>(pos, mlist, us, target);
|
||||||
|
mlist = generate_piece_moves<PAWN, NON_CAPTURE>(pos, mlist, us, pos.empty_squares());
|
||||||
|
|
||||||
|
target |= pos.empty_squares();
|
||||||
|
|
||||||
|
mlist = generate_piece_moves<KNIGHT>(pos, mlist, us, target);
|
||||||
|
mlist = generate_piece_moves<BISHOP>(pos, mlist, us, target);
|
||||||
|
mlist = generate_piece_moves<ROOK>(pos, mlist, us, target);
|
||||||
|
mlist = generate_piece_moves<QUEEN>(pos, mlist, us, target);
|
||||||
|
mlist = generate_piece_moves<KING>(pos, mlist, us, target);
|
||||||
|
mlist = generate_castle_moves<KING_SIDE>(pos, mlist);
|
||||||
|
return generate_castle_moves<QUEEN_SIDE>(pos, mlist);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// generate_non_capture_checks() generates all pseudo-legal non-captures and knight
|
/// 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.
|
/// 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());
|
Bitboard pinned = pos.pinned_pieces(pos.side_to_move());
|
||||||
|
|
||||||
// Generate pseudo-legal moves
|
// Generate pseudo-legal moves
|
||||||
if (pos.is_check())
|
last = pos.is_check() ? generate_evasions(pos, mlist)
|
||||||
last = generate_evasions(pos, mlist);
|
: generate_non_evasions(pos, mlist);
|
||||||
else
|
|
||||||
last = generate_noncaptures(pos, generate_captures(pos, mlist));
|
|
||||||
|
|
||||||
if (pseudoLegal)
|
if (pseudoLegal)
|
||||||
return last;
|
return last;
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ extern MoveStack* generate_captures(const Position& pos, MoveStack* mlist);
|
||||||
extern MoveStack* generate_noncaptures(const Position& pos, MoveStack* mlist);
|
extern MoveStack* generate_noncaptures(const Position& pos, MoveStack* mlist);
|
||||||
extern MoveStack* generate_non_capture_checks(const Position& pos, MoveStack* mlist);
|
extern MoveStack* generate_non_capture_checks(const Position& pos, MoveStack* mlist);
|
||||||
extern MoveStack* generate_evasions(const Position& pos, MoveStack* mlist);
|
extern MoveStack* generate_evasions(const Position& pos, MoveStack* mlist);
|
||||||
|
extern MoveStack* generate_non_evasions(const Position& pos, MoveStack* mlist);
|
||||||
extern MoveStack* generate_moves(const Position& pos, MoveStack* mlist, bool pseudoLegal = false);
|
extern MoveStack* generate_moves(const Position& pos, MoveStack* mlist, bool pseudoLegal = false);
|
||||||
extern bool move_is_legal(const Position& pos, const Move m, Bitboard pinned);
|
extern bool move_is_legal(const Position& pos, const Move m, Bitboard pinned);
|
||||||
extern bool move_is_legal(const Position& pos, const Move m);
|
extern bool move_is_legal(const Position& pos, const Move m);
|
||||||
|
|
Loading…
Add table
Reference in a new issue