xref: /OK3568_Linux_fs/u-boot/lib/rand.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Simple xorshift PRNG
3*4882a593Smuzhiyun  *   see http://www.jstatsoft.org/v08/i14/paper
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 2012 Michael Walle
6*4882a593Smuzhiyun  * Michael Walle <michael@walle.cc>
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <common.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun static unsigned int y = 1U;
14*4882a593Smuzhiyun 
rand_r(unsigned int * seedp)15*4882a593Smuzhiyun unsigned int rand_r(unsigned int *seedp)
16*4882a593Smuzhiyun {
17*4882a593Smuzhiyun 	*seedp ^= (*seedp << 13);
18*4882a593Smuzhiyun 	*seedp ^= (*seedp >> 17);
19*4882a593Smuzhiyun 	*seedp ^= (*seedp << 5);
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun 	return *seedp;
22*4882a593Smuzhiyun }
23*4882a593Smuzhiyun 
rand(void)24*4882a593Smuzhiyun unsigned int rand(void)
25*4882a593Smuzhiyun {
26*4882a593Smuzhiyun 	return rand_r(&y);
27*4882a593Smuzhiyun }
28*4882a593Smuzhiyun 
srand(unsigned int seed)29*4882a593Smuzhiyun void srand(unsigned int seed)
30*4882a593Smuzhiyun {
31*4882a593Smuzhiyun 	y = seed;
32*4882a593Smuzhiyun }
33