mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
Merge commit '5121101136cb80151a9361c63dc4822afeb44eef' into thread-next
This commit is contained in:
@@ -239,10 +239,36 @@ asm(
|
||||
);
|
||||
#endif
|
||||
|
||||
|
||||
/* Pseudorandom numbers */
|
||||
|
||||
u32 random_u32(void);
|
||||
void random_init(void);
|
||||
void random_bytes(void *buf, size_t size);
|
||||
|
||||
|
||||
/* Hashing */
|
||||
|
||||
/* Constant parameter for non-parametrized hashes */
|
||||
#define HASH_PARAM 2902958171u
|
||||
|
||||
/* Precomputed powers of HASH_PARAM */
|
||||
#define HASH_PARAM1 ((u64) HASH_PARAM)
|
||||
#define HASH_PARAM2 (HASH_PARAM1 * HASH_PARAM)
|
||||
#define HASH_PARAM3 (HASH_PARAM2 * HASH_PARAM)
|
||||
#define HASH_PARAM4 (HASH_PARAM3 * HASH_PARAM)
|
||||
|
||||
/* Reduce intermediate 64-bit value to final 32-bit value */
|
||||
static inline u32 hash_value(u64 a)
|
||||
{ return ((u32) a) ^ ((u32) (a >> 32)); }
|
||||
|
||||
static inline u64 u32_hash0(u32 v, u32 p, u64 acc)
|
||||
{ return (acc + v) * p; }
|
||||
|
||||
static inline u64 u64_hash0(u64 v, u32 p, u64 acc)
|
||||
{ return u32_hash0(v >> 32, p, u32_hash0(v, p, acc)); }
|
||||
|
||||
static inline u32 u64_hash(u64 v)
|
||||
{ return hash_value(u64_hash0(v, HASH_PARAM, 0)); }
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user