#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
FORCE_INLINE Square first_1(Bitboard b) {
- unsigned long index;
- _BitScanForward64(&index, b);
- return (Square) index;
+ unsigned long index;
+ _BitScanForward64(&index, b);
+ return (Square) index;
+}
+
+FORCE_INLINE Square last_1(Bitboard b) {
+ unsigned long index;
+ _BitScanReverse64(&index, b);
+ return (Square) index;
}
#else
__asm__("bsfq %1, %0": "=r"(dummy): "rm"(b) );
return (Square) dummy;
}
+
+FORCE_INLINE Square last_1(Bitboard b) {
+ Bitboard dummy;
+ __asm__("bsrq %1, %0": "=r"(dummy): "rm"(b) );
+ return (Square) dummy;
+}
#endif
FORCE_INLINE Square pop_1st_bit(Bitboard* b) {
#else // if !defined(USE_BSFQ)
extern Square first_1(Bitboard b);
+extern Square last_1(Bitboard b);
extern Square pop_1st_bit(Bitboard* b);
#endif
-
extern void print_bitboard(Bitboard b);
extern void bitboards_init();