Restore MS1BTable[]
authorMarco Costalba <mcostalba@gmail.com>
Wed, 28 Mar 2012 18:01:37 +0000 (19:01 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Wed, 28 Mar 2012 18:11:37 +0000 (19:11 +0100)
Incredible typo from my side!

The 2 tables are completely different, one counts 1s the
other returns the msb position. Even more incredible
the 'stockfish bench' command returns the same number
of nodes!!!

Spotted by Justin Blanchard.

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

index 64cba6b5fc301322299a0eb3cf0d8c5102b07867..36d582d3a6a2ebec48639658a20241f6efb11786 100644 (file)
@@ -58,6 +58,7 @@ namespace {
   CACHE_LINE_ALIGNMENT
 
   int BSFTable[64];
+  int MS1BTable[256];
   Bitboard RTable[0x19000]; // Storage space for rook attacks
   Bitboard BTable[0x1480];  // Storage space for bishop attacks
 
@@ -160,7 +161,7 @@ Square last_1(Bitboard b) {
       result += 8;
   }
 
-  return Square(result + BitCount8Bit[b]);
+  return Square(result + MS1BTable[b]);
 }
 
 #endif // !defined(USE_BSFQ)
@@ -170,6 +171,10 @@ Square last_1(Bitboard b) {
 
 void bitboards_init() {
 
+  for (int k = 0, i = 0; i < 8; i++)
+      while (k < (2 << i))
+          MS1BTable[k++] = i;
+
   for (Bitboard b = 0; b < 256; b++)
       BitCount8Bit[b] = (uint8_t)popcount<Max15>(b);