36uint64_t
fasthash64(
const void* buf,
size_t len, uint64_t seed) {
37 const uint64_t m = 0x880355f21e6d1965ULL;
38 const uint64_t* pos = (
const uint64_t*)buf;
39 const uint64_t*
end = pos + (len / 8);
40 const unsigned char* pos2;
41 uint64_t h = seed ^ (len * m);
50 pos2 = (
const unsigned char*)pos;
55 v ^= (uint64_t)pos2[6] << 48;
57 v ^= (uint64_t)pos2[5] << 40;
59 v ^= (uint64_t)pos2[4] << 32;
61 v ^= (uint64_t)pos2[3] << 24;
63 v ^= (uint64_t)pos2[2] << 16;
65 v ^= (uint64_t)pos2[1] << 8;
67 v ^= (uint64_t)pos2[0];
72 return mix_internal(h);