From: Marco Costalba Date: Sun, 26 Oct 2008 20:44:58 +0000 (+0100) Subject: Manual merge X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=74f1efee263aadcceb1df716ebd87776b932238a Manual merge --- 74f1efee263aadcceb1df716ebd87776b932238a diff --cc src/bitboard.h index eceb845e,8c6a7007..1222ddfa --- a/src/bitboard.h +++ b/src/bitboard.h @@@ -7,7 -7,7 +7,8 @@@ it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + ++ Stockfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --cc src/movegen.cpp index 7c59f5e3,50f8b488..397732b5 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@@ -613,24 -622,25 +613,24 @@@ namespace } - template - int generate_pawn_captures(const Position& pos, MoveStack* mlist) { + template - MoveStack* do_generate_pawn_captures(const Position& pos, MoveStack* mlist) { ++ MoveStack* do_generate_pawn_captures(const Position& pos, MoveStack* mlist) { - static const PawnParams PP = (C == WHITE ? WhitePawnParams : BlackPawnParams); - - Bitboard pawns = pos.pawns(PP.us); - Bitboard enemyPieces = pos.pieces_of_color(PP.them); - Square sq; - int n = 0; + Square to; + Bitboard pawns = pos.pawns(Us); + Bitboard enemyPieces = pos.pieces_of_color(Them); // Captures in the a1-h8 (a8-h1 for black) direction - Bitboard b1 = (C == WHITE ? pawns << 9 : pawns >> 7) & ~FileABB & enemyPieces; + Bitboard b1 = (Us == WHITE ? pawns << 9 : pawns >> 7) & ~FileABB & enemyPieces; // Capturing promotions - Bitboard b2 = b1 & PP.Rank8BB; + Bitboard b2 = b1 & TRank8BB; while (b2) { - sq = pop_1st_bit(&b2); - mlist[n++].move = make_promotion_move(sq - PP.DELTA_NE, sq, QUEEN); + to = pop_1st_bit(&b2); + (*mlist++).move = make_promotion_move(to - TDELTA_NE, to, QUEEN); } // Capturing non-promotions @@@ -679,32 -689,34 +679,32 @@@ while (b1) { - sq = pop_1st_bit(&b1); - mlist[n++].move = make_ep_move(sq, pos.ep_square()); + to = pop_1st_bit(&b1); + (*mlist++).move = make_ep_move(to, pos.ep_square()); } } - return n; + return mlist; } + template - MoveStack* do_generate_pawn_noncaptures(const Position& pos, MoveStack* mlist) { ++ MoveStack* do_generate_pawn_noncaptures(const Position& pos, MoveStack* mlist) { - template - int generate_pawn_noncaptures(const Position& pos, MoveStack* mlist) { - - static const PawnParams PP = (C == WHITE ? WhitePawnParams : BlackPawnParams); - - Bitboard pawns = pos.pawns(PP.us); - Bitboard enemyPieces = pos.pieces_of_color(PP.them); + Bitboard pawns = pos.pawns(Us); + Bitboard enemyPieces = pos.pieces_of_color(Them); Bitboard emptySquares = pos.empty_squares(); Bitboard b1, b2; - Square sq; - int n = 0; + Square to; // Underpromotion captures in the a1-h8 (a8-h1 for black) direction - b1 = (C == WHITE ? pawns << 9 : pawns >> 7) & ~FileABB & enemyPieces & PP.Rank8BB; + b1 = (Us == WHITE ? pawns << 9 : pawns >> 7) & ~FileABB & enemyPieces & TRank8BB; while (b1) { - sq = pop_1st_bit(&b1); - mlist[n++].move = make_promotion_move(sq - PP.DELTA_NE, sq, ROOK); - mlist[n++].move = make_promotion_move(sq - PP.DELTA_NE, sq, BISHOP); - mlist[n++].move = make_promotion_move(sq - PP.DELTA_NE, sq, KNIGHT); + to = pop_1st_bit(&b1); + (*mlist++).move = make_promotion_move(to - TDELTA_NE, to, ROOK); + (*mlist++).move = make_promotion_move(to - TDELTA_NE, to, BISHOP); + (*mlist++).move = make_promotion_move(to - TDELTA_NE, to, KNIGHT); } // Underpromotion captures in the h1-a8 (h8-a1 for black) direction diff --cc src/movegen.h index 2f70311d,94f778ff..034dd389 --- a/src/movegen.h +++ b/src/movegen.h @@@ -7,12 -7,12 +7,12 @@@ it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. -- ++ Stockfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -- ++ You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@@ -37,6 -37,6 +37,7 @@@ extern int generate_noncaptures(const P extern int generate_checks(const Position &pos, MoveStack *mlist, Bitboard dc); extern int generate_evasions(const Position &pos, MoveStack *mlist); extern int generate_legal_moves(const Position &pos, MoveStack *mlist); -extern Move generate_move_if_legal(const Position &pos, Move m, Bitboard pinned); +extern bool move_is_legal(const Position &pos, const Move m, Bitboard pinned); + + #endif // !defined(MOVEGEN_H_INCLUDED) diff --cc src/movepick.cpp index b115e8ff,e1f8e4e7..187a3c51 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@@ -7,7 -7,7 +7,8 @@@ it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + ++ Stockfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@@ -230,28 -223,22 +231,28 @@@ void MovePicker::score_captures() } void MovePicker::score_noncaptures() { + // First score by history, when no history is available then use + // piece/square tables values. This seems to be better then a + // random choice when we don't have an history for any move. - Move m; - int hs; - - for (int i = 0; i < numOfMoves; i++) - { - m = moves[i].move; - - if (m == killer1) - hs = HistoryMax + 2; - else if (m == killer2) - hs = HistoryMax + 1; - else - hs = H.move_ordering_score(pos.piece_on(move_from(m)), m); - - // Ensure moves in history are always sorted as first - if (hs > 0) - hs += 1000; - - moves[i].score = hs + pos.mg_pst_delta(m); ++ Move m; ++ int hs; + + for (int i = 0; i < numOfMoves; i++) + { - Move m = moves[i].move; ++ m = moves[i].move; ++ + if (m == killer1) - moves[i].score = HistoryMax + 2; ++ hs = HistoryMax + 2; + else if (m == killer2) - moves[i].score = HistoryMax + 1; ++ hs = HistoryMax + 1; + else - moves[i].score = H.move_ordering_score(pos.piece_on(move_from(m)), m); ++ hs = H.move_ordering_score(pos.piece_on(move_from(m)), m); + + // Ensure moves in history are always sorted as first - if (moves[i].score > 0) - moves[i].score += 1000; ++ if (hs > 0) ++ hs += 1000; + - moves[i].score += pos.mg_pst_delta(moves[i].move); ++ moves[i].score = hs + pos.mg_pst_delta(m); } } diff --cc src/movepick.h index b48bd8b8,a835346d..66518ac7 --- a/src/movepick.h +++ b/src/movepick.h @@@ -7,7 -7,7 +7,11 @@@ it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ++<<<<<<< HEAD:src/movepick.h + ++======= + ++>>>>>>> d3600c39a745179ed6b094b305d0645e83a1ee86:src/movepick.h Stockfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --cc src/position.h index 8765aac0,48f40dac..a47098a8 --- a/src/position.h +++ b/src/position.h @@@ -7,12 -7,12 +7,12 @@@ it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. -- ++ Stockfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -- ++ You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@@ -25,8 -25,8 +25,8 @@@ #if defined(_MSC_VER) // Forcing value to bool 'true' or 'false' (performance warning) --#pragma warning(disable: 4800) -- ++#pragma warning(disable: 4800) ++ #endif //// @@@ -48,7 -48,7 +48,7 @@@ //// /// FEN string for the initial position: --const std::string StartPosition = ++const std::string StartPosition = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; /// Maximum number of plies per game (220 should be enough, because the @@@ -64,9 -64,9 +64,9 @@@ const int MaxGameLength = 220 /// Castle rights, encoded as bit fields: enum CastleRights { -- NO_CASTLES = 0, ++ NO_CASTLES = 0, WHITE_OO = 1, -- BLACK_OO = 2, ++ BLACK_OO = 2, WHITE_OOO = 4, BLACK_OOO = 8, ALL_CASTLES = 15 @@@ -92,7 -92,7 +92,7 @@@ struct UndoInfo /// The position data structure. A position consists of the following data: --/// ++/// /// * For each piece type, a bitboard representing the squares occupied /// by pieces of that type. /// * For each color, a bitboard representing the squares occupiecd by @@@ -281,7 -281,7 +281,7 @@@ public // Reset the gamePly variable to 0 void reset_game_ply(); -- ++ // Position consistency check, for debugging bool is_ok(int* failedStep = NULL) const; @@@ -329,7 -326,7 +329,7 @@@ private // Piece counts int pieceCount[2][8]; // [color][pieceType] -- ++ // Piece lists Square pieceList[2][8][16]; // [color][pieceType][index] int index[64]; @@@ -591,7 -588,7 +591,7 @@@ inline bool Position::file_is_half_open inline bool Position::square_is_weak(Square s, Color c) const { return !(pawns(c) & outpost_mask(opposite_color(c), s)); } -- ++ inline Key Position::get_key() const { return key; } @@@ -642,7 -639,7 +642,7 @@@ inline Phase Position::game_phase() con static const Value EndgameLimit = 4 * RookValueMidgame - Value(325); Value npm = non_pawn_material(WHITE) + non_pawn_material(BLACK); -- ++ if (npm >= MidgameLimit) return PHASE_MIDGAME; else if(npm <= EndgameLimit) @@@ -687,7 -684,7 +687,7 @@@ inline int Position::rule_50_counter() inline bool Position::opposite_colored_bishops() const { return piece_count(WHITE, BISHOP) == 1 -- && piece_count(BLACK, BISHOP) == 1 ++ && piece_count(BLACK, BISHOP) == 1 && square_color(piece_list(WHITE, BISHOP, 0)) != square_color(piece_list(BLACK, BISHOP, 0)); } @@@ -695,6 -692,6 +695,6 @@@ inline bool Position::has_pawn_on_7th(C return pawns(c) & relative_rank_bb(c, RANK_7); } -- ++ #endif // !defined(POSITION_H_INCLUDED)