See: DJB
finline u32 fastcall x31( const u8 *key, u32 len, u32 seed ) {
u32 hash = seed + len;
for ( ; len & ~1; len -= 2, key += 2 )
hash = ( ( ( hash * 31 ) + key[0] ) * 31 ) + key[1];
if ( len & 1 )
hash = ( hash * 31 ) + key[0];
return hash;
}