- Bitboard b = occ & RMasks[s];
- return unsigned(int(b) * int(RMagics[s]) ^ int(b >> 32) * int(RMagics[s] >> 32)) >> RShifts[s];
+ 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];