Speedup sliders attacks for 32bit CPU
authorMarco Costalba <mcostalba@gmail.com>
Sun, 12 Feb 2012 14:12:01 +0000 (15:12 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 12 Feb 2012 14:26:18 +0000 (15:26 +0100)
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>
src/bitboard.cpp
src/bitboard.h

index a5b80b0b5e9bf44dc4d4a6c851b7419f2264e085..c67c01a62ff258dfaa0438152cb1d2e45304d8e6 100644 (file)
@@ -30,12 +30,12 @@ CACHE_LINE_ALIGNMENT
 Bitboard RMasks[64];
 Bitboard RMagics[64];
 Bitboard* RAttacks[64];
-int RShifts[64];
+unsigned RShifts[64];
 
 Bitboard BMasks[64];
 Bitboard BMagics[64];
 Bitboard* BAttacks[64];
-int BShifts[64];
+unsigned BShifts[64];
 
 Bitboard SquareBB[64];
 Bitboard FileBB[8];
@@ -64,7 +64,7 @@ namespace {
   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);
 }
 
 
@@ -290,7 +290,7 @@ namespace {
   // 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 } };
index fafe9c356ff5e6522b29654c72c2b7caf1c8fec3..24ae794b68b0f4183087a882cb94ca1bd64cc29c 100644 (file)
@@ -28,12 +28,12 @@ CACHE_LINE_ALIGNMENT
 extern Bitboard RMasks[64];
 extern Bitboard RMagics[64];
 extern Bitboard* RAttacks[64];
-extern int RShifts[64];
+extern unsigned RShifts[64];
 
 extern Bitboard BMasks[64];
 extern Bitboard BMagics[64];
 extern Bitboard* BAttacks[64];
-extern int BShifts[64];
+extern unsigned BShifts[64];
 
 extern Bitboard SquareBB[64];
 extern Bitboard FileBB[8];
@@ -134,13 +134,15 @@ FORCE_INLINE unsigned b_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) {
-  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];
 }
 
 #endif