unsigned int genrand_int32(void) {
  unsigned int y;
  static unsigned int mag01[2] = {0x0UL, 0x9908b0dfUL};
  static unsigned int mt[624];
  static int mti;
  if (!mti) {
    unsigned int s = 0x4141f00d;
    mt[0] = s & 0xffffffffUL;
    for (mti = 1; mti < 624; mti++) {
      mt[mti] = (1812433253UL * (mt[mti - 1] ^ (mt[mti - 1] >> 30)) + mti);
      mt[mti] &= 0xffffffffUL;
    }
  }
  if (mti >= 624) {
    int kk;
    for (kk = 0; kk < 624 - 397; kk++) {
      y = (mt[kk] & 0x80000000UL) | (mt[kk + 1] & 0x7fffffffUL);
      mt[kk] = mt[kk + 397] ^ (y >> 1) ^ mag01[y & 0x1UL];
    }
    for (; kk < 624 - 1; kk++) {
      y = (mt[kk] & 0x80000000UL) | (mt[kk + 1] & 0x7fffffffUL);
      mt[kk] = mt[kk + (397 - 624)] ^ (y >> 1) ^ mag01[y & 0x1UL];
    }
    y = (mt[624 - 1] & 0x80000000UL) | (mt[0] & 0x7fffffffUL);
    mt[624 - 1] = mt[397 - 1] ^ (y >> 1) ^ mag01[y & 0x1UL];
    mti = 0;
  }
  y = mt[mti++];
  y ^= (y >> 11);
  y ^= (y << 7) & 0x9d2c5680UL;
  y ^= (y << 15) & 0xefc60000UL;
  y ^= (y >> 18);
  return y;
}


