From: Marco Costalba Date: Sat, 7 Feb 2015 09:31:47 +0000 (+0100) Subject: Sync with master X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=1277a428237eec3299c6606951fac014bb3ef851;hp=-c Sync with master bench: 7696257 --- 1277a428237eec3299c6606951fac014bb3ef851 diff --combined src/Makefile index 769b9d34,ce8421a4..397b4046 --- a/src/Makefile +++ b/src/Makefile @@@ -140,7 -140,7 +140,7 @@@ endi ### 3.1 Selecting compiler (default = gcc) -CXXFLAGS += -Wall -Wcast-qual -fno-exceptions -fno-rtti $(EXTRACXXFLAGS) +CXXFLAGS += -Wall -Wcast-qual -fno-exceptions -fno-rtti -std=c++11 $(EXTRACXXFLAGS) LDFLAGS += $(EXTRALDFLAGS) ifeq ($(COMP),) @@@ -150,8 -150,7 +150,8 @@@ endi ifeq ($(COMP),gcc) comp=gcc CXX=g++ - CXXFLAGS += -ansi -pedantic -Wno-long-long -Wextra -Wshadow + CXXFLAGS += -pedantic -Wno-long-long -Wextra -Wshadow + LDFLAGS += -Wl,--no-as-needed endif ifeq ($(COMP),mingw) @@@ -448,16 -447,13 +448,13 @@@ gcc-profile-prepare gcc-profile-make: $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \ - EXTRACXXFLAGS='-fprofile-arcs' \ + EXTRACXXFLAGS='-fprofile-generate' \ EXTRALDFLAGS='-lgcov' \ all gcc-profile-use: - # Deleting corrupt ucioption.gc* profile files is necessary to avoid an - # "internal compiler error" for gcc versions 4.7.x - @rm -f ucioption.gc* $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \ - EXTRACXXFLAGS='-fbranch-probabilities' \ + EXTRACXXFLAGS='-fprofile-use -fno-peel-loops -fno-tracer' \ EXTRALDFLAGS='-lgcov' \ all diff --combined src/material.cpp index e2294212,9873a44e..ebf5adff --- a/src/material.cpp +++ b/src/material.cpp @@@ -64,31 -64,28 +64,28 @@@ namespace Endgame ScaleKPsK[] = { Endgame(WHITE), Endgame(BLACK) }; Endgame ScaleKPKP[] = { Endgame(WHITE), Endgame(BLACK) }; - // Helper templates used to detect a given material distribution - template bool is_KXK(const Position& pos) { - const Color Them = (Us == WHITE ? BLACK : WHITE); - return !more_than_one(pos.pieces(Them)) - && pos.non_pawn_material(Us) >= RookValueMg; + // Helper used to detect a given material distribution + bool is_KXK(const Position& pos, Color us) { + return !more_than_one(pos.pieces(~us)) + && pos.non_pawn_material(us) >= RookValueMg; } - template bool is_KBPsKs(const Position& pos) { - return pos.non_pawn_material(Us) == BishopValueMg - && pos.count(Us) == 1 - && pos.count(Us) >= 1; + bool is_KBPsKs(const Position& pos, Color us) { + return pos.non_pawn_material(us) == BishopValueMg + && pos.count(us) == 1 + && pos.count(us) >= 1; } - template bool is_KQKRPs(const Position& pos) { - const Color Them = (Us == WHITE ? BLACK : WHITE); - return !pos.count(Us) - && pos.non_pawn_material(Us) == QueenValueMg - && pos.count(Us) == 1 - && pos.count(Them) == 1 - && pos.count(Them) >= 1; + bool is_KQKRPs(const Position& pos, Color us) { + return !pos.count(us) + && pos.non_pawn_material(us) == QueenValueMg + && pos.count(us) == 1 + && pos.count(~us) == 1 + && pos.count(~us) >= 1; } /// imbalance() calculates the imbalance by comparing the piece count of each /// piece type for both colors. - template int imbalance(const int pieceCount[][PIECE_TYPE_NB]) { @@@ -139,26 -136,21 +136,21 @@@ Entry* probe(const Position& pos) // Let's look if we have a specialized evaluation function for this particular // material configuration. Firstly we look for a fixed configuration one, then // for a generic one if the previous search failed. - if (pos.this_thread()->endgames.probe(key, e->evaluationFunction)) + if ((e->evaluationFunction = pos.this_thread()->endgames.probe(key)) != nullptr) return e; - if (is_KXK(pos)) - { - e->evaluationFunction = &EvaluateKXK[WHITE]; - return e; - } - - if (is_KXK(pos)) - { - e->evaluationFunction = &EvaluateKXK[BLACK]; - return e; - } + for (Color c = WHITE; c <= BLACK; ++c) + if (is_KXK(pos, c)) + { + e->evaluationFunction = &EvaluateKXK[c]; + return e; + } // OK, we didn't find any special evaluation function for the current material // configuration. Is there a suitable specialized scaling function? EndgameBase* sf; - if (pos.this_thread()->endgames.probe(key, sf)) + if ((sf = pos.this_thread()->endgames.probe(key)) != nullptr) { e->scalingFunction[sf->strong_side()] = sf; // Only strong color assigned return e; @@@ -167,17 -159,14 +159,14 @@@ // We didn't find any specialized scaling function, so fall back on generic // ones that refer to more than one material distribution. Note that in this // case we don't return after setting the function. - if (is_KBPsKs(pos)) - e->scalingFunction[WHITE] = &ScaleKBPsK[WHITE]; - - if (is_KBPsKs(pos)) - e->scalingFunction[BLACK] = &ScaleKBPsK[BLACK]; - - if (is_KQKRPs(pos)) - e->scalingFunction[WHITE] = &ScaleKQKRPs[WHITE]; + for (Color c = WHITE; c <= BLACK; ++c) + { + if (is_KBPsKs(pos, c)) + e->scalingFunction[c] = &ScaleKBPsK[c]; - else if (is_KQKRPs(pos)) - e->scalingFunction[BLACK] = &ScaleKQKRPs[BLACK]; + else if (is_KQKRPs(pos, c)) + e->scalingFunction[c] = &ScaleKQKRPs[c]; + } Value npm_w = pos.non_pawn_material(WHITE); Value npm_b = pos.non_pawn_material(BLACK);