Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / vera / niu_ippktgen / C / wrapper / pgrand.c
CommitLineData
86530b38
AT
1#include <stdio.h>
2
3#define N 25
4#define M 7
5
6unsigned int rand(); /* returns a random integer */
7void init( unsigned int ); /* initialize the generator */
8
9
10/* return a random float >= 0 and < 1 */
11#define rand_float ((double)rand() / 4294967296.0)
12
13
14static unsigned int x[N]; /* the 25 seeds */
15
16static unsigned int mag01[2];
17static int randk;
18void setpgSeed( unsigned int seed )
19{
20 int k;
21
22 x[0] = (seed|1) & 0xffffffff;
23 for (k=1; k<N; k++)
24 x[k] = (69069 * x[k-1]) & 0xffffffff;
25 mag01[0]= 0x0;
26 mag01[1]= 0x8ebfd028; /* "magic" vector */
27 randk = 0;
28}
29
30
31unsigned int pgrand()
32 {
33 unsigned int y;
34 unsigned int retval;
35 int kk;
36
37
38 if (randk==N)
39 {
40 for (kk=0; kk < N-M; kk++)
41 x[kk] = x[kk+M] ^ (x[kk] >> 1) ^ mag01[x[kk] & 1];
42
43 for (; kk < N; kk++)
44 x[kk] = x[kk+(M-N)] ^ (x[kk] >> 1) ^ mag01[x[kk] & 1];
45
46 randk=0;
47 }
48 y = x[randk++];
49 y ^= (y << 7) & 0x2b5b2500;
50 y ^= (y << 15) & 0xdb8b0000;
51 y &= 0xffffffff; /* you may delete this line if word size = 32 */
52 y ^= (y >> 16);
53
54 retval = y;
55 return (retval);
56}
57