x ^= x >> 17;
x -= x << 9;
x ^= x << 4;
+ x += basis;
x -= x << 3;
x ^= x << 10;
x ^= x >> 15;
- return x + basis;
+ return x;
}
/* An attempt at a useful 1-bit hash function. Has not been analyzed for
static inline uint32_t hash_double(double x, uint32_t basis)
{
- BUILD_ASSERT_DECL(sizeof x == 8);
- return hash_2words((const uint32_t *) &x, basis);
+ uint32_t value[2];
+ BUILD_ASSERT_DECL(sizeof x == sizeof value);
+
+ memcpy(value, &x, sizeof value);
+ return hash_2words(value, basis);
}
static inline uint32_t hash_pointer(const void *p, uint32_t basis)