X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fbitboard.h;h=f41abeb28c0013ece24cb98a08dd700c1fd0a98c;hp=a704edbe349967ff3bc560275736cc5d9f8c8e7b;hb=e0504ab876a997321102f040ab88203cb893db12;hpb=d30994ecd54bf96db88016fb6d92ff2c4614bc2e diff --git a/src/bitboard.h b/src/bitboard.h index a704edbe..f41abeb2 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -124,13 +124,13 @@ inline Bitboard file_bb(Square s) { } -/// shift_bb() moves a bitboard one step along direction Delta. Mainly for pawns +/// shift() moves a bitboard one step along direction D. Mainly for pawns -template -inline Bitboard shift_bb(Bitboard b) { - return Delta == DELTA_N ? b << 8 : Delta == DELTA_S ? b >> 8 - : Delta == DELTA_NE ? (b & ~FileHBB) << 9 : Delta == DELTA_SE ? (b & ~FileHBB) >> 7 - : Delta == DELTA_NW ? (b & ~FileABB) << 7 : Delta == DELTA_SW ? (b & ~FileABB) >> 9 +template +inline Bitboard shift(Bitboard b) { + return D == NORTH ? b << 8 : D == SOUTH ? b >> 8 + : D == NORTH_EAST ? (b & ~FileHBB) << 9 : D == SOUTH_EAST ? (b & ~FileHBB) >> 7 + : D == NORTH_WEST ? (b & ~FileABB) << 7 : D == SOUTH_WEST ? (b & ~FileABB) >> 9 : 0; } @@ -268,13 +268,9 @@ inline int popcount(Bitboard b) { union { Bitboard bb; uint16_t u[4]; } v = { b }; return PopCnt16[v.u[0]] + PopCnt16[v.u[1]] + PopCnt16[v.u[2]] + PopCnt16[v.u[3]]; -#elif defined(_MSC_VER) && defined(__INTEL_COMPILER) +#elif defined(_MSC_VER) || defined(__INTEL_COMPILER) - return _mm_popcnt_u64(b); - -#elif defined(_MSC_VER) - - return (int)__popcnt64(b); + return (int)_mm_popcnt_u64(b); #else // Assumed gcc or compatible compiler @@ -295,7 +291,7 @@ inline Square lsb(Bitboard b) { inline Square msb(Bitboard b) { assert(b); - return Square(63 - __builtin_clzll(b)); + return Square(63 ^ __builtin_clzll(b)); } #elif defined(_WIN64) && defined(_MSC_VER)