]> git.sesse.net Git - stockfish/blobdiff - src/tt.cpp
Save threadID info in Position
[stockfish] / src / tt.cpp
index a2ad42d0e54f7af87e53b75fca03eb6a300da340..16331b8762ae04c60689a341f46af7c3ad49e9c9 100644 (file)
@@ -25,7 +25,7 @@
 #include <cassert>
 #include <cmath>
 #include <cstring>
-#if !(defined(__hpux) || defined(__ppc__) || defined(__ppc64__) || defined(__arm__))
+#if !defined(NO_PREFETCH)
 #  include <xmmintrin.h>
 #endif
 
@@ -111,7 +111,7 @@ inline TTEntry* TranspositionTable::first_entry(const Key posKey) const {
 /// is bigger than the depth of t2. A TTEntry of type VALUE_TYPE_EVAL
 /// never replaces another entry for the same position.
 
-void TranspositionTable::store(const Key posKey, Value v, ValueType t, Depth d, Move m) {
+void TranspositionTable::store(const Key posKey, Value v, ValueType t, Depth d, Move m, Value statV, Value kingD) {
 
   TTEntry *tte, *replace;
   uint32_t posKey32 = posKey >> 32; // Use the high 32 bits as key
@@ -121,15 +121,11 @@ void TranspositionTable::store(const Key posKey, Value v, ValueType t, Depth d,
   {
       if (!tte->key() || tte->key() == posKey32) // empty or overwrite old
       {
-          // Do not overwrite when new type is VALUE_TYPE_EV_LO
-          if (tte->key() && t == VALUE_TYPE_EV_LO)
-              return;
-
           // Preserve any exsisting ttMove
           if (m == MOVE_NONE)
               m = tte->move();
 
-          *tte = TTEntry(posKey32, v, t, d, m, generation);
+          *tte = TTEntry(posKey32, v, t, d, m, generation, statV, kingD);
           return;
       }
       else if (i == 0)  // replace would be a no-op in this common case
@@ -142,7 +138,7 @@ void TranspositionTable::store(const Key posKey, Value v, ValueType t, Depth d,
       if (c1 + c2 + c3 > 0)
           replace = tte;
   }
-  *replace = TTEntry(posKey32, v, t, d, m, generation);
+  *replace = TTEntry(posKey32, v, t, d, m, generation, statV, kingD);
   writes++;
 }
 
@@ -170,8 +166,8 @@ TTEntry* TranspositionTable::retrieve(const Key posKey) const {
 /// to be loaded from RAM, that can be very slow. When we will
 /// subsequently call retrieve() the TT data will be already
 /// quickly accessible in L1/L2 CPU cache.
-#if defined(__hpux) || defined(__ppc__) || defined(__ppc64__) || defined(__arm__)
-void TranspositionTable::prefetch(const Key) const {} // Not supported on HP UX
+#if defined(NO_PREFETCH)
+void TranspositionTable::prefetch(const Key) const {}
 #else
 
 void TranspositionTable::prefetch(const Key posKey) const {
@@ -209,13 +205,13 @@ void TranspositionTable::new_search() {
 void TranspositionTable::insert_pv(const Position& pos, Move pv[]) {
 
   StateInfo st;
-  Position p(pos);
+  Position p(pos, pos.thread());
 
   for (int i = 0; pv[i] != MOVE_NONE; i++)
   {
       TTEntry *tte = retrieve(p.get_key());
       if (!tte || tte->move() != pv[i])
-          store(p.get_key(), VALUE_NONE, VALUE_TYPE_NONE, Depth(-127*OnePly), pv[i]);
+          store(p.get_key(), VALUE_NONE, VALUE_TYPE_NONE, Depth(-127*OnePly), pv[i], VALUE_NONE, VALUE_NONE);
       p.do_move(pv[i], st);
   }
 }
@@ -231,7 +227,7 @@ void TranspositionTable::extract_pv(const Position& pos, Move pv[], const int PL
 
   const TTEntry* tte;
   StateInfo st;
-  Position p(pos);
+  Position p(pos, pos.thread());
   int ply = 0;
 
   // Update position to the end of current PV