Skip to content

Commit

Permalink
Merge pull request #4831 from mikesinouye/hashlib
Browse files Browse the repository at this point in the history
Approximately double the max hash table size
  • Loading branch information
povik authored Jan 3, 2025
2 parents cbb95cb + de9cb5a commit 45e31f0
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions kernel/hashlib.h
Original file line number Diff line number Diff line change
Expand Up @@ -324,10 +324,10 @@ template<typename T> struct hash_ops<std::optional<T>> {
}
};

inline int hashtable_size(int min_size)
inline unsigned int hashtable_size(unsigned int min_size)
{
// Primes as generated by https://oeis.org/A175953
static std::vector<int> zero_and_some_primes = {
static std::vector<unsigned int> zero_and_some_primes = {
0, 23, 29, 37, 47, 59, 79, 101, 127, 163, 211, 269, 337, 431, 541, 677,
853, 1069, 1361, 1709, 2137, 2677, 3347, 4201, 5261, 6577, 8231, 10289,
12889, 16127, 20161, 25219, 31531, 39419, 49277, 61603, 77017, 96281,
Expand All @@ -337,13 +337,13 @@ inline int hashtable_size(int min_size)
25499291, 31874149, 39842687, 49803361, 62254207, 77817767, 97272239,
121590311, 151987889, 189984863, 237481091, 296851369, 371064217,
463830313, 579787991, 724735009, 905918777, 1132398479, 1415498113,
1769372713
1769372713, 2211715897, 2764644887, 3455806139
};

for (auto p : zero_and_some_primes)
if (p >= min_size) return p;

if (sizeof(int) == 4)
if (sizeof(unsigned int) == 4)
throw std::length_error("hash table exceeded maximum size.\nDesign is likely too large for yosys to handle, if possible try not to flatten the design.");

for (auto p : zero_and_some_primes)
Expand Down

0 comments on commit 45e31f0

Please sign in to comment.