MCPcopy Create free account
hub / github.com/citusdata/postgresql-hll / MurmurHash3_x64_128

Function MurmurHash3_x64_128

src/MurmurHash3.cpp:260–337  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

258//-----------------------------------------------------------------------------
259
260void MurmurHash3_x64_128 ( const void * key, const int len,
261 const uint32_t seed, void * out )
262{
263 const uint8_t * data = (const uint8_t*)key;
264 const int nblocks = len / 16;
265
266 uint64_t h1 = seed;
267 uint64_t h2 = seed;
268
269 const uint64_t c1 = BIG_CONSTANT(0x87c37b91114253d5);
270 const uint64_t c2 = BIG_CONSTANT(0x4cf5ad432745937f);
271
272 //----------
273 // body
274
275 const uint64_t * blocks = (const uint64_t *)(data);
276
277 for(int i = 0; i < nblocks; i++)
278 {
279 uint64_t k1 = getblock(blocks,i*2+0);
280 uint64_t k2 = getblock(blocks,i*2+1);
281
282 k1 *= c1; k1 = ROTL64(k1,31); k1 *= c2; h1 ^= k1;
283
284 h1 = ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;
285
286 k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2;
287
288 h2 = ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;
289 }
290
291 //----------
292 // tail
293
294 const uint8_t * tail = (const uint8_t*)(data + nblocks*16);
295
296 uint64_t k1 = 0;
297 uint64_t k2 = 0;
298
299 switch(len & 15)
300 {
301 case 15: k2 ^= uint64_t(tail[14]) << 48;
302 case 14: k2 ^= uint64_t(tail[13]) << 40;
303 case 13: k2 ^= uint64_t(tail[12]) << 32;
304 case 12: k2 ^= uint64_t(tail[11]) << 24;
305 case 11: k2 ^= uint64_t(tail[10]) << 16;
306 case 10: k2 ^= uint64_t(tail[ 9]) << 8;
307 case 9: k2 ^= uint64_t(tail[ 8]) << 0;
308 k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2;
309
310 case 8: k1 ^= uint64_t(tail[ 7]) << 56;
311 case 7: k1 ^= uint64_t(tail[ 6]) << 48;
312 case 6: k1 ^= uint64_t(tail[ 5]) << 40;
313 case 5: k1 ^= uint64_t(tail[ 4]) << 32;
314 case 4: k1 ^= uint64_t(tail[ 3]) << 24;
315 case 3: k1 ^= uint64_t(tail[ 2]) << 16;
316 case 2: k1 ^= uint64_t(tail[ 1]) << 8;
317 case 1: k1 ^= uint64_t(tail[ 0]) << 0;

Callers 5

hll_hash_1byteFunction · 0.85
hll_hash_2byteFunction · 0.85
hll_hash_4byteFunction · 0.85
hll_hash_8byteFunction · 0.85
hll_hash_varlenaFunction · 0.85

Calls 1

getblockFunction · 0.85

Tested by

no test coverage detected