X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fbitboard.cpp;h=1e07c8ce32bda3cc2eba58cd98a7aec83fcc2360;hb=83d8d542166d77f5417d334d2e6138ace0820ae4;hp=e23e5b6bbb56447c404dccfaaf53190ed67ebe92;hpb=7733dadfd7c8781e3bde3cc4e21751fa44ab6ed8;p=stockfish diff --git a/src/bitboard.cpp b/src/bitboard.cpp index e23e5b6b..1e07c8ce 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -26,7 +26,6 @@ #include "bitboard.h" #include "bitcount.h" -#include "direction.h" #if defined(IS_64BIT) @@ -226,7 +225,6 @@ Bitboard SetMaskBB[65]; Bitboard ClearMaskBB[65]; Bitboard StepAttackBB[16][64]; -Bitboard RayBB[64][8]; Bitboard BetweenBB[64][64]; Bitboard SquaresInFrontMask[2][64]; @@ -247,7 +245,6 @@ uint8_t BitCount8Bit[256]; namespace { void init_masks(); - void init_ray_bitboards(); void init_attacks(); void init_between_bitboards(); void init_pseudo_attacks(); @@ -289,12 +286,11 @@ void init_bitboards() { int bishopDeltas[4][2] = {{1,1},{-1,1},{1,-1},{-1,-1}}; init_masks(); - init_ray_bitboards(); init_attacks(); - init_between_bitboards(); init_sliding_attacks(RAttacks, RAttackIndex, RMask, RShift, RMult, rookDeltas); init_sliding_attacks(BAttacks, BAttackIndex, BMask, BShift, BMult, bishopDeltas); init_pseudo_attacks(); + init_between_bitboards(); } @@ -407,21 +403,6 @@ namespace { BitCount8Bit[b] = (uint8_t)count_1s(b); } - int remove_bit_8(int i) { return ((i & ~15) >> 1) | (i & 7); } - - void init_ray_bitboards() { - - int d[8] = {1, -1, 16, -16, 17, -17, 15, -15}; - - for (int i = 0; i < 128; i = (i + 9) & ~8) - for (int j = 0; j < 8; j++) - { - RayBB[remove_bit_8(i)][j] = EmptyBoardBB; - for (int k = i + d[j]; (k & 0x88) == 0; k += d[j]) - set_bit(&(RayBB[remove_bit_8(i)][j]), Square(remove_bit_8(k))); - } - } - void init_attacks() { const int step[16][8] = { @@ -474,18 +455,23 @@ namespace { void init_between_bitboards() { - const SquareDelta step[8] = { DELTA_E, DELTA_W, DELTA_N, DELTA_S, - DELTA_NE, DELTA_SW, DELTA_NW, DELTA_SE }; + Square s1, s2, s3; + SquareDelta d; + int f, r; - for (Square s1 = SQ_A1; s1 <= SQ_H8; s1++) - for (Square s2 = SQ_A1; s2 <= SQ_H8; s2++) + for (s1 = SQ_A1; s1 <= SQ_H8; s1++) + for (s2 = SQ_A1; s2 <= SQ_H8; s2++) { BetweenBB[s1][s2] = EmptyBoardBB; - SignedDirection d = signed_direction_between_squares(s1, s2); - if (d != SIGNED_DIR_NONE) + if (bit_is_set(QueenPseudoAttacks[s1], s2)) { - for (Square s3 = s1 + step[d]; s3 != s2; s3 += step[d]) + f = file_distance(s1, s2); + r = rank_distance(s1, s2); + + d = SquareDelta(s2 - s1) / Max(f, r); + + for (s3 = s1 + d; s3 != s2; s3 += d) set_bit(&(BetweenBB[s1][s2]), s3); } }