X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=e89477ea534d654658244d890c53d9ead3e87b07;hp=8b043af83b4a0826c0d0fe52000bce970cce9c79;hb=e72b93e44fb95af6b3669e23a8fcd7702ea09ec1;hpb=d549497144ee2a704057e005d2bbe1fbc666ca7e diff --git a/src/position.cpp b/src/position.cpp index 8b043af8..e89477ea 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -62,15 +62,8 @@ const Value PieceValueEndgame[17] = { RookValueEndgame, QueenValueEndgame }; - -namespace { - - // Bonus for having the side to move (modified by Joona Kiiski) - const Score Tempo = make_score(48, 22); - - // To convert a Piece to and from a FEN char - const string PieceToChar(" PNBRQK pnbrqk ."); -} +// To convert a Piece to and from a FEN char +static const string PieceToChar(" PNBRQK pnbrqk ."); /// CheckInfo c'tor @@ -830,7 +823,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI prefetch((char*)TT.first_entry(k)); // Move the piece - Bitboard from_to_bb = SquareBB[from] | SquareBB[to]; + Bitboard from_to_bb = SquareBB[from] ^ SquareBB[to]; byTypeBB[ALL_PIECES] ^= from_to_bb; byTypeBB[pt] ^= from_to_bb; byColorBB[us] ^= from_to_bb; @@ -934,9 +927,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI } } - // Finish sideToMove = ~sideToMove; - st->psqScore += (sideToMove == WHITE ? Tempo : -Tempo); assert(pos_is_ok()); } @@ -995,7 +986,7 @@ void Position::undo_move(Move m) { } // Put the piece back at the source square - Bitboard from_to_bb = SquareBB[from] | SquareBB[to]; + Bitboard from_to_bb = SquareBB[from] ^ SquareBB[to]; byTypeBB[ALL_PIECES] ^= from_to_bb; byTypeBB[pt] ^= from_to_bb; byColorBB[us] ^= from_to_bb; @@ -1078,21 +1069,13 @@ void Position::do_castle_move(Move m) { assert(piece_on(kfrom) == make_piece(us, KING)); assert(piece_on(rfrom) == make_piece(us, ROOK)); - // Remove pieces from source squares - byTypeBB[ALL_PIECES] ^= kfrom; - byTypeBB[KING] ^= kfrom; - byColorBB[us] ^= kfrom; - byTypeBB[ALL_PIECES] ^= rfrom; - byTypeBB[ROOK] ^= rfrom; - byColorBB[us] ^= rfrom; - - // Put pieces on destination squares - byTypeBB[ALL_PIECES] |= kto; - byTypeBB[KING] |= kto; - byColorBB[us] |= kto; - byTypeBB[ALL_PIECES] |= rto; - byTypeBB[ROOK] |= rto; - byColorBB[us] |= rto; + // Move the pieces, with some care; in chess960 could be kto == rfrom + Bitboard k_from_to_bb = SquareBB[kfrom] ^ SquareBB[kto]; + Bitboard r_from_to_bb = SquareBB[rfrom] ^ SquareBB[rto]; + byTypeBB[KING] ^= k_from_to_bb; + byTypeBB[ROOK] ^= r_from_to_bb; + byTypeBB[ALL_PIECES] ^= k_from_to_bb ^ r_from_to_bb; + byColorBB[us] ^= k_from_to_bb ^ r_from_to_bb; // Update board Piece king = make_piece(us, KING); @@ -1135,9 +1118,7 @@ void Position::do_castle_move(Move m) { // Update checkers BB st->checkersBB = attackers_to(king_square(~us)) & pieces(us); - // Finish sideToMove = ~sideToMove; - st->psqScore += (sideToMove == WHITE ? Tempo : -Tempo); } else // Undo: point our state pointer back to the previous state @@ -1180,7 +1161,6 @@ void Position::do_null_move(StateInfo& backupSt) { st->epSquare = SQ_NONE; st->rule50++; st->pliesFromNull = 0; - st->psqScore += (sideToMove == WHITE ? Tempo : -Tempo); } assert(pos_is_ok()); @@ -1414,18 +1394,15 @@ Key Position::compute_material_key() const { /// updated by do_move and undo_move when the program is running in debug mode. Score Position::compute_psq_score() const { - Bitboard b; Score result = SCORE_ZERO; + Bitboard b = pieces(); - for (Color c = WHITE; c <= BLACK; c++) - for (PieceType pt = PAWN; pt <= KING; pt++) - { - b = pieces(pt, c); - while (b) - result += pieceSquareTable[make_piece(c, pt)][pop_1st_bit(&b)]; - } + while (b) + { + Square s = pop_1st_bit(&b); + result += pieceSquareTable[piece_on(s)][s]; + } - result += (sideToMove == WHITE ? Tempo / 2 : -Tempo / 2); return result; }