x86 assembly (clang, -O0):
<genrand_int32>:
push   %rbp
mov    %rsp,%rbp
cmpl   $0x0,0x38f5(%rip)
jne    11e2 <genrand_int32+0xe2>
movl   $0x4141f00d,-0x8(%rbp)
mov    -0x8(%rbp),%eax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %eax,0x2f12(%rip)
movl   $0x1,0x38c8(%rip)
cmpl   $0x270,0x38be(%rip)
jge    11dd <genrand_int32+0xdd>
mov    0x38b2(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2ee5(%rip),%rax
mov    (%rax,%rcx,4),%eax
mov    0x389c(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rdx
lea    0x2ecf(%rip),%rcx
mov    (%rcx,%rdx,4),%ecx
shr    $0x1e,%ecx
xor    %ecx,%eax
mov    %eax,%eax
imul   $0x6c078965,%rax,%rax
movslq 0x3877(%rip),%rcx
add    %rcx,%rax
mov    %eax,%edx
movslq 0x386b(%rip),%rcx
lea    0x2ea4(%rip),%rax
mov    %edx,(%rax,%rcx,4)
movslq 0x385a(%rip),%rcx
lea    0x2e93(%rip),%rax
mov    (%rax,%rcx,4),%eax
movabs $0xffffffff,%rdx
and    %rdx,%rax
mov    %eax,%edx
lea    0x2e7a(%rip),%rax
mov    %edx,(%rax,%rcx,4)
mov    0x3831(%rip),%eax
add    $0x1,%eax
mov    %eax,0x3828(%rip)
jmp    1138 <genrand_int32+0x38>
jmp    11e2 <genrand_int32+0xe2>
cmpl   $0x270,0x3814(%rip)
jl     137d <genrand_int32+0x27d>
movl   $0x0,-0xc(%rbp)
cmpl   $0xe3,-0xc(%rbp)
jge    128d <genrand_int32+0x18d>
movslq -0xc(%rbp),%rcx
lea    0x2e2f(%rip),%rax
mov    (%rax,%rcx,4),%eax
movabs $0x80000000,%rcx
and    %rcx,%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    0x2e0f(%rip),%rcx
mov    (%rcx,%rdx,4),%ecx
and    $0x7fffffff,%rcx
or     %rcx,%rax
mov    %eax,-0x4(%rbp)
mov    -0xc(%rbp),%eax
add    $0x18d,%eax
movslq %eax,%rcx
lea    0x2ded(%rip),%rax
mov    (%rax,%rcx,4),%edx
mov    -0x4(%rbp),%eax
shr    $0x1,%eax
xor    %eax,%edx
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
and    $0x1,%rcx
lea    0x2db2(%rip),%rax
xor    (%rax,%rcx,4),%edx
movslq -0xc(%rbp),%rcx
lea    0x2dc4(%rip),%rax
mov    %edx,(%rax,%rcx,4)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11f9 <genrand_int32+0xf9>
jmp    1292 <genrand_int32+0x192>
cmpl   $0x26f,-0xc(%rbp)
jge    1326 <genrand_int32+0x226>
movslq -0xc(%rbp),%rcx
lea    0x2d96(%rip),%rax
mov    (%rax,%rcx,4),%eax
movabs $0x80000000,%rcx
and    %rcx,%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    0x2d76(%rip),%rcx
mov    (%rcx,%rdx,4),%ecx
and    $0x7fffffff,%rcx
or     %rcx,%rax
mov    %eax,-0x4(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffff1d,%eax
movslq %eax,%rcx
lea    0x2d54(%rip),%rax
mov    (%rax,%rcx,4),%edx
mov    -0x4(%rbp),%eax
shr    $0x1,%eax
xor    %eax,%edx
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
and    $0x1,%rcx
lea    0x2d19(%rip),%rax
xor    (%rax,%rcx,4),%edx
movslq -0xc(%rbp),%rcx
lea    0x2d2b(%rip),%rax
mov    %edx,(%rax,%rcx,4)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1292 <genrand_int32+0x192>
mov    0x36d0(%rip),%eax
movabs $0x80000000,%rcx
and    %rcx,%rax
mov    0x2d01(%rip),%ecx
and    $0x7fffffff,%rcx
or     %rcx,%rax
mov    %eax,-0x4(%rbp)
mov    0x331e(%rip),%eax
mov    -0x4(%rbp),%ecx
shr    $0x1,%ecx
xor    %ecx,%eax
mov    -0x4(%rbp),%ecx
mov    %ecx,%edx
and    $0x1,%rdx
lea    0x2cb6(%rip),%rcx
xor    (%rcx,%rdx,4),%eax
mov    %eax,0x3689(%rip)
movl   $0x0,0x3683(%rip)
mov    0x367d(%rip),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,0x3672(%rip)
movslq %eax,%rcx
lea    0x2ca8(%rip),%rax
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
shr    $0xb,%eax
xor    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
shl    $0x7,%eax
mov    %eax,%eax
mov    %eax,%ecx
movabs $0x9d2c5680,%rax
and    %rax,%rcx
mov    -0x4(%rbp),%eax
xor    %rcx,%rax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
shl    $0xf,%eax
mov    %eax,%eax
mov    %eax,%ecx
movabs $0xefc60000,%rax
and    %rax,%rcx
mov    -0x4(%rbp),%eax
xor    %rcx,%rax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
shr    $0x12,%eax
xor    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<genrand_int32>:
movslq 0x38e9(%rip),%rax
test   %rax,%rax
je     1206 <genrand_int32+0x106>
cmp    $0x26f,%eax
jle    1275 <genrand_int32+0x175>
mov    0x2f0f(%rip),%esi
xor    %edx,%edx
lea    0x2f06(%rip),%rcx
lea    0xecf(%rip),%r8
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
and    $0x80000000,%esi
mov    0x4(%rcx,%rdx,4),%edi
mov    %edi,%eax
and    $0x7ffffffe,%eax
or     %esi,%eax
shr    %eax
mov    %edi,%esi
and    $0x1,%edi
mov    (%r8,%rdi,4),%edi
xor    0x634(%rcx,%rdx,4),%edi
xor    %eax,%edi
mov    %edi,(%rcx,%rdx,4)
lea    0x1(%rdx),%rax
mov    %rax,%rdx
cmp    $0xe3,%rax
jne    1140 <genrand_int32+0x40>
mov    0x323d(%rip),%esi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
and    $0x80000000,%esi
mov    0x390(%rcx,%rdx,4),%eax
mov    %eax,%edi
and    $0x7ffffffe,%edi
or     %esi,%edi
shr    %edi
mov    %eax,%esi
and    $0x1,%eax
mov    (%r8,%rax,4),%eax
xor    (%rcx,%rdx,4),%eax
xor    %edi,%eax
mov    %eax,0x38c(%rcx,%rdx,4)
add    $0x1,%rdx
cmp    $0x18c,%rdx
jne    1190 <genrand_int32+0x90>
mov    $0x80000000,%eax
and    0x3816(%rip),%eax
mov    0x2e54(%rip),%ecx
mov    %ecx,%edx
and    $0x7ffffffe,%edx
or     %eax,%edx
mov    %ecx,%eax
and    $0x1,%eax
mov    (%r8,%rax,4),%eax
xor    0x346b(%rip),%eax
shr    %edx
xor    %edx,%eax
mov    %eax,0x37ed(%rip)
mov    $0x1,%eax
jmp    1282 <genrand_int32+0x182>
movl   $0x4141f00d,0x2e20(%rip)
f0 41 41
mov    $0x1,%eax
mov    $0x4141f00d,%esi
mov    $0x2,%ecx
lea    0x2e0a(%rip),%r8
cs nopw 0x0(%rax,%rax,1)
mov    %esi,%edi
shr    $0x1e,%edi
xor    %esi,%edi
imul   $0x6c078965,%edi,%edi
add    %rax,%rdi
mov    %edi,(%r8,%rax,4)
cmp    $0x270,%rcx
je     111b <genrand_int32+0x1b>
lea    0x1(%rax),%rsi
mov    %edi,%edx
shr    $0x1e,%edx
xor    %edi,%edx
imul   $0x6c078965,%edx,%edx
add    %edx,%esi
add    %ecx,%edx
mov    %edx,0x4(%r8,%rax,4)
add    $0x2,%rax
add    $0x2,%rcx
jmp    1230 <genrand_int32+0x130>
lea    0x2db4(%rip),%rcx
mov    (%rcx,%rax,4),%ecx
add    $0x1,%eax
mov    %eax,0x3768(%rip)
mov    %ecx,%eax
shr    $0xb,%eax
xor    %ecx,%eax
mov    %eax,%ecx
shl    $0x7,%ecx
and    $0x9d2c5680,%ecx
xor    %eax,%ecx
mov    %ecx,%edx
shl    $0xf,%edx
and    $0xefc60000,%edx
xor    %ecx,%edx
mov    %edx,%eax
shr    $0x12,%eax
xor    %edx,%eax
ret

LLVM IR (-O0):
@genrand_int32.mag01 = internal global [2 x i32] [i32 0, i32 -1727483681]
@genrand_int32.mt = internal global [624 x i32] zeroinitializer
@genrand_int32.mti = internal global i32 0
define i32 @genrand_int32() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = load i32, i32* @genrand_int32.mti
%5 = icmp ne i32 %4, 0
br i1 %5, label %47, label %6
6: ; preds = %0
store i32 1094840333, i32* %2
%7 = load i32, i32* %2
%8 = zext i32 %7 to i64
%9 = and i64 %8, 4294967295
%10 = trunc i64 %9 to i32
store i32 %10, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 0)
store i32 1, i32* @genrand_int32.mti
br label %11
11: ; preds = %43, %6
%12 = load i32, i32* @genrand_int32.mti
%13 = icmp slt i32 %12, 624
br i1 %13, label %14, label %46
14: ; preds = %11
%15 = load i32, i32* @genrand_int32.mti
%16 = sub nsw i32 %15, 1
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %17
%19 = load i32, i32* %18
%20 = load i32, i32* @genrand_int32.mti
%21 = sub nsw i32 %20, 1
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %22
%24 = load i32, i32* %23
%25 = lshr i32 %24, 30
%26 = xor i32 %19, %25
%27 = zext i32 %26 to i64
%28 = mul i64 1812433253, %27
%29 = load i32, i32* @genrand_int32.mti
%30 = sext i32 %29 to i64
%31 = add i64 %28, %30
%32 = trunc i64 %31 to i32
%33 = load i32, i32* @genrand_int32.mti
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %34
store i32 %32, i32* %35
%36 = load i32, i32* @genrand_int32.mti
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %37
%39 = load i32, i32* %38
%40 = zext i32 %39 to i64
%41 = and i64 %40, 4294967295
%42 = trunc i64 %41 to i32
store i32 %42, i32* %38
br label %43
43: ; preds = %14
%44 = load i32, i32* @genrand_int32.mti
%45 = add nsw i32 %44, 1
store i32 %45, i32* @genrand_int32.mti
br label %11
46: ; preds = %11
br label %47
47: ; preds = %46, %0
%48 = load i32, i32* @genrand_int32.mti
%49 = icmp sge i32 %48, 624
br i1 %49, label %50, label %149
50: ; preds = %47
store i32 0, i32* %3
br label %51
51: ; preds = %87, %50
%52 = load i32, i32* %3
%53 = icmp slt i32 %52, 227
br i1 %53, label %54, label %90
54: ; preds = %51
%55 = load i32, i32* %3
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %56
%58 = load i32, i32* %57
%59 = zext i32 %58 to i64
%60 = and i64 %59, 2147483648
%61 = load i32, i32* %3
%62 = add nsw i32 %61, 1
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %63
%65 = load i32, i32* %64
%66 = zext i32 %65 to i64
%67 = and i64 %66, 2147483647
%68 = or i64 %60, %67
%69 = trunc i64 %68 to i32
store i32 %69, i32* %1
%70 = load i32, i32* %3
%71 = add nsw i32 %70, 397
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %72
%74 = load i32, i32* %73
%75 = load i32, i32* %1
%76 = lshr i32 %75, 1
%77 = xor i32 %74, %76
%78 = load i32, i32* %1
%79 = zext i32 %78 to i64
%80 = and i64 %79, 1
%81 = getelementptr inbounds [2 x i32], [2 x i32]* @genrand_int32.mag01, i64 0, i64 %80
%82 = load i32, i32* %81
%83 = xor i32 %77, %82
%84 = load i32, i32* %3
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %85
store i32 %83, i32* %86
br label %87
87: ; preds = %54
%88 = load i32, i32* %3
%89 = add nsw i32 %88, 1
store i32 %89, i32* %3
br label %51
90: ; preds = %51
br label %91
91: ; preds = %127, %90
%92 = load i32, i32* %3
%93 = icmp slt i32 %92, 623
br i1 %93, label %94, label %130
94: ; preds = %91
%95 = load i32, i32* %3
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %96
%98 = load i32, i32* %97
%99 = zext i32 %98 to i64
%100 = and i64 %99, 2147483648
%101 = load i32, i32* %3
%102 = add nsw i32 %101, 1
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %103
%105 = load i32, i32* %104
%106 = zext i32 %105 to i64
%107 = and i64 %106, 2147483647
%108 = or i64 %100, %107
%109 = trunc i64 %108 to i32
store i32 %109, i32* %1
%110 = load i32, i32* %3
%111 = add nsw i32 %110, -227
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %112
%114 = load i32, i32* %113
%115 = load i32, i32* %1
%116 = lshr i32 %115, 1
%117 = xor i32 %114, %116
%118 = load i32, i32* %1
%119 = zext i32 %118 to i64
%120 = and i64 %119, 1
%121 = getelementptr inbounds [2 x i32], [2 x i32]* @genrand_int32.mag01, i64 0, i64 %120
%122 = load i32, i32* %121
%123 = xor i32 %117, %122
%124 = load i32, i32* %3
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %125
store i32 %123, i32* %126
br label %127
127: ; preds = %94
%128 = load i32, i32* %3
%129 = add nsw i32 %128, 1
store i32 %129, i32* %3
br label %91
130: ; preds = %91
%131 = load i32, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 623)
%132 = zext i32 %131 to i64
%133 = and i64 %132, 2147483648
%134 = load i32, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 0)
%135 = zext i32 %134 to i64
%136 = and i64 %135, 2147483647
%137 = or i64 %133, %136
%138 = trunc i64 %137 to i32
store i32 %138, i32* %1
%139 = load i32, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 396)
%140 = load i32, i32* %1
%141 = lshr i32 %140, 1
%142 = xor i32 %139, %141
%143 = load i32, i32* %1
%144 = zext i32 %143 to i64
%145 = and i64 %144, 1
%146 = getelementptr inbounds [2 x i32], [2 x i32]* @genrand_int32.mag01, i64 0, i64 %145
%147 = load i32, i32* %146
%148 = xor i32 %142, %147
store i32 %148, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 623)
store i32 0, i32* @genrand_int32.mti
br label %149
149: ; preds = %130, %47
%150 = load i32, i32* @genrand_int32.mti
%151 = add nsw i32 %150, 1
store i32 %151, i32* @genrand_int32.mti
%152 = sext i32 %150 to i64
%153 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %152
%154 = load i32, i32* %153
store i32 %154, i32* %1
%155 = load i32, i32* %1
%156 = lshr i32 %155, 11
%157 = load i32, i32* %1
%158 = xor i32 %157, %156
store i32 %158, i32* %1
%159 = load i32, i32* %1
%160 = shl i32 %159, 7
%161 = zext i32 %160 to i64
%162 = and i64 %161, 2636928640
%163 = load i32, i32* %1
%164 = zext i32 %163 to i64
%165 = xor i64 %164, %162
%166 = trunc i64 %165 to i32
store i32 %166, i32* %1
%167 = load i32, i32* %1
%168 = shl i32 %167, 15
%169 = zext i32 %168 to i64
%170 = and i64 %169, 4022730752
%171 = load i32, i32* %1
%172 = zext i32 %171 to i64
%173 = xor i64 %172, %170
%174 = trunc i64 %173 to i32
store i32 %174, i32* %1
%175 = load i32, i32* %1
%176 = lshr i32 %175, 18
%177 = load i32, i32* %1
%178 = xor i32 %177, %176
store i32 %178, i32* %1
%179 = load i32, i32* %1
ret i32 %179
}

