Micro-optimize last_1() for 32bits
authorMarco Costalba <mcostalba@gmail.com>
Wed, 4 Apr 2012 05:52:07 +0000 (06:52 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Wed, 4 Apr 2012 05:54:48 +0000 (06:54 +0100)
Verified assembly it is a bit simpler.

No functional change.

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

index 41ce2955c147f27b2960130d0c2ec2ffa8c7d5f7..321055e826dba25609ab2ce00e0f5743080fcca7 100644 (file)
@@ -123,6 +123,7 @@ Square pop_1st_bit(Bitboard* b) {
 
 Square last_1(Bitboard b) {
 
+  unsigned b32;
   int result = 0;
 
   if (b > 0xFFFFFFFF)
@@ -131,19 +132,21 @@ Square last_1(Bitboard b) {
       result = 32;
   }
 
-  if (b > 0xFFFF)
+  b32 = unsigned(b);
+
+  if (b32 > 0xFFFF)
   {
-      b >>= 16;
+      b32 >>= 16;
       result += 16;
   }
 
-  if (b > 0xFF)
+  if (b32 > 0xFF)
   {
-      b >>= 8;
+      b32 >>= 8;
       result += 8;
   }
 
-  return Square(result + MS1BTable[b]);
+  return Square(result + MS1BTable[b32]);
 }
 
 #endif // !defined(USE_BSFQ)