Micro optimize generate_piece_checks() take 2
authorMarco Costalba <mcostalba@gmail.com>
Sun, 19 Apr 2009 19:09:53 +0000 (21:09 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 19 Apr 2009 19:09:53 +0000 (21:09 +0200)
Add some missing bits of this patch.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/movegen.cpp

index d2b55bd..dff9e8c 100644 (file)
@@ -73,9 +73,8 @@ namespace {
         return Us == WHITE ? p << 9 : p >> 7;
     else if (Direction == DELTA_NW)
         return Us == WHITE ? p << 7 : p >> 9;
         return Us == WHITE ? p << 9 : p >> 7;
     else if (Direction == DELTA_NW)
         return Us == WHITE ? p << 7 : p >> 9;
-
-    assert(false);
-    return p;
+    else
+        return p;
   }
 
   // Template generate_piece_checks() with specializations
   }
 
   // Template generate_piece_checks() with specializations
@@ -821,6 +820,11 @@ namespace {
     while (b)
     {
         Square from = pop_1st_bit(&b);
     while (b)
     {
         Square from = pop_1st_bit(&b);
+        if (   (Piece == QUEEN  && !(QueenPseudoAttacks[from]  & checkSqs))
+            || (Piece == ROOK   && !(RookPseudoAttacks[from]   & checkSqs))
+            || (Piece == BISHOP && !(BishopPseudoAttacks[from] & checkSqs)))
+            continue;
+
         Bitboard bb = pos.piece_attacks<Piece>(from) & checkSqs;
         SERIALIZE_MOVES(bb);
     }
         Bitboard bb = pos.piece_attacks<Piece>(from) & checkSqs;
         SERIALIZE_MOVES(bb);
     }