X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fbitboard.cpp;h=c4d34aeb1737b6513b527794a793da545dfe97fd;hp=54cc94fa7d04525390ff3e66094fff51b2adff69;hb=d9113d127b491db0a427a416217d55d3d298c25e;hpb=a617b038759f6abd1b33f71ef6d1938fa3588c3d diff --git a/src/bitboard.cpp b/src/bitboard.cpp index 54cc94fa..c4d34aeb 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -156,6 +156,51 @@ const int RShift[64] = { #endif // defined(IS_64BIT) +static const Bitboard DarkSquaresBB = 0xAA55AA55AA55AA55ULL; + +const Bitboard SquaresByColorBB[2] = { DarkSquaresBB, ~DarkSquaresBB }; + +const Bitboard FileBB[8] = { + FileABB, FileBBB, FileCBB, FileDBB, FileEBB, FileFBB, FileGBB, FileHBB +}; + +const Bitboard NeighboringFilesBB[8] = { + FileBBB, FileABB|FileCBB, FileBBB|FileDBB, FileCBB|FileEBB, + FileDBB|FileFBB, FileEBB|FileGBB, FileFBB|FileHBB, FileGBB +}; + +const Bitboard ThisAndNeighboringFilesBB[8] = { + FileABB|FileBBB, FileABB|FileBBB|FileCBB, + FileBBB|FileCBB|FileDBB, FileCBB|FileDBB|FileEBB, + FileDBB|FileEBB|FileFBB, FileEBB|FileFBB|FileGBB, + FileFBB|FileGBB|FileHBB, FileGBB|FileHBB +}; + +const Bitboard RankBB[8] = { + Rank1BB, Rank2BB, Rank3BB, Rank4BB, Rank5BB, Rank6BB, Rank7BB, Rank8BB +}; + +const Bitboard InFrontBB[2][8] = { + { Rank2BB | Rank3BB | Rank4BB | Rank5BB | Rank6BB | Rank7BB | Rank8BB, + Rank3BB | Rank4BB | Rank5BB | Rank6BB | Rank7BB | Rank8BB, + Rank4BB | Rank5BB | Rank6BB | Rank7BB | Rank8BB, + Rank5BB | Rank6BB | Rank7BB | Rank8BB, + Rank6BB | Rank7BB | Rank8BB, + Rank7BB | Rank8BB, + Rank8BB, + EmptyBoardBB + }, + { EmptyBoardBB, + Rank1BB, + Rank2BB | Rank1BB, + Rank3BB | Rank2BB | Rank1BB, + Rank4BB | Rank3BB | Rank2BB | Rank1BB, + Rank5BB | Rank4BB | Rank3BB | Rank2BB | Rank1BB, + Rank6BB | Rank5BB | Rank4BB | Rank3BB | Rank2BB | Rank1BB, + Rank7BB | Rank6BB | Rank5BB | Rank4BB | Rank3BB | Rank2BB | Rank1BB + } +}; + // Global bitboards definitions with static storage duration are // automatically set to zero before enter main(). Bitboard RMask[64]; @@ -169,14 +214,9 @@ Bitboard BAttacks[0x1480]; Bitboard SetMaskBB[65]; Bitboard ClearMaskBB[65]; -Bitboard SquaresByColorBB[2]; -Bitboard FileBB[8]; -Bitboard RankBB[8]; -Bitboard NeighboringFilesBB[8]; -Bitboard ThisAndNeighboringFilesBB[8]; -Bitboard InFrontBB[2][8]; -Bitboard NonSlidingAttacksBB[16][64]; +Bitboard StepAttacksBB[16][64]; Bitboard BetweenBB[64][64]; + Bitboard SquaresInFrontMask[2][64]; Bitboard PassedPawnMask[2][64]; Bitboard AttackSpanMask[2][64]; @@ -191,7 +231,7 @@ uint8_t BitCount8Bit[256]; namespace { void init_masks(); - void init_non_sliding_attacks(); + void init_step_attacks(); void init_pseudo_attacks(); void init_between_bitboards(); Bitboard index_to_bitboard(int index, Bitboard mask); @@ -307,7 +347,7 @@ void init_bitboards() { int bishopDeltas[4][2] = {{1,1},{-1,1},{1,-1},{-1,-1}}; init_masks(); - init_non_sliding_attacks(); + init_step_attacks(); init_sliding_attacks(RAttacks, RAttackIndex, RMask, RShift, RMult, rookDeltas); init_sliding_attacks(BAttacks, BAttackIndex, BMask, BShift, BMult, bishopDeltas); init_pseudo_attacks(); @@ -323,30 +363,6 @@ namespace { void init_masks() { - SquaresByColorBB[DARK] = 0xAA55AA55AA55AA55ULL; - SquaresByColorBB[LIGHT] = ~SquaresByColorBB[DARK]; - - FileBB[FILE_A] = FileABB; - RankBB[RANK_1] = Rank1BB; - - for (File f = FILE_B; f <= FILE_H; f++) - { - FileBB[f] = FileBB[f - 1] << 1; - RankBB[f] = RankBB[f - 1] << 8; - } - - for (File f = FILE_A; f <= FILE_H; f++) - { - NeighboringFilesBB[f] = (f > FILE_A ? FileBB[f - 1] : 0) | (f < FILE_H ? FileBB[f + 1] : 0); - ThisAndNeighboringFilesBB[f] = FileBB[f] | NeighboringFilesBB[f]; - } - - for (Rank rw = RANK_7, rb = RANK_1; rw >= RANK_1; rw--, rb++) - { - InFrontBB[WHITE][rw] = InFrontBB[WHITE][rw + 1] | RankBB[rw + 1]; - InFrontBB[BLACK][rb] = InFrontBB[BLACK][rb - 1] | RankBB[rb - 1]; - } - SetMaskBB[SQ_NONE] = EmptyBoardBB; ClearMaskBB[SQ_NONE] = ~SetMaskBB[SQ_NONE]; @@ -368,7 +384,7 @@ namespace { BitCount8Bit[b] = (uint8_t)count_1s(b); } - void init_non_sliding_attacks() { + void init_step_attacks() { const int step[][9] = { {0}, @@ -385,7 +401,7 @@ namespace { Square to = s + Square(step[pc][k]); if (square_is_ok(to) && square_distance(s, to) < 3) - set_bit(&NonSlidingAttacksBB[pc][s], to); + set_bit(&StepAttacksBB[pc][s], to); } }