]> git.sesse.net Git - stockfish/commitdiff
Sync with master
authorMarco Costalba <mcostalba@gmail.com>
Sat, 7 Feb 2015 09:31:47 +0000 (10:31 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 7 Feb 2015 09:32:28 +0000 (10:32 +0100)
bench: 7696257

1  2 
src/Makefile
src/material.cpp

diff --combined src/Makefile
index 769b9d34830780e3a0624e3a3ea043649c534399,ce8421a47da231a0da7500b43a40e5885b1c48f4..397b4046a1f14d1379cff2259bb74221aba10cbd
@@@ -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 e22942128f4a98974f856ecefb836c15b091ff8a,9873a44eb94c4dcf6205bbce3984a3eb3c5264de..ebf5adff854abc4bb6770c6547795e72c7d791c7
@@@ -64,31 -64,28 +64,28 @@@ namespace 
    Endgame<KPsK>   ScaleKPsK[]   = { Endgame<KPsK>(WHITE),   Endgame<KPsK>(BLACK) };
    Endgame<KPKP>   ScaleKPKP[]   = { Endgame<KPKP>(WHITE),   Endgame<KPKP>(BLACK) };
  
-   // Helper templates used to detect a given material distribution
-   template<Color Us> 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<Color Us> bool is_KBPsKs(const Position& pos) {
-     return   pos.non_pawn_material(Us) == BishopValueMg
-           && pos.count<BISHOP>(Us) == 1
-           && pos.count<PAWN  >(Us) >= 1;
+   bool is_KBPsKs(const Position& pos, Color us) {
+     return   pos.non_pawn_material(us) == BishopValueMg
+           && pos.count<BISHOP>(us) == 1
+           && pos.count<PAWN  >(us) >= 1;
    }
  
-   template<Color Us> bool is_KQKRPs(const Position& pos) {
-     const Color Them = (Us == WHITE ? BLACK : WHITE);
-     return  !pos.count<PAWN>(Us)
-           && pos.non_pawn_material(Us) == QueenValueMg
-           && pos.count<QUEEN>(Us)  == 1
-           && pos.count<ROOK>(Them) == 1
-           && pos.count<PAWN>(Them) >= 1;
+   bool is_KQKRPs(const Position& pos, Color us) {
+     return  !pos.count<PAWN>(us)
+           && pos.non_pawn_material(us) == QueenValueMg
+           && pos.count<QUEEN>(us)  == 1
+           && pos.count<ROOK>(~us) == 1
+           && pos.count<PAWN>(~us) >= 1;
    }
  
    /// imbalance() calculates the imbalance by comparing the piece count of each
    /// piece type for both colors.
    template<Color Us>
    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<Value>(key)) != nullptr)
        return e;
  
-   if (is_KXK<WHITE>(pos))
-   {
-       e->evaluationFunction = &EvaluateKXK[WHITE];
-       return e;
-   }
-   if (is_KXK<BLACK>(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<ScaleFactor>* sf;
  
 -  if (pos.this_thread()->endgames.probe(key, sf))
 +  if ((sf = pos.this_thread()->endgames.probe<ScaleFactor>(key)) != nullptr)
    {
        e->scalingFunction[sf->strong_side()] = sf; // Only strong color assigned
        return e;
    // 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<WHITE>(pos))
-       e->scalingFunction[WHITE] = &ScaleKBPsK[WHITE];
-   if (is_KBPsKs<BLACK>(pos))
-       e->scalingFunction[BLACK] = &ScaleKBPsK[BLACK];
-   if (is_KQKRPs<WHITE>(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<BLACK>(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);