With rotates instead of shifts, the upper and lower 16 bits of the returned
hash are always the same.
I noticed this while working on replacing Jenkins hash by murmurhash,
because some of the database unit tests started failing, e.g. "row
hashing (scalars)".
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
static inline uint32_t mhash_finish(uint32_t hash, size_t n)
{
hash ^= n * 4;
static inline uint32_t mhash_finish(uint32_t hash, size_t n)
{
hash ^= n * 4;
- hash ^= hash_rot(hash, 16);
- hash ^= hash_rot(hash, 13);
- hash ^= hash_rot(hash, 16);