From: Marco Costalba Date: Mon, 27 Apr 2009 15:39:59 +0000 (+0200) Subject: Micro optimize Position::move_is_check() X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=ab69f50c64ef6ec18963630b748285115cb55266 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 --- diff --git a/src/direction.h b/src/direction.h index 4ca264a0..f2ba6ec3 100644 --- a/src/direction.h +++ b/src/direction.h @@ -74,6 +74,13 @@ inline SignedDirection signed_direction_between_squares(Square s1, Square 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 diff --git a/src/position.cpp b/src/position.cpp index 2ede62fe..5a42792e 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -599,19 +599,17 @@ bool Position::move_is_check(Move m, Bitboard dcCandidates) const { case BISHOP: return (dcCandidates && bit_is_set(dcCandidates, from)) - || ( direction_between_squares(ksq, to) != DIR_NONE - && bit_is_set(piece_attacks(ksq), to)); + || (direction_is_diagonal(ksq, to) && bit_is_set(piece_attacks(ksq), to)); case ROOK: return (dcCandidates && bit_is_set(dcCandidates, from)) - || ( direction_between_squares(ksq, to) != DIR_NONE - && bit_is_set(piece_attacks(ksq), to)); + || (direction_is_straight(ksq, to) && bit_is_set(piece_attacks(ksq), to)); case QUEEN: // Discovered checks are impossible! assert(!bit_is_set(dcCandidates, from)); - return ( direction_between_squares(ksq, to) != DIR_NONE - && bit_is_set(piece_attacks(ksq), to)); + return ( (direction_is_straight(ksq, to) && bit_is_set(piece_attacks(ksq), to)) + || (direction_is_diagonal(ksq, to) && bit_is_set(piece_attacks(ksq), to))); case KING: // Discovered check?