-#else // if !defined(IS_64BIT)
-
-FORCE_INLINE unsigned r_index(Square s, Bitboard occ) {
- unsigned lo = unsigned(occ) & unsigned(RMasks[s]);
- unsigned hi = unsigned(occ >> 32) & unsigned(RMasks[s] >> 32);
- return (lo * unsigned(RMagics[s]) ^ hi * unsigned(RMagics[s] >> 32)) >> RShifts[s];
-}
-
-FORCE_INLINE unsigned b_index(Square s, Bitboard occ) {
- unsigned lo = unsigned(occ) & unsigned(BMasks[s]);
- unsigned hi = unsigned(occ >> 32) & unsigned(BMasks[s] >> 32);
- return (lo * unsigned(BMagics[s]) ^ hi * unsigned(BMagics[s] >> 32)) >> BShifts[s];
-}
-
-#endif
-
-inline Bitboard rook_attacks_bb(Square s, Bitboard occ) {
- return RAttacks[s][r_index(s, occ)];
-}
-
-inline Bitboard bishop_attacks_bb(Square s, Bitboard occ) {
- return BAttacks[s][b_index(s, occ)];
+template<PieceType Pt>
+inline Bitboard attacks_bb(Square s, Bitboard occ) {
+ Bitboard** const Attacks = Pt == ROOK ? RAttacks : BAttacks;
+ return Attacks[s][magic_index<Pt>(s, occ)];