Ludicrous speed hashing v1.0. Good avalanching and speed, but with some fatal differentials and poor seed avalanching.
finline u32 fastcall Murmur( const u8 *key, u32 len, u32 seed ) {
const u32 m = 0xc6a4a793;
const u8 r = 16;
const u8 *data = (const u8 *)key;
u32 h = len + seed;
for ( ; len >= 4; len -= 4, data += 4 ) {
h += *(u32 *)data;
h *= m;
h ^= h >> r;
}
switch ( len ) {
case 3: h += data[2] << 16;
case 2: h += data[1] << 8;
case 1: h += data[0];
h *= m;
h ^= h >> r;
default:;
}
h *= m;
h ^= h >> 10;
h *= m;
h ^= h >> 17;
return h;
}