Convert pieceSquareTable to 3 dimensions
authorMarco Costalba <mcostalba@gmail.com>
Sun, 9 Jun 2013 11:05:41 +0000 (13:05 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 9 Jun 2013 11:10:21 +0000 (13:10 +0200)
No functional change.

src/position.cpp
src/psqtab.h
src/types.h

index 25532a7..7d7a064 100644 (file)
@@ -41,7 +41,7 @@ static const string PieceToChar(" PNBRQK  pnbrqk");
 
 CACHE_LINE_ALIGNMENT
 
-Score pieceSquareTable[PIECE_NB][SQUARE_NB];
+Score pieceSquareTable[COLOR_NB][PIECE_TYPE_NB][SQUARE_NB];
 Value PieceValue[PHASE_NB][PIECE_NB] = {
 { VALUE_ZERO, PawnValueMg, KnightValueMg, BishopValueMg, RookValueMg, QueenValueMg },
 { VALUE_ZERO, PawnValueEg, KnightValueEg, BishopValueEg, RookValueEg, QueenValueEg } };
@@ -85,17 +85,17 @@ void init() {
   side = rk.rand<Key>();
   exclusion  = rk.rand<Key>();
 
-  for (Piece pc = W_PAWN; pc <= W_KING; pc++)
+  for (PieceType pt = PAWN; pt <= KING; pt++)
   {
-      PieceValue[MG][~pc] = PieceValue[MG][pc];
-      PieceValue[EG][~pc] = PieceValue[EG][pc];
+      PieceValue[MG][make_piece(BLACK, pt)] = PieceValue[MG][pt];
+      PieceValue[EG][make_piece(BLACK, pt)] = PieceValue[EG][pt];
 
-      Score v = make_score(PieceValue[MG][pc], PieceValue[EG][pc]);
+      Score v = make_score(PieceValue[MG][pt], PieceValue[EG][pt]);
 
       for (Square s = SQ_A1; s <= SQ_H8; s++)
       {
-          pieceSquareTable[ pc][ s] =  (v + PSQT[pc][s]);
-          pieceSquareTable[~pc][~s] = -(v + PSQT[pc][s]);
+          pieceSquareTable[WHITE][pt][ s] =  (v + PSQT[pt][s]);
+          pieceSquareTable[BLACK][pt][~s] = -(v + PSQT[pt][s]);
       }
   }
 }
@@ -767,9 +767,8 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
 
       do_castle(from, to, rfrom, rto);
 
+      st->psqScore += pieceSquareTable[us][ROOK][rto] - pieceSquareTable[us][ROOK][rfrom];
       k ^= Zobrist::psq[us][ROOK][rfrom] ^ Zobrist::psq[us][ROOK][rto];
-      st->psqScore += pieceSquareTable[make_piece(us, ROOK)][rto]
-                    - pieceSquareTable[make_piece(us, ROOK)][rfrom];
   }
 
   if (capture)
@@ -821,7 +820,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
       prefetch((char*)thisThread->materialTable[st->materialKey]);
 
       // Update incremental scores
-      st->psqScore -= pieceSquareTable[make_piece(them, capture)][capsq];
+      st->psqScore -= pieceSquareTable[them][capture][capsq];
 
       // Reset rule 50 counter
       st->rule50 = 0;
@@ -904,8 +903,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
                             ^ Zobrist::psq[us][PAWN][pieceCount[us][PAWN]];
 
           // Update incremental score
-          st->psqScore +=  pieceSquareTable[make_piece(us, promotion)][to]
-                         - pieceSquareTable[make_piece(us, PAWN)][to];
+          st->psqScore += pieceSquareTable[us][promotion][to] - pieceSquareTable[us][PAWN][to];
 
           // Update material
           st->npMaterial[us] += PieceValue[MG][promotion];
@@ -920,7 +918,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
   }
 
   // Update incremental scores
-  st->psqScore += pieceSquareTable[pc][to] - pieceSquareTable[pc][from];
+  st->psqScore += pieceSquareTable[us][pt][to] - pieceSquareTable[us][pt][from];
 
   // Set capture piece
   st->capturedType = capture;
@@ -1351,7 +1349,8 @@ Score Position::compute_psq_score() const {
   for (Bitboard b = pieces(); b; )
   {
       Square s = pop_lsb(&b);
-      score += pieceSquareTable[piece_on(s)][s];
+      Piece pc = piece_on(s);
+      score += pieceSquareTable[color_of(pc)][type_of(pc)][s];
   }
 
   return score;
index 3a6b101..ca39fe8 100644 (file)
@@ -25,7 +25,7 @@
 #define S(mg, eg) make_score(mg, eg)
 
 
-/// PSQT[Piece][Square] contains Piece-Square scores. For each piece type on
+/// PSQT[PieceType][Square] contains Piece-Square scores. For each piece type on
 /// a given square a (midgame, endgame) score pair is assigned. PSQT is defined
 /// for white side, for black side the tables are symmetric.
 
index ac2ca0e..653ebad 100644 (file)
@@ -359,10 +359,6 @@ inline Square operator~(Square s) {
   return Square(s ^ 56); // Vertical flip SQ_A1 -> SQ_A8
 }
 
-inline Piece operator~(Piece c) {
-  return Piece(c ^ 8);
-}
-
 inline Square operator|(File f, Rank r) {
   return Square((r << 3) | f);
 }