- *b &= (*b - 1);
- return Square(BSFTable[((bb & -bb) * 0x218A392CD3D5DBFULL) >> 58]);
-}
-
-#elif !defined(USE_BSFQ)
-
-Square first_1(Bitboard b) {
- b ^= (b - 1);
- uint32_t fold = unsigned(b) ^ unsigned(b >> 32);
- return Square(BSFTable[(fold * 0x783A9B23) >> 26]);
-}
-
-// Use type-punning
-union b_union {
-
- Bitboard dummy;
- struct {
-#if defined (BIGENDIAN)
- uint32_t h;
- uint32_t l;
-#else
- uint32_t l;
- uint32_t h;
-#endif
- } b;
-};
-
-Square pop_1st_bit(Bitboard* b) {
-
- const b_union u = *((b_union*)b);
-
- if (u.b.l)
- {
- ((b_union*)b)->b.l = u.b.l & (u.b.l - 1);
- return Square(BSFTable[((u.b.l ^ (u.b.l - 1)) * 0x783A9B23) >> 26]);
- }
-
- ((b_union*)b)->b.h = u.b.h & (u.b.h - 1);
- return Square(BSFTable[((~(u.b.h ^ (u.b.h - 1))) * 0x783A9B23) >> 26]);