zig-chess/src/chess/magic.zig

26 lines
999 B
Zig

const bitboard = @import("bitboard.zig");
const generated = @import("generated_magics.zig");
pub const Bitboard = bitboard.Bitboard;
pub const Square = bitboard.Square;
pub fn rookAttacks(square: Square, all_occ: Bitboard) Bitboard {
const info = generated.rook_magic_info[square];
const blockers = all_occ & info.mask;
const shift_amount: u6 = @intCast(info.shift);
const index: usize = @intCast((blockers *% info.magic) >> shift_amount);
return generated.rook_attacks[square][index];
}
pub fn bishopAttacks(square: Square, all_occ: Bitboard) Bitboard {
const info = generated.bishop_magic_info[square];
const blockers = all_occ & info.mask;
const shift_amount: u6 = @intCast(info.shift);
const index: usize = @intCast((blockers *% info.magic) >> shift_amount);
return generated.bishop_attacks[square][index];
}
pub fn queenAttacks(square: Square, all_occ: Bitboard) Bitboard {
return rookAttacks(square, all_occ) | bishopAttacks(square, all_occ);
}