return Square(BSFTable[((~(u.b.h ^ (u.b.h - 1))) * 0x783A9B23) >> 26]);
}
-#endif // !defined(USE_BSFQ)
-
-#if !defined(USE_BSFQ)
-
Square last_1(Bitboard b) {
+
int result = 0;
- if (b > 0xFFFFFFFF) {
- b >>= 32;
- result = 32;
+
+ if (b > 0xFFFFFFFF)
+ {
+ b >>= 32;
+ result = 32;
}
- if (b > 0xFFFF) {
- b >>= 16;
- result += 16;
+
+ if (b > 0xFFFF)
+ {
+ b >>= 16;
+ result += 16;
}
- if (b > 0xFF) {
- b >>= 8;
- result += 8;
+
+ if (b > 0xFF)
+ {
+ b >>= 8;
+ result += 8;
}
+
return Square(result + MS1BTable[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);
else
BSFTable[((1ULL << i) * 0x218A392CD3D5DBFULL) >> 58] = i;
- MS1BTable[0] = 0;
- for (int i = 0, k = 1; i < 8; i++)
- for (int j = 0; j < (1 << i); j++)
- MS1BTable[k++] = i;
-
int steps[][9] = { {}, { 7, 9 }, { 17, 15, 10, 6, -6, -10, -15, -17 },
{}, {}, {}, { 9, 7, -7, -9, 8, 1, -1, -8 } };