- // De Bruijn sequences. See chessprogramming.wikispaces.com/BitScan
- const uint64_t DeBruijn_64 = 0x3F79D71B4CB0A89ULL;
- const uint32_t DeBruijn_32 = 0x783A9B23;
-
- CACHE_LINE_ALIGNMENT
-
- int MS1BTable[256];
- Square BSFTable[SQUARE_NB];
- Bitboard RTable[0x19000]; // Storage space for rook attacks
- Bitboard BTable[0x1480]; // Storage space for bishop attacks
-
- typedef unsigned (Fn)(Square, Bitboard);
-
- void init_magics(Bitboard table[], Bitboard* attacks[], Bitboard magics[],
- Bitboard masks[], unsigned shifts[], Square deltas[], Fn index);
-
- FORCE_INLINE unsigned bsf_index(Bitboard b) {
-
- // Matt Taylor's folding for 32 bit systems, extended to 64 bits by Kim Walisch
- b ^= (b - 1);
- return Is64Bit ? (b * DeBruijn_64) >> 58
- : ((unsigned(b) ^ unsigned(b >> 32)) * DeBruijn_32) >> 26;
- }
-}
-
-/// lsb()/msb() finds the least/most significant bit in a non-zero bitboard.
-/// pop_lsb() finds and clears the least significant bit in a non-zero bitboard.
-
-#ifndef USE_BSFQ
-
-Square lsb(Bitboard b) { return BSFTable[bsf_index(b)]; }
-
-Square pop_lsb(Bitboard* b) {