Slightly microptimize SEE
authorMarco Costalba <mcostalba@gmail.com>
Fri, 24 Aug 2012 08:30:50 +0000 (09:30 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 24 Aug 2012 08:30:50 +0000 (09:30 +0100)
Reduce of one instruction. It seems a tad faster on
the profiler now. Very slightly but anyhow it is a
code semplification.

No functional change.

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

index 21022ae1b2c18dc7655eef0460d80cd3bdc054db..9be0fe600b7080375b0b28f75a23a282e2c6e9cf 100644 (file)
@@ -1271,12 +1271,11 @@ int Position::see(Move m) const {
       // Locate the least valuable attacker for the side to move. The loop
       // below looks like it is potentially infinite, but it isn't. We know
       // that the side to move still has at least one attacker left.
-      for (pt = PAWN; !(stmAttackers & pieces(pt)); pt++)
+      for (pt = PAWN; (b = stmAttackers & pieces(pt)) == 0; pt++)
           assert(pt < KING);
 
       // Remove the attacker we just found from the 'occupied' bitboard,
       // and scan for new X-ray attacks behind the attacker.
-      b = stmAttackers & pieces(pt);
       occ ^= (b & (~b + 1));
       attackers |=  (attacks_bb<ROOK>(to, occ)   & pieces(ROOK, QUEEN))
                   | (attacks_bb<BISHOP>(to, occ) & pieces(BISHOP, QUEEN));