diff --git a/vlib/compiler/cheaders.v b/vlib/compiler/cheaders.v index 47e46e73bb..5b13f581a3 100644 --- a/vlib/compiler/cheaders.v +++ b/vlib/compiler/cheaders.v @@ -240,6 +240,10 @@ static inline uint64_t wyhash64(uint64_t A, uint64_t B) { return _wymum(_wymum(A static inline uint64_t wyrand(uint64_t *seed) { *seed+=_wyp0; return _wymum(*seed^_wyp1,*seed); } static inline double wy2u01(uint64_t r) { const double _wynorm=1.0/(1ull<<52); return (r>>11)*_wynorm; } static inline double wy2gau(uint64_t r) { const double _wynorm=1.0/(1ull<<20); return ((r&0x1fffff)+((r>>21)&0x1fffff)+((r>>42)&0x1fffff))*_wynorm-3.0; } +static inline uint64_t fastest_hash(const void *key, size_t len, uint64_t seed) { + const uint8_t *p = (const uint8_t *)key; + return _like_(len >= 4) ? (_wyr4(p) + _wyr4(p + len - 4)) * (_wyr4(p + (len >> 1) - 2) ^ seed) : (_like_(len) ? _wyr3(p, len) * (_wyp0 ^ seed) : seed); +} #endif '