return attacks;
}
U64 bishop_attacks_on_the_fly(int square, U64 block) {
U64 bitboard = C64(0), attacks = C64(0), tmp;
int tr = square / 8, tf = square % 8, i;
bit_set(bitboard, square);
for (i = 0, tmp = bitboard; i < MIN(7 - tf, 7 - tr); i++) {
attacks |= tmp = noEaOne(tmp);
if (tmp & block)
break;
}
for (i = 0, tmp = bitboard; i < MIN(tf, 7 - tr); i++) {
attacks |= tmp = noWeOne(tmp);
if (tmp & block)
break;
}
for (i = 0, tmp = bitboard; i < MIN(7 - tf, tr); i++) {
attacks |= tmp = soEaOne(tmp);
if (tmp & block)
break;
}
for (i = 0, tmp = bitboard; i < MIN(tf, tr); i++) {
attacks |= tmp = soWeOne(tmp);
if (tmp & block)
break;
}
return attacks;
}
U64 rook_attacks_on_the_fly(int square, U64 block) {
U64 bitboard = C64(0), attacks = C64(0), tmp;
int tr = square / 8, tf = square % 8, i;
bit_set(bitboard, square);
for (i = 0, tmp = bitboard; i < tf; i++) {
attacks |= tmp = westOne(tmp);
if (tmp & block)
break;
}
for (i = 0, tmp = bitboard; i < tr; i++) {
attacks |= tmp = soutOne(tmp);
if (tmp & block)
break;
}
for (i = 0, tmp = bitboard; i < 7; i++) {
attacks |= tmp = eastOne(tmp);
if (tmp & block)
break;
}
for (i = 0, tmp = bitboard; i < 7; i++) {
attacks |= tmp = nortOne(tmp);
if (tmp & block)
break;
}
return attacks;
}
void init_leapers_attacks(void) {
for (int square = 0; square < 64; square++) {
pawn_attacks[WHITE][square] = mask_pawn_attacks(WHITE, square);