mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Use intrinsic in pop_1st_bit() under MSVC 64 bits
Around 1% speedup when compiled with MSVC 64 No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
635be39acf
commit
5ea08e79c4
2 changed files with 16 additions and 7 deletions
|
@ -257,15 +257,25 @@ inline bool squares_aligned(Square s1, Square s2, Square s3) {
|
||||||
/// pop_1st_bit() finds and clears the least significant nonzero bit in a
|
/// pop_1st_bit() finds and clears the least significant nonzero bit in a
|
||||||
/// nonzero bitboard.
|
/// nonzero bitboard.
|
||||||
|
|
||||||
#if defined(USE_BSFQ) // Assembly code by Heinz van Saanen
|
#if defined(USE_BSFQ)
|
||||||
|
|
||||||
inline Square first_1(Bitboard b) {
|
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
|
||||||
|
|
||||||
|
FORCE_INLINE Square first_1(Bitboard b) {
|
||||||
|
unsigned long index;
|
||||||
|
_BitScanForward64(&index, b);
|
||||||
|
return (Square) index;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
FORCE_INLINE Square first_1(Bitboard b) { // Assembly code by Heinz van Saanen
|
||||||
Bitboard dummy;
|
Bitboard dummy;
|
||||||
__asm__("bsfq %1, %0": "=r"(dummy): "rm"(b) );
|
__asm__("bsfq %1, %0": "=r"(dummy): "rm"(b) );
|
||||||
return (Square)(dummy);
|
return (Square) dummy;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
inline Square pop_1st_bit(Bitboard* b) {
|
FORCE_INLINE Square pop_1st_bit(Bitboard* b) {
|
||||||
const Square s = first_1(*b);
|
const Square s = first_1(*b);
|
||||||
*b &= ~(1ULL<<s);
|
*b &= ~(1ULL<<s);
|
||||||
return s;
|
return s;
|
||||||
|
|
|
@ -77,9 +77,8 @@ typedef unsigned __int64 uint64_t;
|
||||||
#define IS_64BIT
|
#define IS_64BIT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Automatic detection for use of bsfq asm-instruction under Windows.
|
// Automatic detection for use of bsfq asm-instruction under Windows
|
||||||
// Works only in 64-bit mode. Does not work with MSVC.
|
#if defined(_WIN64)
|
||||||
#if defined(_WIN64) && defined(__INTEL_COMPILER)
|
|
||||||
#define USE_BSFQ
|
#define USE_BSFQ
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue