Lookup square distance instead of calculate on the fly
authorMarco Costalba <mcostalba@gmail.com>
Sun, 11 Sep 2011 09:00:52 +0000 (10:00 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 11 Sep 2011 09:11:43 +0000 (10:11 +0100)
Microptimization that gives a +0.7% speed increase.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/bitboard.cpp
src/types.h

index de28e03a05c4ef345ab0d89db30d206046811637..073487e99cf252a02f9ed6656a31578048264279 100644 (file)
@@ -56,6 +56,7 @@ Bitboard RookPseudoAttacks[64];
 Bitboard QueenPseudoAttacks[64];
 
 uint8_t BitCount8Bit[256];
+int SquareDistance[64][64];
 
 namespace {
 
@@ -154,6 +155,13 @@ Square pop_1st_bit(Bitboard* bb) {
 
 void init_bitboards() {
 
+  for (Bitboard b = 0; b < 256; b++)
+      BitCount8Bit[b] = (uint8_t)count_1s<CNT32_MAX15>(b);
+
+  for (Square s1 = SQ_A1; s1 <= SQ_H8; s1++)
+      for (Square s2 = SQ_A1; s2 <= SQ_H8; s2++)
+          SquareDistance[s1][s2] = Max(file_distance(s1, s2), rank_distance(s1, s2));
+
   SquaresByColorBB[DARK]  =  0xAA55AA55AA55AA55ULL;
   SquaresByColorBB[LIGHT] = ~SquaresByColorBB[DARK];
 
@@ -194,9 +202,6 @@ void init_bitboards() {
           AttackSpanMask[c][s]     = in_front_bb(c, s) & neighboring_files_bb(s);
       }
 
-  for (Bitboard b = 0; b < 256; b++)
-      BitCount8Bit[b] = (uint8_t)count_1s<CNT32_MAX15>(b);
-
   for (int i = 0; i < 64; i++)
       if (!CpuIs64Bit) // Matt Taylor's folding trick for 32 bit systems
       {
index f85ad9a92c9e2c8be9ff0f718ff5552b8fe8f1c5..863e0df2f771be35033dd9e22debaa7d524f4203 100644 (file)
@@ -348,6 +348,7 @@ const Value QueenValueEndgame  = Value(0x9FE);
 
 extern const Value PieceValueMidgame[17];
 extern const Value PieceValueEndgame[17];
+extern int SquareDistance[64][64];
 
 inline Value piece_value_midgame(Piece p) {
   return PieceValueMidgame[p];
@@ -440,7 +441,7 @@ inline int rank_distance(Square s1, Square s2) {
 }
 
 inline int square_distance(Square s1, Square s2) {
-  return Max(file_distance(s1, s2), rank_distance(s1, s2));
+  return SquareDistance[s1][s2];
 }
 
 inline char file_to_char(File f) {