void TranspositionTable::resize(size_t mbSize) {
+ assert(sizeof(TTCluster) == CacheLineSize / 2);
+
size_t newClusterCount = size_t(1) << msb((mbSize * 1024 * 1024) / sizeof(TTCluster));
if (newClusterCount == clusterCount)
clusterCount = newClusterCount;
free(mem);
- mem = calloc(clusterCount * sizeof(TTCluster) + CACHE_LINE_SIZE - 1, 1);
+ mem = calloc(clusterCount * sizeof(TTCluster) + CacheLineSize - 1, 1);
if (!mem)
{
exit(EXIT_FAILURE);
}
- table = (TTCluster*)((uintptr_t(mem) + CACHE_LINE_SIZE - 1) & ~(CACHE_LINE_SIZE - 1));
+ table = (TTCluster*)((uintptr_t(mem) + CacheLineSize - 1) & ~(CacheLineSize - 1));
}
TTEntry* const tte = first_entry(key);
const uint16_t key16 = key >> 48; // Use the high 16 bits as key inside the cluster
- for (unsigned i = 0; i < TTClusterSize; ++i)
+ for (int i = 0; i < TTClusterSize; ++i)
if (!tte[i].key16 || tte[i].key16 == key16)
{
if (tte[i].key16)
// Find an entry to be replaced according to the replacement strategy
TTEntry* replace = tte;
- for (unsigned i = 1; i < TTClusterSize; ++i)
+ for (int i = 1; i < TTClusterSize; ++i)
if ( (( tte[i].genBound8 & 0xFC) == generation8 || tte[i].bound() == BOUND_EXACT)
- ((replace->genBound8 & 0xFC) == generation8)
- (tte[i].depth8 < replace->depth8) < 0)