| #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)); | |
| } | |
| 
 |