You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
587 B
30 lines
587 B
#include "igt_rand.h"
|
|
|
|
/**
|
|
* SECTION:igt_rand
|
|
* @short_description: Random numbers helper library
|
|
* @title: Random
|
|
* @include: igt_rand.h
|
|
*/
|
|
|
|
static uint32_t global = 0x12345678;
|
|
|
|
uint32_t hars_petruska_f54_1_random_seed(uint32_t new_state)
|
|
{
|
|
uint32_t old_state = global;
|
|
global = new_state;
|
|
return old_state;
|
|
}
|
|
|
|
uint32_t hars_petruska_f54_1_random(uint32_t *s)
|
|
{
|
|
#define rol(x,k) ((x << k) | (x >> (32-k)))
|
|
return *s = (*s ^ rol(*s, 5) ^ rol(*s, 24)) + 0x37798849;
|
|
#undef rol
|
|
}
|
|
|
|
uint32_t hars_petruska_f54_1_random_unsafe(void)
|
|
{
|
|
return hars_petruska_f54_1_random(&global);
|
|
}
|