X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftt.cpp;h=117b60027a1678d034b88fe82ed93d7d57194266;hp=46d891cd04f1558e76b0f2b9161d872c1928694a;hb=314d446518daa035526be8539b23957ba4678468;hpb=24ba204931901c26960a97f07e3344b6d62b883f diff --git a/src/tt.cpp b/src/tt.cpp index 46d891cd..117b6002 100644 --- a/src/tt.cpp +++ b/src/tt.cpp @@ -69,14 +69,14 @@ void TranspositionTable::clear() { const TTEntry* TranspositionTable::probe(const Key key) const { - TTEntry* tte = first_entry(key); - uint16_t key16 = key >> 48; + TTEntry* const tte = first_entry(key); + const uint16_t key16 = key >> 48; - for (unsigned i = 0; i < TTClusterSize; ++i, ++tte) - if (tte->key16 == key16) + for (unsigned i = 0; i < TTClusterSize; ++i) + if (tte[i].key16 == key16) { - tte->genBound8 = generation | tte->bound(); // Refresh - return tte; + tte[i].genBound8 = uint8_t(generation | tte[i].bound()); // Refresh + return &tte[i]; } return NULL; @@ -93,28 +93,24 @@ const TTEntry* TranspositionTable::probe(const Key key) const { void TranspositionTable::store(const Key key, Value v, Bound b, Depth d, Move m, Value statV) { - TTEntry *tte, *replace; - uint16_t key16 = key >> 48; // Use the high 16 bits as key inside the cluster + TTEntry* const tte = first_entry(key); + const uint16_t key16 = key >> 48; // Use the high 16 bits as key inside the cluster - tte = replace = first_entry(key); - - for (unsigned i = 0; i < TTClusterSize; ++i, ++tte) - { - if (!tte->key16 || tte->key16 == key16) // Empty or overwrite old + for (unsigned i = 0; i < TTClusterSize; ++i) + if (!tte[i].key16 || tte[i].key16 == key16) // Empty or overwrite old { - if (!m) - m = tte->move(); // Preserve any existing ttMove - - replace = tte; - break; + // Save preserving any existing ttMove + tte[i].save(key16, v, b, d, m ? m : tte[i].move(), generation, statV); + return; } - // Implement replace strategy - if ( (( tte->genBound8 & 0xFC) == generation || tte->bound() == BOUND_EXACT) + // Implement replace strategy + TTEntry* replace = tte; + for (unsigned i = 1; i < TTClusterSize; ++i) + if ( (( tte[i].genBound8 & 0xFC) == generation || tte[i].bound() == BOUND_EXACT) - ((replace->genBound8 & 0xFC) == generation) - - (tte->depth8 < replace->depth8) < 0) - replace = tte; - } + - (tte[i].depth8 < replace->depth8) < 0) + replace = &tte[i]; replace->save(key16, v, b, d, m, generation, statV); }