From: Marco Costalba Date: Mon, 10 Nov 2008 14:15:40 +0000 (+0100) Subject: Fix a logic bug in TranspositionTable::store() X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=34b1d0538b3112ebdef57090d0fba5cbfc3e51fb Fix a logic bug in TranspositionTable::store() Make the logic work as advertised in the function description. Still a fallback from TT cleanup. This should be less serious then the one in retrieve(), but it's still a bug. Signed-off-by: Marco Costalba --- diff --git a/src/tt.cpp b/src/tt.cpp index 97ca23dc..fb524e30 100644 --- a/src/tt.cpp +++ b/src/tt.cpp @@ -124,12 +124,14 @@ void TranspositionTable::store(const Position &pos, Value v, Depth d, *(tte+i) = TTEntry(pos.get_key(), v, type, d, m, generation); return; } - if ( i == 0 // already is (replace == tte+i), common case - || replace->generation() < (tte+i)->generation()) + if (i == 0) // replace would be a no-op in this common case continue; - if ( replace->generation() > (tte+i)->generation() - || (tte+i)->depth() < replace->depth()) + int c1 = (replace->generation() == generation ? 2 : 0); + int c2 = ((tte+i)->generation() == generation ? -2 : 0); + int c3 = ((tte+i)->depth() < replace->depth() ? 1 : 0); + + if (c1 + c2 + c3 > 0) replace = tte+i; } *replace = TTEntry(pos.get_key(), v, type, d, m, generation);