diff --git a/engine/src/bitboard/movegen/pawns.rs b/engine/src/bitboard/movegen/pawns.rs index f31b3f7..1f0c6e3 100644 --- a/engine/src/bitboard/movegen/pawns.rs +++ b/engine/src/bitboard/movegen/pawns.rs @@ -1,3 +1,5 @@ +use crate::bitboard::utils::pop_lsb; + use super::*; impl Board { @@ -6,8 +8,7 @@ impl Board { let offset: u8 = self.side_to_move * 6; let mut pawns: u64 = self.bitboards[offset as usize]; while pawns != 0 { - let next_sq = pawns.trailing_zeros(); - pawns &= !(1 << next_sq); + let next_sq = pop_lsb(&mut pawns); let mut quiets: u64 = self.get_pseudo_pawn_moves(next_sq) & move_mask; quiets = self.get_pin_masked_moves(quiets, next_sq); @@ -40,8 +41,7 @@ impl Board { let mut pawns: u64 = self.bitboards[offset]; let opponents = self.occupancy[1 - self.side_to_move as usize]; while pawns != 0 { - let next_sq: u32 = pawns.trailing_zeros(); - pawns &= !(1 << next_sq); + let next_sq = pop_lsb(&mut pawns); let mut attacks: u64 = self.get_pseudo_pawn_captures(next_sq) & move_mask; attacks = self.get_pin_masked_moves(attacks, next_sq); diff --git a/engine/src/bitboard/utils.rs b/engine/src/bitboard/utils.rs index f7f83fe..81cc68f 100644 --- a/engine/src/bitboard/utils.rs +++ b/engine/src/bitboard/utils.rs @@ -1,13 +1,13 @@ #[inline(always)] -pub fn pop_lsb(value: &mut u64) -> usize { - let idx = value.trailing_zeros() as usize; +pub fn pop_lsb(value: &mut u64) -> u32 { + let idx = value.trailing_zeros(); *value &= !(1 << idx); return idx; } #[inline(always)] -pub fn pop_msb(value: &mut u64) -> usize { - let idx = 63 - value.leading_zeros() as usize; +pub fn pop_msb(value: &mut u64) -> u32 { + let idx = 63 - value.leading_zeros(); *value &= !(1 << idx); return idx; } @@ -72,7 +72,7 @@ mod tests { 0xBEAC_DBE0_903A_AC00, 0x01E8_C895_A6F0_0000 ]; - let expected_values: [usize; 6] = [63, 0, 4, 2, 10, 20]; + let expected_values: [u32; 6] = [63, 0, 4, 2, 10, 20]; // tests for index in 0..6 { @@ -92,7 +92,7 @@ mod tests { 0x0000_C1C3_201C_0DB1, 0x0000_0203_0DE4_E944 ]; - let expected_values: [usize; 6] = [63, 0, 61, 57, 47, 41]; + let expected_values: [u32; 6] = [63, 0, 61, 57, 47, 41]; // tests for index in 0..6 {