]> git.sesse.net Git - stockfish/blobdiff - src/bitboard.cpp
Restore MS1BTable[]
[stockfish] / src / bitboard.cpp
index 84e576c62d1577a3615e4e11f465ae8bb3d82c45..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
 
@@ -138,14 +139,42 @@ Square pop_1st_bit(Bitboard* b) {
    return Square(BSFTable[((~(u.b.h ^ (u.b.h - 1))) * 0x783A9B23) >> 26]);
 }
 
-#endif // !defined(USE_BSFQ)
+Square last_1(Bitboard b) {
+
+  int result = 0;
+
+  if (b > 0xFFFFFFFF)
+  {
+      b >>= 32;
+      result = 32;
+  }
 
+  if (b > 0xFFFF)
+  {
+      b >>= 16;
+      result += 16;
+  }
+
+  if (b > 0xFF)
+  {
+      b >>= 8;
+      result += 8;
+  }
+
+  return Square(result + MS1BTable[b]);
+}
+
+#endif // !defined(USE_BSFQ)
 
 /// bitboards_init() initializes various bitboard arrays. It is called during
 /// program initialization.
 
 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);