From f1c6f59ae02a9d9db50171a69032dc2409a0e6c6 Mon Sep 17 00:00:00 2001 From: Aargh Rai Date: Thu, 16 Jul 2026 15:30:08 +0530 Subject: magic bitboards via AI --- src/engine/moves/queen.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'src/engine/moves/queen.c') diff --git a/src/engine/moves/queen.c b/src/engine/moves/queen.c index 3e0b8ef..bd3f564 100644 --- a/src/engine/moves/queen.c +++ b/src/engine/moves/queen.c @@ -16,17 +16,18 @@ void get_queen_moves(moves_t* moves, position_t position) { enemy_pieces = whites(position); friendly_queens = position.bitboards[BLACK_QUEEN]; } - - __forloop_rook_moves_gen( - moves, - friendly_queens, - friendly_pieces, - enemy_pieces - ); - __forloop_bishop_moves_gen( - moves, - friendly_queens, - friendly_pieces, - enemy_pieces - ); + + bitboard_t all_occupied = friendly_pieces | enemy_pieces; + bitboard_t queens = friendly_queens; + while (queens) { + int from = __builtin_ctzll(queens); + queens &= queens - 1; + bitboard_t attacks = (get_rook_attacks(from, all_occupied) | + get_bishop_attacks(from, all_occupied)) & ~friendly_pieces; + while (attacks) { + int to = __builtin_ctzll(attacks); + attacks &= attacks - 1; + add_move(moves, from, to, .flags = ((enemy_pieces >> to) & 1) ? MOVE_CAPTURE : 0); + } + } } -- cgit v1.2.3