LLVM IR (-O2):
@genrand_int32.mag01 = internal unnamed_addr constant [2 x i32] [i32 0, i32 -1727483681]
@genrand_int32.mt = internal unnamed_addr global [624 x i32] zeroinitializer
@genrand_int32.mti = internal unnamed_addr global i32 0
define i32 @genrand_int32() {
%1 = load i32, i32* @genrand_int32.mti
%2 = icmp eq i32 %1, 0
br i1 %2, label %3, label %23
3: ; preds = %0
store i32 1094840333, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 0)
br label %4
4: ; preds = %15, %3
%5 = phi i32 [ 1094840333, %3 ], [ %20, %15 ]
%6 = phi i64 [ 1, %3 ], [ %22, %15 ]
%7 = lshr i32 %5, 30
%8 = xor i32 %7, %5
%9 = mul i32 %8, 1812433253
%10 = trunc i64 %6 to i32
%11 = add i32 %9, %10
%12 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %6
store i32 %11, i32* %12
%13 = add nuw nsw i64 %6, 1
%14 = icmp eq i64 %13, 624
br i1 %14, label %30, label %15
15: ; preds = %4
%16 = lshr i32 %11, 30
%17 = xor i32 %16, %11
%18 = mul i32 %17, 1812433253
%19 = trunc i64 %13 to i32
%20 = add i32 %18, %19
%21 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %13
store i32 %20, i32* %21
%22 = add nuw nsw i64 %6, 2
br label %4
23: ; preds = %0
%24 = icmp sgt i32 %1, 623
br i1 %24, label %30, label %25
25: ; preds = %23
%26 = sext i32 %1 to i64
%27 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %26
%28 = load i32, i32* %27
%29 = add i32 %1, 1
br label %90
30: ; preds = %4, %23
%31 = load i32, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 0)
br label %34
32: ; preds = %34
%33 = load i32, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 227)
br label %55
34: ; preds = %30, %34
%35 = phi i32 [ %31, %30 ], [ %41, %34 ]
%36 = phi i64 [ 0, %30 ], [ %39, %34 ]
%37 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %36
%38 = and i32 %35, -2147483648
%39 = add nuw nsw i64 %36, 1
%40 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %39
%41 = load i32, i32* %40
%42 = and i32 %41, 2147483646
%43 = or i32 %42, %38
%44 = add nuw nsw i64 %36, 397
%45 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %44
%46 = load i32, i32* %45
%47 = lshr exact i32 %43, 1
%48 = and i32 %41, 1
%49 = zext i32 %48 to i64
%50 = getelementptr inbounds [2 x i32], [2 x i32]* @genrand_int32.mag01, i64 0, i64 %49
%51 = load i32, i32* %50
%52 = xor i32 %51, %46
%53 = xor i32 %52, %47
store i32 %53, i32* %37
%54 = icmp eq i64 %39, 227
br i1 %54, label %32, label %34
55: ; preds = %32, %55
%56 = phi i32 [ %33, %32 ], [ %62, %55 ]
%57 = phi i64 [ 227, %32 ], [ %60, %55 ]
%58 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %57
%59 = and i32 %56, -2147483648
%60 = add nuw nsw i64 %57, 1
%61 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %60
%62 = load i32, i32* %61
%63 = and i32 %62, 2147483646
%64 = or i32 %63, %59
%65 = add nsw i64 %57, -227
%66 = getelementptr inbounds [624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 %65
%67 = load i32, i32* %66
%68 = lshr exact i32 %64, 1
%69 = and i32 %62, 1
%70 = zext i32 %69 to i64
%71 = getelementptr inbounds [2 x i32], [2 x i32]* @genrand_int32.mag01, i64 0, i64 %70
%72 = load i32, i32* %71
%73 = xor i32 %72, %67
%74 = xor i32 %73, %68
store i32 %74, i32* %58
%75 = icmp eq i64 %60, 623
br i1 %75, label %76, label %55
76: ; preds = %55
%77 = load i32, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 623)
%78 = and i32 %77, -2147483648
%79 = load i32, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 0)
%80 = and i32 %79, 2147483646
%81 = or i32 %80, %78
%82 = load i32, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 396)
%83 = lshr exact i32 %81, 1
%84 = and i32 %79, 1
%85 = zext i32 %84 to i64
%86 = getelementptr inbounds [2 x i32], [2 x i32]* @genrand_int32.mag01, i64 0, i64 %85
%87 = load i32, i32* %86
%88 = xor i32 %87, %82
%89 = xor i32 %88, %83
store i32 %89, i32* getelementptr inbounds ([624 x i32], [624 x i32]* @genrand_int32.mt, i64 0, i64 623)
br label %90
90: ; preds = %25, %76
%91 = phi i32 [ %79, %76 ], [ %28, %25 ]
%92 = phi i32 [ 1, %76 ], [ %29, %25 ]
store i32 %92, i32* @genrand_int32.mti
%93 = lshr i32 %91, 11
%94 = xor i32 %93, %91
%95 = shl i32 %94, 7
%96 = and i32 %95, -1658038656
%97 = xor i32 %96, %94
%98 = shl i32 %97, 15
%99 = and i32 %98, -272236544
%100 = xor i32 %99, %97
%101 = lshr i32 %100, 18
%102 = xor i32 %101, %100
ret i32 %102
}