1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

Micro optimize Position::move_is_check()

More then optimization it is worth a bit of better
code self documenting.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2009-04-27 17:39:59 +02:00
parent b35e593551
commit ab69f50c64
2 changed files with 11 additions and 6 deletions

View file

@ -74,6 +74,13 @@ inline SignedDirection signed_direction_between_squares(Square s1, Square s2) {
return SignedDirection(SignedDirectionTable[s1][s2]); return SignedDirection(SignedDirectionTable[s1][s2]);
} }
inline bool direction_is_diagonal(Square s1, Square s2) {
return DirectionTable[s1][s2] & 2;
}
inline bool direction_is_straight(Square s1, Square s2) {
return DirectionTable[s1][s2] < 2;
}
//// ////
//// Prototypes //// Prototypes

View file

@ -599,19 +599,17 @@ bool Position::move_is_check(Move m, Bitboard dcCandidates) const {
case BISHOP: case BISHOP:
return (dcCandidates && bit_is_set(dcCandidates, from)) return (dcCandidates && bit_is_set(dcCandidates, from))
|| ( direction_between_squares(ksq, to) != DIR_NONE || (direction_is_diagonal(ksq, to) && bit_is_set(piece_attacks<BISHOP>(ksq), to));
&& bit_is_set(piece_attacks<BISHOP>(ksq), to));
case ROOK: case ROOK:
return (dcCandidates && bit_is_set(dcCandidates, from)) return (dcCandidates && bit_is_set(dcCandidates, from))
|| ( direction_between_squares(ksq, to) != DIR_NONE || (direction_is_straight(ksq, to) && bit_is_set(piece_attacks<ROOK>(ksq), to));
&& bit_is_set(piece_attacks<ROOK>(ksq), to));
case QUEEN: case QUEEN:
// Discovered checks are impossible! // Discovered checks are impossible!
assert(!bit_is_set(dcCandidates, from)); assert(!bit_is_set(dcCandidates, from));
return ( direction_between_squares(ksq, to) != DIR_NONE return ( (direction_is_straight(ksq, to) && bit_is_set(piece_attacks<ROOK>(ksq), to))
&& bit_is_set(piece_attacks<QUEEN>(ksq), to)); || (direction_is_diagonal(ksq, to) && bit_is_set(piece_attacks<BISHOP>(ksq), to)));
case KING: case KING:
// Discovered check? // Discovered check?