From: Marco Costalba Date: Sun, 9 Jun 2013 11:05:41 +0000 (+0200) Subject: Convert pieceSquareTable to 3 dimensions X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=81e242a96dcfc109aa6dd851a055f49bc7a270db;ds=sidebyside Convert pieceSquareTable to 3 dimensions No functional change. --- diff --git a/src/position.cpp b/src/position.cpp index 25532a7d..7d7a0641 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -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(); exclusion = rk.rand(); - 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; diff --git a/src/psqtab.h b/src/psqtab.h index 3a6b1015..ca39fe88 100644 --- a/src/psqtab.h +++ b/src/psqtab.h @@ -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. diff --git a/src/types.h b/src/types.h index ac2ca0e7..653ebade 100644 --- a/src/types.h +++ b/src/types.h @@ -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); }