- TTEntry *tte, *replace;
- uint32_t posKey32 = posKey >> 32; // Use the high 32 bits as key
-
- tte = replace = first_entry(posKey);
- for (int i = 0; i < ClusterSize; i++, tte++)
- {
- if (!tte->key() || tte->key() == posKey32) // empty or overwrite old
- {
- // Preserve any exsisting ttMove
- if (m == MOVE_NONE)
- m = tte->move();
-
- tte->save(posKey32, v, t, d, m, generation, statV, kingD);
- return;
- }
- else if (i == 0) // replace would be a no-op in this common case
- continue;
-
- int c1 = (replace->generation() == generation ? 2 : 0);
- int c2 = (tte->generation() == generation ? -2 : 0);
- int c3 = (tte->depth() < replace->depth() ? 1 : 0);
-
- if (c1 + c2 + c3 > 0)
- replace = tte;
- }
- replace->save(posKey32, v, t, d, m, generation, statV, kingD);
- writes++;
-}