summaryrefslogtreecommitdiff
path: root/userland/libc/stdlib/rand.c
blob: e186af7c7f7a478cd79232a12ba3cdae314bd0df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdint.h>
#include <stdlib.h>

uint32_t xorshift(uint32_t x) {
  uint32_t f = x;
  x ^= x << 13;
  x ^= x >> 17;
  x ^= x << 5;
  return f + x;
}

extern uint32_t __INTERNAL_RNG_STATE;
int rand(void) {
  uint32_t x = xorshift(__INTERNAL_RNG_STATE);
  __INTERNAL_RNG_STATE++;
  return x;
}