X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fbitboard.cpp;h=5c6b6e026f25c2ddd4b68f0e4e6f85475a88a407;hp=d9a9daba8b854d4ebdcdb2c3701ff2e38cdb386d;hb=b05fbb3733df535a3fdf99e8d832001e57929699;hpb=ad4739a6d45d9d37afe2414f432a07190fae9b83 diff --git a/src/bitboard.cpp b/src/bitboard.cpp index d9a9daba..5c6b6e02 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -1,7 +1,7 @@ /* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008-2010 Marco Costalba, Joona Kiiski, Tord Romstad + Copyright (C) 2008-2012 Marco Costalba, Joona Kiiski, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -49,9 +49,7 @@ Bitboard SquaresInFrontMask[2][64]; Bitboard PassedPawnMask[2][64]; Bitboard AttackSpanMask[2][64]; -Bitboard BishopPseudoAttacks[64]; -Bitboard RookPseudoAttacks[64]; -Bitboard QueenPseudoAttacks[64]; +Bitboard PseudoAttacks[6][64]; uint8_t BitCount8Bit[256]; int SquareDistance[64][64]; @@ -154,7 +152,7 @@ Square pop_1st_bit(Bitboard* bb) { void bitboards_init() { for (Bitboard b = 0; b < 256; b++) - BitCount8Bit[b] = (uint8_t)count_1s(b); + BitCount8Bit[b] = (uint8_t)popcount(b); for (Square s = SQ_A1; s <= SQ_H8; s++) { @@ -198,12 +196,12 @@ void bitboards_init() { SquareDistance[s1][s2] = std::max(file_distance(s1, s2), rank_distance(s1, s2)); for (int i = 0; i < 64; i++) - if (!CpuIs64Bit) // Matt Taylor's folding trick for 32 bit systems + 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 * 0x783A9B23) >> 26] = i; + BSFTable[(uint32_t)(b * 0x783A9B23) >> 26] = i; } else BSFTable[((1ULL << i) * 0x218A392CD3D5DBFULL) >> 58] = i; @@ -227,14 +225,14 @@ void bitboards_init() { for (Square s = SQ_A1; s <= SQ_H8; s++) { - BishopPseudoAttacks[s] = bishop_attacks_bb(s, 0); - RookPseudoAttacks[s] = rook_attacks_bb(s, 0); - QueenPseudoAttacks[s] = queen_attacks_bb(s, 0); + PseudoAttacks[BISHOP][s] = bishop_attacks_bb(s, 0); + PseudoAttacks[ROOK][s] = rook_attacks_bb(s, 0); + PseudoAttacks[QUEEN][s] = queen_attacks_bb(s, 0); } for (Square s1 = SQ_A1; s1 <= SQ_H8; s1++) for (Square s2 = SQ_A1; s2 <= SQ_H8; s2++) - if (bit_is_set(QueenPseudoAttacks[s1], s2)) + if (bit_is_set(PseudoAttacks[QUEEN][s1], s2)) { Square delta = (s2 - s1) / square_distance(s1, s2); @@ -321,7 +319,7 @@ namespace { // the number of 1s of the mask. Hence we deduce the size of the shift to // apply to the 64 or 32 bits word to get the index. masks[s] = sliding_attacks(pt, s, 0) & ~edges; - shifts[s] = (CpuIs64Bit ? 64 : 32) - count_1s(masks[s]); + shifts[s] = (Is64Bit ? 64 : 32) - popcount(masks[s]); // Use Carry-Rippler trick to enumerate all subsets of masks[s] and // store the corresponding sliding attacks bitboard in reference[]. @@ -337,7 +335,7 @@ namespace { if (s < SQ_H8) attacks[s + 1] = attacks[s] + size; - booster = MagicBoosters[CpuIs64Bit][rank_of(s)]; + booster = MagicBoosters[Is64Bit][rank_of(s)]; // Find a magic for square 's' picking up an (almost) random number // until we find the one that passes the verification test.