1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 16:53:09 +00:00

Simplify BSFTable initialization

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2012-09-18 10:02:20 +02:00
parent 22a5f91aa7
commit e4a0482e43

View file

@ -62,8 +62,8 @@ namespace {
CACHE_LINE_ALIGNMENT
int BSFTable[64];
int MS1BTable[256];
Square BSFTable[64];
Bitboard RTable[0x19000]; // Storage space for rook attacks
Bitboard BTable[0x1480]; // Storage space for bishop attacks
uint8_t BitCount8Bit[256];
@ -79,27 +79,23 @@ namespace {
#if !defined(USE_BSFQ)
Square lsb(Bitboard b) {
FORCE_INLINE unsigned bsf_index(Bitboard b) {
if (Is64Bit)
return Square(BSFTable[((b & -b) * DeBruijn_64) >> 58]);
return ((b & -b) * DeBruijn_64) >> 58;
// Use Matt Taylor's folding trick for 32 bit systems
b ^= (b - 1);
uint32_t fold = unsigned(b) ^ unsigned(b >> 32);
return Square(BSFTable[(fold * DeBruijn_32) >> 26]);
return ((unsigned(b) ^ unsigned(b >> 32)) * DeBruijn_32) >> 26;
}
Square lsb(Bitboard b) { return BSFTable[bsf_index(b)]; }
Square pop_lsb(Bitboard* b) {
Bitboard bb = *b;
*b = bb & (bb - 1);
if (Is64Bit)
return Square(BSFTable[((bb & -bb) * DeBruijn_64) >> 58]);
bb ^= (bb - 1);
uint32_t fold = unsigned(bb) ^ unsigned(bb >> 32);
return Square(BSFTable[(fold * DeBruijn_32) >> 26]);
return BSFTable[bsf_index(bb)];
}
Square msb(Bitboard b) {
@ -127,7 +123,7 @@ Square msb(Bitboard b) {
result += 8;
}
return Square(result + MS1BTable[b32]);
return (Square)(result + MS1BTable[b32]);
}
#endif // !defined(USE_BSFQ)
@ -162,6 +158,9 @@ void Bitboards::init() {
while (k < (2 << i))
MS1BTable[k++] = i;
for (int i = 0; i < 64; i++)
BSFTable[bsf_index(1ULL << i)] = Square(i);
for (Bitboard b = 0; b < 256; b++)
BitCount8Bit[b] = (uint8_t)popcount<Max15>(b);
@ -204,17 +203,6 @@ void Bitboards::init() {
if (SquareDistance[s1][s2] == d)
DistanceRingsBB[s1][d - 1] |= s2;
for (int i = 0; i < 64; i++)
if (!Is64Bit) // Matt Taylor's folding trick for 32 bit systems
{
Bitboard b = 1ULL << i;
b ^= b - 1;
b ^= b >> 32;
BSFTable[(uint32_t)(b * DeBruijn_32) >> 26] = i;
}
else
BSFTable[((1ULL << i) * DeBruijn_64) >> 58] = i;
int steps[][9] = { {}, { 7, 9 }, { 17, 15, 10, 6, -6, -10, -15, -17 },
{}, {}, {}, { 9, 7, -7, -9, 8, 1, -1, -8 } };