X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fbitboard.cpp;h=5c6b6e026f25c2ddd4b68f0e4e6f85475a88a407;hp=0e035b15f37b6867d1601431eae1f5c98298e90c;hb=b05fbb3733df535a3fdf99e8d832001e57929699;hpb=a44c5cf4f77b05a0385c127b7c26cf086a73120e diff --git a/src/bitboard.cpp b/src/bitboard.cpp index 0e035b15..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 @@ -38,7 +38,6 @@ int BShifts[64]; Bitboard SetMaskBB[65]; Bitboard ClearMaskBB[65]; -Bitboard SquaresByColorBB[2]; Bitboard FileBB[8]; Bitboard RankBB[8]; Bitboard NeighboringFilesBB[8]; @@ -50,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]; @@ -155,10 +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); - - SquaresByColorBB[DARK] = 0xAA55AA55AA55AA55ULL; - SquaresByColorBB[LIGHT] = ~SquaresByColorBB[DARK]; + BitCount8Bit[b] = (uint8_t)popcount(b); for (Square s = SQ_A1; s <= SQ_H8; s++) { @@ -202,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; @@ -231,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); @@ -325,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[]. @@ -341,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.