From: Fabian Fichter Date: Sun, 11 Apr 2021 17:09:18 +0000 (+0200) Subject: Simplify bitboard initialization X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=a57d9dfa4975a5109f7337ae5aadf7181122f006;p=fairystockfish.git Simplify bitboard initialization No functional change. --- diff --git a/src/bitboard.cpp b/src/bitboard.cpp index 7534002..2ff2316 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -201,11 +201,45 @@ void Bitboards::init() { SOUTH + 2 * SOUTH_WEST, WEST + 2 * SOUTH_WEST, WEST + 2 * NORTH_WEST, NORTH + 2 * NORTH_WEST }; - // Initialize rider types + for (unsigned i = 0; i < (1 << 16); ++i) + PopCnt16[i] = uint8_t(std::bitset<16>(i).count()); + + for (Square s = SQ_A1; s <= SQ_MAX; ++s) + SquareBB[s] = make_bitboard(s); + + for (File f = FILE_A; f <= FILE_MAX; ++f) + for (Rank r = RANK_1; r <= RANK_MAX; ++r) + BoardSizeBB[f][r] = forward_file_bb(BLACK, make_square(f, r)) | SquareBB[make_square(f, r)] | (f > FILE_A ? BoardSizeBB[f - 1][r] : Bitboard(0)); + + for (Square s1 = SQ_A1; s1 <= SQ_MAX; ++s1) + for (Square s2 = SQ_A1; s2 <= SQ_MAX; ++s2) + SquareDistance[s1][s2] = std::max(distance(s1, s2), distance(s1, s2)); + +#ifdef PRECOMPUTED_MAGICS + init_magics(RookTableH, RookMagicsH, RookDirectionsH, RookMagicHInit); + init_magics(RookTableV, RookMagicsV, RookDirectionsV, RookMagicVInit); + init_magics(BishopTable, BishopMagics, BishopDirections, BishopMagicInit); + init_magics(CannonTableH, CannonMagicsH, RookDirectionsH, CannonMagicHInit); + init_magics(CannonTableV, CannonMagicsV, RookDirectionsV, CannonMagicVInit); + init_magics(HorseTable, HorseMagics, HorseDirections, HorseMagicInit); + init_magics(ElephantTable, ElephantMagics, ElephantDirections, ElephantMagicInit); + init_magics(JanggiElephantTable, JanggiElephantMagics, JanggiElephantDirections, JanggiElephantMagicInit); +#else + init_magics(RookTableH, RookMagicsH, RookDirectionsH); + init_magics(RookTableV, RookMagicsV, RookDirectionsV); + init_magics(BishopTable, BishopMagics, BishopDirections); + init_magics(CannonTableH, CannonMagicsH, RookDirectionsH); + init_magics(CannonTableV, CannonMagicsV, RookDirectionsV); + init_magics(HorseTable, HorseMagics, HorseDirections); + init_magics(ElephantTable, ElephantMagics, ElephantDirections); + init_magics(JanggiElephantTable, JanggiElephantMagics, JanggiElephantDirections); +#endif + for (PieceType pt = PAWN; pt <= KING; ++pt) { const PieceInfo* pi = pieceMap.find(pt)->second; + // Initialize rider types if (pi->lameLeaper) { for (Direction d : pi->stepsCapture) @@ -259,47 +293,10 @@ void Bitboards::init() { if (std::find(RookDirectionsV.begin(), RookDirectionsV.end(), d) != RookDirectionsV.end()) MoveRiderTypes[pt] |= RIDER_CANNON_V; } - } - for (unsigned i = 0; i < (1 << 16); ++i) - PopCnt16[i] = uint8_t(std::bitset<16>(i).count()); - - for (Square s = SQ_A1; s <= SQ_MAX; ++s) - SquareBB[s] = make_bitboard(s); - - for (File f = FILE_A; f <= FILE_MAX; ++f) - for (Rank r = RANK_1; r <= RANK_MAX; ++r) - BoardSizeBB[f][r] = forward_file_bb(BLACK, make_square(f, r)) | SquareBB[make_square(f, r)] | (f > FILE_A ? BoardSizeBB[f - 1][r] : Bitboard(0)); - - for (Square s1 = SQ_A1; s1 <= SQ_MAX; ++s1) - for (Square s2 = SQ_A1; s2 <= SQ_MAX; ++s2) - SquareDistance[s1][s2] = std::max(distance(s1, s2), distance(s1, s2)); - -#ifdef PRECOMPUTED_MAGICS - init_magics(RookTableH, RookMagicsH, RookDirectionsH, RookMagicHInit); - init_magics(RookTableV, RookMagicsV, RookDirectionsV, RookMagicVInit); - init_magics(BishopTable, BishopMagics, BishopDirections, BishopMagicInit); - init_magics(CannonTableH, CannonMagicsH, RookDirectionsH, CannonMagicHInit); - init_magics(CannonTableV, CannonMagicsV, RookDirectionsV, CannonMagicVInit); - init_magics(HorseTable, HorseMagics, HorseDirections, HorseMagicInit); - init_magics(ElephantTable, ElephantMagics, ElephantDirections, ElephantMagicInit); - init_magics(JanggiElephantTable, JanggiElephantMagics, JanggiElephantDirections, JanggiElephantMagicInit); -#else - init_magics(RookTableH, RookMagicsH, RookDirectionsH); - init_magics(RookTableV, RookMagicsV, RookDirectionsV); - init_magics(BishopTable, BishopMagics, BishopDirections); - init_magics(CannonTableH, CannonMagicsH, RookDirectionsH); - init_magics(CannonTableV, CannonMagicsV, RookDirectionsV); - init_magics(HorseTable, HorseMagics, HorseDirections); - init_magics(ElephantTable, ElephantMagics, ElephantDirections); - init_magics(JanggiElephantTable, JanggiElephantMagics, JanggiElephantDirections); -#endif - - for (Color c : { WHITE, BLACK }) - for (PieceType pt = PAWN; pt <= KING; ++pt) + // Initialize move/attack bitboards + for (Color c : { WHITE, BLACK }) { - const PieceInfo* pi = pieceMap.find(pt)->second; - for (Square s = SQ_A1; s <= SQ_MAX; ++s) { for (Direction d : pi->stepsCapture) @@ -320,6 +317,7 @@ void Bitboards::init() { PseudoMoves[c][pt][s] |= sliding_attack(pi->hopperQuiet, s, 0, c); } } + } for (Square s1 = SQ_A1; s1 <= SQ_MAX; ++s1) {