From 190f88e5324ffd048c5234e78b41748432dc7579 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Thu, 18 Jun 2009 15:22:39 +0200 Subject: [PATCH] Skip castle rights update when not needed Micro optimization in do_move(), a quick check avoid us to update castle rights in almost 90% of cases. No functional change. Signed-off-by: Marco Costalba --- src/position.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/position.cpp b/src/position.cpp index 3ae7f50d..c17c5c57 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -796,11 +796,14 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) { pieceList[us][piece][index[from]] = to; index[to] = index[from]; - // Update castle rights - st->key ^= zobCastle[st->castleRights]; - st->castleRights &= castleRightsMask[from]; - st->castleRights &= castleRightsMask[to]; - st->key ^= zobCastle[st->castleRights]; + // Update castle rights, try to shortcut a common case + if ((castleRightsMask[from] & castleRightsMask[to]) != ALL_CASTLES) + { + st->key ^= zobCastle[st->castleRights]; + st->castleRights &= castleRightsMask[from]; + st->castleRights &= castleRightsMask[to]; + st->key ^= zobCastle[st->castleRights]; + } // Update checkers bitboard, piece must be already moved st->checkersBB = EmptyBoardBB; -- 2.39.2