#include <stdlib.h> /* 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 + 1 */ #define GOLDEN_RATIO_PRIME_32 0x9e370001UL /* * * hash32 - generate a hash value in the range [0, 2^@bits - 1] * @val: the input value * @bits: the number of bits in a return value * * High bits are more random, so we use them. * */ uint32_t hash32(uint32_t val, unsigned int bits) { uint32_t hash = val * GOLDEN_RATIO_PRIME_32; return (hash >> (32 - bits)); }