mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Small tweak in is_pseudo_legal()
This is difficult code becuase a bug here could lead to very subtle crashes in case of SMP games where we have TT move corruption due to concurrent access. Anyhow I have fully verified te code throwing at it random moves. It shoudl work. No functional change.
This commit is contained in:
parent
158014b39d
commit
423c6d8a8a
1 changed files with 4 additions and 7 deletions
|
@ -542,7 +542,6 @@ bool Position::move_is_legal(const Move m) const {
|
|||
bool Position::is_pseudo_legal(const Move m) const {
|
||||
|
||||
Color us = sideToMove;
|
||||
Color them = ~sideToMove;
|
||||
Square from = from_sq(m);
|
||||
Square to = to_sq(m);
|
||||
Piece pc = piece_moved(m);
|
||||
|
@ -587,7 +586,7 @@ bool Position::is_pseudo_legal(const Move m) const {
|
|||
case DELTA_SE:
|
||||
// Capture. The destination square must be occupied by an enemy
|
||||
// piece (en passant captures was handled earlier).
|
||||
if (piece_on(to) == NO_PIECE || color_of(piece_on(to)) != them)
|
||||
if (piece_on(to) == NO_PIECE || color_of(piece_on(to)) != ~us)
|
||||
return false;
|
||||
|
||||
// From and to files must be one file apart, avoids a7h5
|
||||
|
@ -636,14 +635,12 @@ bool Position::is_pseudo_legal(const Move m) const {
|
|||
{
|
||||
if (type_of(pc) != KING)
|
||||
{
|
||||
Bitboard b = checkers();
|
||||
Square checksq = pop_lsb(&b);
|
||||
|
||||
if (b) // double check ? In this case a king move is required
|
||||
// Double check? In this case a king move is required
|
||||
if (more_than_one(checkers()))
|
||||
return false;
|
||||
|
||||
// Our move must be a blocking evasion or a capture of the checking piece
|
||||
if (!((between_bb(checksq, king_square(us)) | checkers()) & to))
|
||||
if (!((between_bb(lsb(checkers()), king_square(us)) | checkers()) & to))
|
||||
return false;
|
||||
}
|
||||
// In case of king moves under check we have to remove king so to catch
|
||||
|
|
Loading…
Add table
Reference in a new issue