Replace a 64 bit 'and' by two 32 bits ones and
use unsigned instead of int.
This simple patch increases perft speed of 6% on
my Intel Core 2 Duo !
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Bitboard RMasks[64];
Bitboard RMagics[64];
Bitboard* RAttacks[64];
Bitboard RMasks[64];
Bitboard RMagics[64];
Bitboard* RAttacks[64];
Bitboard BMasks[64];
Bitboard BMagics[64];
Bitboard* BAttacks[64];
Bitboard BMasks[64];
Bitboard BMagics[64];
Bitboard* BAttacks[64];
Bitboard SquareBB[64];
Bitboard FileBB[8];
Bitboard SquareBB[64];
Bitboard FileBB[8];
typedef unsigned (Fn)(Square, Bitboard);
void init_magics(Bitboard table[], Bitboard* attacks[], Bitboard magics[],
typedef unsigned (Fn)(Square, Bitboard);
void init_magics(Bitboard table[], Bitboard* attacks[], Bitboard magics[],
- Bitboard masks[], int shifts[], Square deltas[], Fn get_index);
+ Bitboard masks[], unsigned shifts[], Square deltas[], Fn get_index);
// use the so called "fancy" approach.
void init_magics(Bitboard table[], Bitboard* attacks[], Bitboard magics[],
// use the so called "fancy" approach.
void init_magics(Bitboard table[], Bitboard* attacks[], Bitboard magics[],
- Bitboard masks[], int shifts[], Square deltas[], Fn get_index) {
+ Bitboard masks[], unsigned shifts[], Square deltas[], Fn get_index) {
int MagicBoosters[][8] = { { 3191, 2184, 1310, 3618, 2091, 1308, 2452, 3996 },
{ 1059, 3608, 605, 3234, 3326, 38, 2029, 3043 } };
int MagicBoosters[][8] = { { 3191, 2184, 1310, 3618, 2091, 1308, 2452, 3996 },
{ 1059, 3608, 605, 3234, 3326, 38, 2029, 3043 } };
extern Bitboard RMasks[64];
extern Bitboard RMagics[64];
extern Bitboard* RAttacks[64];
extern Bitboard RMasks[64];
extern Bitboard RMagics[64];
extern Bitboard* RAttacks[64];
+extern unsigned RShifts[64];
extern Bitboard BMasks[64];
extern Bitboard BMagics[64];
extern Bitboard* BAttacks[64];
extern Bitboard BMasks[64];
extern Bitboard BMagics[64];
extern Bitboard* BAttacks[64];
+extern unsigned BShifts[64];
extern Bitboard SquareBB[64];
extern Bitboard FileBB[8];
extern Bitboard SquareBB[64];
extern Bitboard FileBB[8];
#else // if !defined(IS_64BIT)
FORCE_INLINE unsigned r_index(Square s, Bitboard occ) {
#else // if !defined(IS_64BIT)
FORCE_INLINE unsigned r_index(Square s, Bitboard occ) {
- 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];
}
FORCE_INLINE unsigned b_index(Square s, Bitboard occ) {
}
FORCE_INLINE unsigned b_index(Square s, Bitboard occ) {
- Bitboard b = occ & BMasks[s];
- return unsigned(int(b) * int(BMagics[s]) ^ int(b >> 32) * int(BMagics[s] >> 32)) >> BShifts[s];
+ 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];