mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Simplify generate<EVASIONS>
No speed regression, tested with both perft and bench. No functional change.
This commit is contained in:
parent
5cf9e0b254
commit
20ff12e1be
1 changed files with 9 additions and 17 deletions
|
@ -365,38 +365,30 @@ ExtMove* generate<EVASIONS>(const Position& pos, ExtMove* mlist) {
|
||||||
|
|
||||||
assert(pos.checkers());
|
assert(pos.checkers());
|
||||||
|
|
||||||
int checkersCnt = 0;
|
|
||||||
Color us = pos.side_to_move();
|
Color us = pos.side_to_move();
|
||||||
Square ksq = pos.king_square(us), checksq;
|
Square ksq = pos.king_square(us);
|
||||||
Bitboard sliderAttacks = 0;
|
Bitboard sliderAttacks = 0;
|
||||||
Bitboard b = pos.checkers();
|
Bitboard sliders = pos.checkers() & ~pos.pieces(KNIGHT) & ~pos.pieces(PAWN);
|
||||||
|
|
||||||
assert(pos.checkers());
|
|
||||||
|
|
||||||
// Find all the squares attacked by slider checkers. We will remove them from
|
// Find all the squares attacked by slider checkers. We will remove them from
|
||||||
// the king evasions in order to skip known illegal moves, which avoids any
|
// the king evasions in order to skip known illegal moves, which avoids any
|
||||||
// useless legality checks later on.
|
// useless legality checks later on.
|
||||||
do
|
while (sliders)
|
||||||
{
|
{
|
||||||
++checkersCnt;
|
Square checksq = pop_lsb(&sliders);
|
||||||
checksq = pop_lsb(&b);
|
sliderAttacks |= LineBB[checksq][ksq] ^ checksq;
|
||||||
|
}
|
||||||
assert(color_of(pos.piece_on(checksq)) == ~us);
|
|
||||||
|
|
||||||
if (type_of(pos.piece_on(checksq)) > KNIGHT) // A slider
|
|
||||||
sliderAttacks |= LineBB[checksq][ksq] ^ checksq;
|
|
||||||
|
|
||||||
} while (b);
|
|
||||||
|
|
||||||
// Generate evasions for king, capture and non capture moves
|
// Generate evasions for king, capture and non capture moves
|
||||||
b = pos.attacks_from<KING>(ksq) & ~pos.pieces(us) & ~sliderAttacks;
|
Bitboard b = pos.attacks_from<KING>(ksq) & ~pos.pieces(us) & ~sliderAttacks;
|
||||||
while (b)
|
while (b)
|
||||||
(mlist++)->move = make_move(ksq, pop_lsb(&b));
|
(mlist++)->move = make_move(ksq, pop_lsb(&b));
|
||||||
|
|
||||||
if (checkersCnt > 1)
|
if (more_than_one(pos.checkers()))
|
||||||
return mlist; // Double check, only a king move can save the day
|
return mlist; // Double check, only a king move can save the day
|
||||||
|
|
||||||
// Generate blocking evasions or captures of the checking piece
|
// Generate blocking evasions or captures of the checking piece
|
||||||
|
Square checksq = lsb(pos.checkers());
|
||||||
Bitboard target = between_bb(checksq, ksq) | checksq;
|
Bitboard target = between_bb(checksq, ksq) | checksq;
|
||||||
|
|
||||||
return us == WHITE ? generate_all<WHITE, EVASIONS>(pos, mlist, target)
|
return us == WHITE ? generate_all<WHITE, EVASIONS>(pos, mlist, target)
|
||||||
|
|
Loading…
Add table
Reference in a new issue