// File: /workspace/github_c_makefile_star2_O0/zpole[P]IICV/vl/random.c
// Function: vl_rand_uint32
vl_uint32
vl_rand_uint32 (VlRand * self)
{
  vl_uint32 y;
  static vl_uint32 mag01[2]={VL_UINT32_C(0x0), MATRIX_A};
  /* mag01[x] = x * MATRIX_A  for x=0,1 */

#define mti self->mti
#define mt self->mt

  if (mti >= N) { /* generate N words at one time */
    int kk;

    if (mti == N+1)   /* if init_genrand() has not been called, */
      vl_rand_seed (self, VL_UINT32_C(5489)); /* a default initial seed is used */

    for (kk=0;kk<N-M;kk++) {
      y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
      mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & VL_UINT32_C(0x1)];
    }
    for (;kk<N-1;kk++) {
      y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
      mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & VL_UINT32_C(0x1)];
    }
    y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);
    mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & VL_UINT32_C(0x1)];

    mti = 0;
  }

  y = mt[mti++];

  /* Tempering */
  y ^= (y >> 11);
  y ^= (y << 7) & VL_UINT32_C(0x9d2c5680);
  y ^= (y << 15) & VL_UINT32_C(0xefc60000);
  y ^= (y >> 18);

  return (vl_uint32)y;

#undef mti
#undef mt
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq 0x10(%rsp), %rax
cmpl $0x270, 0x9c0(%rax)     # imm = 0x270
jb 0x48cdf
movq 0x10(%rsp), %rax
cmpl $0x271, 0x9c0(%rax)     # imm = 0x271
jne 0x48b5e
movq 0x10(%rsp), %rdi
movl $0x1571, %esi           # imm = 0x1571
callq 0x94f0
movl $0x0, 0x8(%rsp)
cmpl $0xe3, 0x8(%rsp)
jge 0x48bef
movq 0x10(%rsp), %rax
movslq 0x8(%rsp), %rcx
movl (%rax,%rcx,4), %eax
andl $0x80000000, %eax       # imm = 0x80000000
movq 0x10(%rsp), %rcx
movl 0x8(%rsp), %edx
addl $0x1, %edx
movslq %edx, %rdx
movl (%rcx,%rdx,4), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
orl %ecx, %eax
movl %eax, 0xc(%rsp)
movq 0x10(%rsp), %rax
movl 0x8(%rsp), %ecx
addl $0x18d, %ecx            # imm = 0x18D
movslq %ecx, %rcx
movl (%rax,%rcx,4), %edx
movl 0xc(%rsp), %eax
shrl %eax
xorl %eax, %edx
movl 0xc(%rsp), %eax
andl $0x1, %eax
movl %eax, %eax
movl %eax, %ecx
leaq 0x18b01(%rip), %rax     # 0x616d0
xorl (%rax,%rcx,4), %edx
movq 0x10(%rsp), %rax
movslq 0x8(%rsp), %rcx
movl %edx, (%rax,%rcx,4)
movl 0x8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x8(%rsp)
jmp 0x48b66
jmp 0x48bf1
cmpl $0x26f, 0x8(%rsp)       # imm = 0x26F
jge 0x48c7a
movq 0x10(%rsp), %rax
movslq 0x8(%rsp), %rcx
movl (%rax,%rcx,4), %eax
andl $0x80000000, %eax       # imm = 0x80000000
movq 0x10(%rsp), %rcx
movl 0x8(%rsp), %edx
addl $0x1, %edx
movslq %edx, %rdx
movl (%rcx,%rdx,4), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
orl %ecx, %eax
movl %eax, 0xc(%rsp)
movq 0x10(%rsp), %rax
movl 0x8(%rsp), %ecx
addl $0xffffff1d, %ecx       # imm = 0xFFFFFF1D
movslq %ecx, %rcx
movl (%rax,%rcx,4), %edx
movl 0xc(%rsp), %eax
shrl %eax
xorl %eax, %edx
movl 0xc(%rsp), %eax
andl $0x1, %eax
movl %eax, %eax
movl %eax, %ecx
leaq 0x18a76(%rip), %rax     # 0x616d0
xorl (%rax,%rcx,4), %edx
movq 0x10(%rsp), %rax
movslq 0x8(%rsp), %rcx
movl %edx, (%rax,%rcx,4)
movl 0x8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x8(%rsp)
jmp 0x48bf1
movq 0x10(%rsp), %rax
movl 0x9bc(%rax), %eax
andl $0x80000000, %eax       # imm = 0x80000000
movq 0x10(%rsp), %rcx
movl (%rcx), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
orl %ecx, %eax
movl %eax, 0xc(%rsp)
movq 0x10(%rsp), %rax
movl 0x630(%rax), %ecx
movl 0xc(%rsp), %eax
shrl %eax
xorl %eax, %ecx
movl 0xc(%rsp), %eax
andl $0x1, %eax
movl %eax, %eax
movl %eax, %edx
leaq 0x18a0e(%rip), %rax     # 0x616d0
xorl (%rax,%rdx,4), %ecx
movq 0x10(%rsp), %rax
movl %ecx, 0x9bc(%rax)
movq 0x10(%rsp), %rax
movl $0x0, 0x9c0(%rax)
movq 0x10(%rsp), %rax
movq 0x10(%rsp), %rdx
movl 0x9c0(%rdx), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, 0x9c0(%rdx)
movl %ecx, %ecx
movl (%rax,%rcx,4), %eax
movl %eax, 0xc(%rsp)
movl 0xc(%rsp), %eax
shrl $0xb, %eax
xorl 0xc(%rsp), %eax
movl %eax, 0xc(%rsp)
movl 0xc(%rsp), %eax
shll $0x7, %eax
andl $0x9d2c5680, %eax       # imm = 0x9D2C5680
xorl 0xc(%rsp), %eax
movl %eax, 0xc(%rsp)
movl 0xc(%rsp), %eax
shll $0xf, %eax
andl $0xefc60000, %eax       # imm = 0xEFC60000
xorl 0xc(%rsp), %eax
movl %eax, 0xc(%rsp)
movl 0xc(%rsp), %eax
shrl $0x12, %eax
xorl 0xc(%rsp), %eax
movl %eax, 0xc(%rsp)
movl 0xc(%rsp), %eax
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)