From 34b1d0538b3112ebdef57090d0fba5cbfc3e51fb Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 10 Nov 2008 15:15:40 +0100 Subject: [PATCH] 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 --- src/tt.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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); -- 2.39.2