Micro optimize and rename move_promotion()
authorMarco Costalba <mcostalba@gmail.com>
Sat, 20 Jun 2009 07:31:39 +0000 (08:31 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 20 Jun 2009 08:04:32 +0000 (09:04 +0100)
Rename to move_is_promotion() to be more clear, also add
a new function move_promotion_piece() to get the
promotion piece type in the few places where is needed.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/move.cpp
src/move.h
src/movegen.cpp
src/movepick.cpp
src/position.cpp
src/san.cpp
src/search.cpp

index e7b9257..065fd23 100644 (file)
@@ -129,8 +129,8 @@ const std::string move_to_string(Move move) {
               return (from == SQ_E1 ? "e1c1" : "e8c8");
       }
       str = square_to_string(from) + square_to_string(to);
-      if (move_promotion(move))
-          str += piece_type_to_char(move_promotion(move), false);
+      if (move_is_promotion(move))
+          str += piece_type_to_char(move_promotion_piece(move), false);
   }
   return str;
 }
index 5a58afe..672eade 100644 (file)
@@ -78,10 +78,14 @@ inline Square move_to(Move m) {
   return Square(m & 0x3F);
 }
 
-inline PieceType move_promotion(Move m) {
+inline PieceType move_promotion_piece(Move m) {
   return PieceType((int(m) >> 12) & 7);
 }
 
+inline int move_is_promotion(Move m) {
+  return m & (7 << 12);
+}
+
 inline int move_is_ep(Move m) {
   return m & (1 << 15);
 }
index 7558c89..33da450 100644 (file)
@@ -506,7 +506,7 @@ bool move_is_legal(const Position& pos, const Move m, Bitboard pinned) {
       // be a promotion.
       if (   (  (square_rank(to) == RANK_8 && us == WHITE)
               ||(square_rank(to) == RANK_1 && us != WHITE))
-           && !move_promotion(m))
+           && !move_is_promotion(m))
           return false;
 
       // Proceed according to the square delta between the source and
@@ -560,7 +560,7 @@ bool move_is_legal(const Position& pos, const Move m, Bitboard pinned) {
   // Luckly we can handle all the other pieces in one go
   return (   pos.piece_attacks_square(pos.piece_on(from), from, to)
           && pos.pl_move_is_legal(m, pinned)
-          && !move_promotion(m));
+          && !move_is_promotion(m));
 }
 
 
