|
@@ -0,0 +1,29 @@
|
|
|
+use crate::{bitboard::*, movegen::ROOK};
|
|
|
+
|
|
|
+mod tables;
|
|
|
+
|
|
|
+use self::tables::*;
|
|
|
+
|
|
|
+pub fn magic_bishop(s: Square, occ: Bitboard) -> Bitboard {
|
|
|
+ let bits = &BISHOP_BITS[s as usize];
|
|
|
+ let (mask, magic) = &BISHOP_MASKS_AND_MAGICS[s as usize];
|
|
|
+ //println!("piece:\n{}", print_board(1_u64 << s));
|
|
|
+ //println!("mask:\n{}", print_board(mask));
|
|
|
+ let idx = magic.wrapping_mul(occ & mask).wrapping_shr((64 - bits) as u32);
|
|
|
+
|
|
|
+ // workaround to make program not crash in debug mode
|
|
|
+ *(&BISHOP_TABLES[s as usize][idx as usize])
|
|
|
+}
|
|
|
+
|
|
|
+pub fn magic_rook(s: Square, occ: Bitboard) -> Bitboard {
|
|
|
+ let bits = &ROOK_BITS[s as usize];
|
|
|
+ let (mask, magic) = &ROOK_MASKS_AND_MAGICS[s as usize];
|
|
|
+ let idx = magic.wrapping_mul(occ & mask).wrapping_shr((64 - bits) as u32);
|
|
|
+
|
|
|
+ //println!("piece:\n{}", print_board(1_u64 << s));
|
|
|
+ //println!("mask:\n{}", print_board(*mask));
|
|
|
+
|
|
|
+ // workaround to make program not crash in debug mode
|
|
|
+ *(&ROOK_TABLES[s as usize][idx as usize])
|
|
|
+}
|
|
|
+
|