From 22c557ca7ce957cfb164c56dd149f22e2f11c7f9 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Wed, 5 Dec 2012 11:05:32 +0100 Subject: [PATCH 1/1] Micro-optimize color_of() In almost all cases we already know in advance that color_of() argument is different from NO_PIECE. So avoid the check for NO_PIECE in color_of() and test at caller site in the very few places where this case could occur. As a nice side effect, this patch fixes a (bogus) warning under some versions of gcc. No functional change. Signed-off-by: Marco Costalba --- src/position.cpp | 6 +++--- src/types.h | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/position.cpp b/src/position.cpp index a0d5730c..37b5c049 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -561,7 +561,7 @@ bool Position::is_pseudo_legal(const Move m) const { return false; // The destination square cannot be occupied by a friendly piece - if (color_of(piece_on(to)) == us) + if (piece_on(to) != NO_PIECE && color_of(piece_on(to)) == us) return false; // Handle the special case of a pawn move @@ -587,7 +587,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 (color_of(piece_on(to)) != them) + if (piece_on(to) == NO_PIECE || color_of(piece_on(to)) != them) return false; // From and to files must be one file apart, avoids a7h5 @@ -772,7 +772,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI PieceType capture = type_of(m) == ENPASSANT ? PAWN : type_of(piece_on(to)); assert(color_of(piece) == us); - assert(color_of(piece_on(to)) != us); + assert(piece_on(to) == NO_PIECE || color_of(piece_on(to)) == them); assert(capture != KING); if (capture) diff --git a/src/types.h b/src/types.h index 9b36fd89..99567bd7 100644 --- a/src/types.h +++ b/src/types.h @@ -35,6 +35,7 @@ /// | only in 64-bit mode. For compiling requires hardware with /// | popcnt support. +#include #include #include #include @@ -391,7 +392,8 @@ inline PieceType type_of(Piece p) { } inline Color color_of(Piece p) { - return p == NO_PIECE ? NO_COLOR : Color(p >> 3); + assert(p != NO_PIECE); + return Color(p >> 3); } inline bool is_ok(Square s) { -- 2.39.2