index 4b08e1b..cea4efb 100644 (file)
@@ -247,7 +247,7 @@ void MovePicker::score_captures() {
       seeValue = pos.see(m);
       if (seeValue >= 0)
       {
-          if (move_promotion(m))
+          if (move_is_promotion(m))
               moves[i].score = QueenValueMidgame;
           else
               moves[i].score = int(pos.midgame_value_of_piece_on(move_to(m)))
@@ -307,7 +307,7 @@ void MovePicker::score_qcaptures() {
   for (int i = 0; i < numOfMoves; i++)
   {
       Move m = moves[i].move;
-      if (move_promotion(m))
+      if (move_is_promotion(m))
           moves[i].score = QueenValueMidgame;
       else
           moves[i].score = int(pos.midgame_value_of_piece_on(move_to(m)))
index c17c5c5..64b8338 100644 (file)
@@ -555,12 +555,12 @@ bool Position::move_is_check(Move m, Bitboard dcCandidates) const {
           && (direction_between_squares(from, ksq) != direction_between_squares(to, ksq)))
           return true;
 
-      if (move_promotion(m)) // Promotion with check?
+      if (move_is_promotion(m)) // Promotion with check?
       {
           Bitboard b = occupied_squares();
           clear_bit(&b, from);
 
-          switch (move_promotion(m))
+          switch (move_promotion_piece(m))
           {
           case KNIGHT:
               return bit_is_set(piece_attacks<KNIGHT>(to), ksq);
@@ -721,7 +721,7 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) {
 
   if (move_is_castle(m))
       do_castle_move(m);
-  else if (move_promotion(m))
+  else if (move_is_promotion(m))
       do_promotion_move(m);
   else if (move_is_ep(m))
       do_ep_move(m);
@@ -1005,7 +1005,7 @@ void Position::do_promotion_move(Move m) {
   board[from] = EMPTY;
 
   // Insert promoted piece
-  promotion = move_promotion(m);
+  promotion = move_promotion_piece(m);
   assert(promotion >= KNIGHT && promotion <= QUEEN);
   set_bit(&(byColorBB[us]), to);
   set_bit(&(byTypeBB[promotion]), to);
@@ -1152,7 +1152,7 @@ void Position::undo_move(Move m) {
 
   if (move_is_castle(m))
       undo_castle_move(m);
-  else if (move_promotion(m))
+  else if (move_is_promotion(m))
       undo_promotion_move(m);
   else if (move_is_ep(m))
       undo_ep_move(m);
@@ -1304,7 +1304,7 @@ void Position::undo_promotion_move(Move m) {
   assert(piece_on(from) == EMPTY);
 
   // Remove promoted piece
-  promotion = move_promotion(m);
+  promotion = move_promotion_piece(m);
   assert(piece_on(to)==piece_of_color_and_type(us, promotion));
   assert(promotion >= KNIGHT && promotion <= QUEEN);
   clear_bit(&(byColorBB[us]), to);
index b53b201..0aa8318 100644 (file)
@@ -113,10 +113,10 @@ const string move_to_san(const Position& pos, Move m) {
           san += "x";
       }
       san += square_to_string(move_to(m));
-      if (move_promotion(m))
+      if (move_is_promotion(m))
       {
           san += '=';
-          san += piece_type_to_char(move_promotion(m), true);
+          san += piece_type_to_char(move_promotion_piece(m), true);
       }
   }
   // Is the move check?  We don't use pos.move_is_check(m) here, because
@@ -273,7 +273,7 @@ Move move_from_san(const Position& pos, const string& movestr) {
   while ((m = mp.get_next_move()) != MOVE_NONE)
       if (   pos.type_of_piece_on(move_from(m)) == pt
           && move_to(m) == to
-          && move_promotion(m) == promotion
+          && move_promotion_piece(m) == promotion
           && (fromFile == FILE_NONE || fromFile == square_file(move_from(m)))
           && (fromRank == RANK_NONE || fromRank == square_rank(move_from(m))))
       {
index 7e501fc..6b6ad24 100644 (file)
@@ -1086,7 +1086,7 @@ namespace {
             &&  moveCount >= LMRPVMoves
             && !dangerous
             && !moveIsCapture
-            && !move_promotion(move)
+            && !move_is_promotion(move)
             && !move_is_castle(move)
             && !move_is_killer(move, ss[ply]))
         {
@@ -1337,7 +1337,7 @@ namespace {
       if (    useFutilityPruning
           && !dangerous
           && !moveIsCapture
-          && !move_promotion(move))
+          && !move_is_promotion(move))
       {
           // History pruning. See ok_to_prune() definition
           if (   moveCount >= 2 + int(depth)
@@ -1370,7 +1370,7 @@ namespace {
           &&  moveCount >= LMRNonPVMoves
           && !dangerous
           && !moveIsCapture
-          && !move_promotion(move)
+          && !move_is_promotion(move)
           && !move_is_castle(move)
           && !move_is_killer(move, ss[ply]))
       {
@@ -1545,7 +1545,7 @@ namespace {
       if (   enoughMaterial
           && !isCheck
           && !pvNode
-          && !move_promotion(move)
+          && !move_is_promotion(move)
           && !pos.move_is_check(move, dcCandidates)
           && !pos.move_is_passed_pawn_push(move))
       {
@@ -1566,7 +1566,7 @@ namespace {
 
       // Don't search captures and checks with negative SEE values
       if (   !isCheck
-          && !move_promotion(move)
+          && !move_is_promotion(move)
           && (pos.midgame_value_of_piece_on(move_from(move)) >
               pos.midgame_value_of_piece_on(move_to(move)))
           &&  pos.see(move) < 0)
@@ -1663,7 +1663,7 @@ namespace {
       if (    useFutilityPruning
           && !dangerous
           && !moveIsCapture
-          && !move_promotion(move)
+          && !move_is_promotion(move)
           &&  moveCount >= 2 + int(sp->depth)
           &&  ok_to_prune(pos, move, ss[sp->ply].threatMove, sp->depth, Threads[threadID].H))
         continue;
@@ -1677,7 +1677,7 @@ namespace {
       if (   !dangerous
           &&  moveCount >= LMRNonPVMoves
           && !moveIsCapture
-          && !move_promotion(move)
+          && !move_is_promotion(move)
           && !move_is_castle(move)
           && !move_is_killer(move, ss[sp->ply]))
       {
@@ -1780,7 +1780,7 @@ namespace {
       if (   !dangerous
           &&  moveCount >= LMRPVMoves
           && !moveIsCapture
-          && !move_promotion(move)
+          && !move_is_promotion(move)
           && !move_is_castle(move)
           && !move_is_killer(move, ss[sp->ply]))
       {
@@ -2236,7 +2236,7 @@ namespace {
         && pos.type_of_piece_on(move_to(m)) != PAWN
         && (  pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK)
             - pos.midgame_value_of_piece_on(move_to(m)) == Value(0))
-        && !move_promotion(m)
+        && !move_is_promotion(m)
         && !move_is_ep(m))
     {
         result += PawnEndgameExtension[pvNode];
@@ -2347,7 +2347,7 @@ namespace {
 
   bool ok_to_history(const Position& pos, Move m) {
 
-    return !pos.move_is_capture(m) && !move_promotion(m);
+    return !pos.move_is_capture(m) && !move_is_promotion(m);
   }