Murmur264

64 bit variant of Murmur2. Has the same problems as Murmur2 on keys not a multiple of 8, but slightly better mixing otherwise.

Tests

Performance

Implementation

finline u64 fastcall Murmur264( const u8 *key, u64 len, u64 seed ) {
	const u64 m = 0xc6a4a7935bd1e995;
	const u8 r = 47;
	u64 h = len + seed;

	for ( ; len >= 8; len -= 8, key += 8 ) {
		u64 k = *(u64 *)key * m;
		k ^= k >> r; 
		k *= m;
		h = ( h * m ) ^ k;
	}

	switch ( len & 7 ) {
		case 7: h ^= u64(key[6]) << 48;
		case 6: h ^= u64(key[5]) << 40;
		case 5: h ^= u64(key[4]) << 32;
		case 4: h ^= u64(key[3]) << 24;
		case 3: h ^= u64(key[2]) << 16;
		case 2: h ^= u64(key[1]) << 8;
		case 1: h ^= u64(key[0]);
	        h *= m;
	}

	h ^= h >> r;
	h *= m;
	h ^= h >> r;
	return h;
}