int main(int argc, char **argv) {
  unsigned int i;
  unsigned int b;
  b = 1;
  printf("testing basic algebra routines for finite fields ...\n");
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_csprng();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_matrix_inverse();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_multiply_transpose();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_solve();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_composition();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf256x_add();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf256x_multiply();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf256x_divide();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf256x_xgcd();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf65536_inverse();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf65536x_add();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf65536x_multiply();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf65536x_divide();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf65536x_xgcd();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf16777216_inverse();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf16777216x_add();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf16777216x_multiply();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf16777216x_divide();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf16777216x_xgcd();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf16777216x_modexp();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf2x_add();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf2x_multiply();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf2x_divide();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf2x_xgcd();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf2x_lcm();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf2x_modinv();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf2x_modexp();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf2x_karatsuba();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf2x_minpoly();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf4096_inverse();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf4096x_add();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf4096x_multiply();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf4096x_divide();
  for (i = 0; i < 10 && b == 1; ++i)
    b = b & test_gf4096x_xgcd();
  if (b == 1) {
    printf("success.\n");
    return 1;
  } else {
    printf("failure.\n");
    return 0;
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x1,-0x18(%rbp)
lea    0x1ca9(%rip),%rdi
mov    $0x0,%al
call   10b0 <printf@plt>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x19(%rbp)
jae    137e <main+0x4e>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x19(%rbp)
mov    -0x19(%rbp),%al
test   $0x1,%al
jne    138e <main+0x5e>
jmp    13b3 <main+0x83>
mov    -0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    $0x0,%al
call   10c0 <test_csprng@plt>
mov    %eax,%ecx
mov    -0x20(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1365 <main+0x35>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x21(%rbp)
jae    13d3 <main+0xa3>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    13e3 <main+0xb3>
jmp    1408 <main+0xd8>
mov    -0x18(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    $0x0,%al
call   1230 <test_matrix_inverse@plt>
mov    %eax,%ecx
mov    -0x28(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    13ba <main+0x8a>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x29(%rbp)
jae    1428 <main+0xf8>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%al
test   $0x1,%al
jne    1438 <main+0x108>
jmp    145d <main+0x12d>
mov    -0x18(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    $0x0,%al
call   1080 <test_multiply_transpose@plt>
mov    %eax,%ecx
mov    -0x30(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    140f <main+0xdf>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x31(%rbp)
jae    147d <main+0x14d>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    148d <main+0x15d>
jmp    14b2 <main+0x182>
mov    -0x18(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    $0x0,%al
call   1050 <test_solve@plt>
mov    %eax,%ecx
mov    -0x38(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1464 <main+0x134>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x39(%rbp)
jae    14d2 <main+0x1a2>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    14e2 <main+0x1b2>
jmp    1507 <main+0x1d7>
mov    -0x18(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    $0x0,%al
call   1160 <test_composition@plt>
mov    %eax,%ecx
mov    -0x40(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    14b9 <main+0x189>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x41(%rbp)
jae    1527 <main+0x1f7>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    1537 <main+0x207>
jmp    155c <main+0x22c>
mov    -0x18(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    $0x0,%al
call   1110 <test_gf256x_add@plt>
mov    %eax,%ecx
mov    -0x48(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    150e <main+0x1de>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x49(%rbp)
jae    157c <main+0x24c>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x49(%rbp)
mov    -0x49(%rbp),%al
test   $0x1,%al
jne    158c <main+0x25c>
jmp    15b1 <main+0x281>
mov    -0x18(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    $0x0,%al
call   1030 <test_gf256x_multiply@plt>
mov    %eax,%ecx
mov    -0x50(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1563 <main+0x233>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x51(%rbp)
jae    15d1 <main+0x2a1>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x51(%rbp)
mov    -0x51(%rbp),%al
test   $0x1,%al
jne    15e1 <main+0x2b1>
jmp    1606 <main+0x2d6>
mov    -0x18(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    $0x0,%al
call   10e0 <test_gf256x_divide@plt>
mov    %eax,%ecx
mov    -0x58(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    15b8 <main+0x288>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x59(%rbp)
jae    1626 <main+0x2f6>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x59(%rbp)
mov    -0x59(%rbp),%al
test   $0x1,%al
jne    1636 <main+0x306>
jmp    165b <main+0x32b>
mov    -0x18(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    $0x0,%al
call   11d0 <test_gf256x_xgcd@plt>
mov    %eax,%ecx
mov    -0x60(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    160d <main+0x2dd>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x61(%rbp)
jae    167b <main+0x34b>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x61(%rbp)
mov    -0x61(%rbp),%al
test   $0x1,%al
jne    168b <main+0x35b>
jmp    16b0 <main+0x380>
mov    -0x18(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    $0x0,%al
call   1200 <test_gf65536_inverse@plt>
mov    %eax,%ecx
mov    -0x68(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1662 <main+0x332>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x69(%rbp)
jae    16d0 <main+0x3a0>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x69(%rbp)
mov    -0x69(%rbp),%al
test   $0x1,%al
jne    16e0 <main+0x3b0>
jmp    1705 <main+0x3d5>
mov    -0x18(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    $0x0,%al
call   1150 <test_gf65536x_add@plt>
mov    %eax,%ecx
mov    -0x70(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    16b7 <main+0x387>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x71(%rbp)
jae    1725 <main+0x3f5>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x71(%rbp)
mov    -0x71(%rbp),%al
test   $0x1,%al
jne    1735 <main+0x405>
jmp    175a <main+0x42a>
mov    -0x18(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    $0x0,%al
call   1210 <test_gf65536x_multiply@plt>
mov    %eax,%ecx
mov    -0x78(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    170c <main+0x3dc>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x79(%rbp)
jae    177a <main+0x44a>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x79(%rbp)
mov    -0x79(%rbp),%al
test   $0x1,%al
jne    178a <main+0x45a>
jmp    17af <main+0x47f>
mov    -0x18(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    $0x0,%al
call   10f0 <test_gf65536x_divide@plt>
mov    %eax,%ecx
mov    -0x80(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1761 <main+0x431>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x81(%rbp)
jae    17d5 <main+0x4a5>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x81(%rbp)
mov    -0x81(%rbp),%al
test   $0x1,%al
jne    17e8 <main+0x4b8>
jmp    1813 <main+0x4e3>
mov    -0x18(%rbp),%eax
mov    %eax,-0x88(%rbp)
mov    $0x0,%al
call   1250 <test_gf65536x_xgcd@plt>
mov    %eax,%ecx
mov    -0x88(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    17b6 <main+0x486>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x89(%rbp)
jae    1839 <main+0x509>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x89(%rbp)
mov    -0x89(%rbp),%al
test   $0x1,%al
jne    184c <main+0x51c>
jmp    1877 <main+0x547>
mov    -0x18(%rbp),%eax
mov    %eax,-0x90(%rbp)
mov    $0x0,%al
call   1190 <test_gf16777216_inverse@plt>
mov    %eax,%ecx
mov    -0x90(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    181a <main+0x4ea>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x91(%rbp)
jae    189d <main+0x56d>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x91(%rbp)
mov    -0x91(%rbp),%al
test   $0x1,%al
jne    18b0 <main+0x580>
jmp    18db <main+0x5ab>
mov    -0x18(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    $0x0,%al
call   11f0 <test_gf16777216x_add@plt>
mov    %eax,%ecx
mov    -0x98(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    187e <main+0x54e>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x99(%rbp)
jae    1901 <main+0x5d1>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x99(%rbp)
mov    -0x99(%rbp),%al
test   $0x1,%al
jne    1914 <main+0x5e4>
jmp    193f <main+0x60f>
mov    -0x18(%rbp),%eax
mov    %eax,-0xa0(%rbp)
mov    $0x0,%al
call   11c0 <test_gf16777216x_multiply@plt>
mov    %eax,%ecx
mov    -0xa0(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    18e2 <main+0x5b2>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xa1(%rbp)
jae    1965 <main+0x635>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xa1(%rbp)
mov    -0xa1(%rbp),%al
test   $0x1,%al
jne    1978 <main+0x648>
jmp    19a3 <main+0x673>
mov    -0x18(%rbp),%eax
mov    %eax,-0xa8(%rbp)
mov    $0x0,%al
call   1060 <test_gf16777216x_divide@plt>
mov    %eax,%ecx
mov    -0xa8(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1946 <main+0x616>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xa9(%rbp)
jae    19c9 <main+0x699>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xa9(%rbp)
mov    -0xa9(%rbp),%al
test   $0x1,%al
jne    19dc <main+0x6ac>
jmp    1a07 <main+0x6d7>
mov    -0x18(%rbp),%eax
mov    %eax,-0xb0(%rbp)
mov    $0x0,%al
call   10d0 <test_gf16777216x_xgcd@plt>
mov    %eax,%ecx
mov    -0xb0(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    19aa <main+0x67a>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xb1(%rbp)
jae    1a2d <main+0x6fd>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xb1(%rbp)
mov    -0xb1(%rbp),%al
test   $0x1,%al
jne    1a40 <main+0x710>
jmp    1a6b <main+0x73b>
mov    -0x18(%rbp),%eax
mov    %eax,-0xb8(%rbp)
mov    $0x0,%al
call   11a0 <test_gf16777216x_modexp@plt>
mov    %eax,%ecx
mov    -0xb8(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1a0e <main+0x6de>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xb9(%rbp)
jae    1a91 <main+0x761>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xb9(%rbp)
mov    -0xb9(%rbp),%al
test   $0x1,%al
jne    1aa4 <main+0x774>
jmp    1acf <main+0x79f>
mov    -0x18(%rbp),%eax
mov    %eax,-0xc0(%rbp)
mov    $0x0,%al
call   1220 <test_gf2x_add@plt>
mov    %eax,%ecx
mov    -0xc0(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1a72 <main+0x742>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xc1(%rbp)
jae    1af5 <main+0x7c5>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xc1(%rbp)
mov    -0xc1(%rbp),%al
test   $0x1,%al
jne    1b08 <main+0x7d8>
jmp    1b33 <main+0x803>
mov    -0x18(%rbp),%eax
mov    %eax,-0xc8(%rbp)
mov    $0x0,%al
call   10a0 <test_gf2x_multiply@plt>
mov    %eax,%ecx
mov    -0xc8(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1ad6 <main+0x7a6>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xc9(%rbp)
jae    1b59 <main+0x829>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xc9(%rbp)
mov    -0xc9(%rbp),%al
test   $0x1,%al
jne    1b6c <main+0x83c>
jmp    1b97 <main+0x867>
mov    -0x18(%rbp),%eax
mov    %eax,-0xd0(%rbp)
mov    $0x0,%al
call   11e0 <test_gf2x_divide@plt>
mov    %eax,%ecx
mov    -0xd0(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1b3a <main+0x80a>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xd1(%rbp)
jae    1bbd <main+0x88d>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xd1(%rbp)
mov    -0xd1(%rbp),%al
test   $0x1,%al
jne    1bd0 <main+0x8a0>
jmp    1bfb <main+0x8cb>
mov    -0x18(%rbp),%eax
mov    %eax,-0xd8(%rbp)
mov    $0x0,%al
call   11b0 <test_gf2x_xgcd@plt>
mov    %eax,%ecx
mov    -0xd8(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1b9e <main+0x86e>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xd9(%rbp)
jae    1c21 <main+0x8f1>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xd9(%rbp)
mov    -0xd9(%rbp),%al
test   $0x1,%al
jne    1c34 <main+0x904>
jmp    1c5f <main+0x92f>
mov    -0x18(%rbp),%eax
mov    %eax,-0xe0(%rbp)
mov    $0x0,%al
call   1120 <test_gf2x_lcm@plt>
mov    %eax,%ecx
mov    -0xe0(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1c02 <main+0x8d2>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xe1(%rbp)
jae    1c85 <main+0x955>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xe1(%rbp)
mov    -0xe1(%rbp),%al
test   $0x1,%al
jne    1c98 <main+0x968>
jmp    1cc3 <main+0x993>
mov    -0x18(%rbp),%eax
mov    %eax,-0xe8(%rbp)
mov    $0x0,%al
call   1180 <test_gf2x_modinv@plt>
mov    %eax,%ecx
mov    -0xe8(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1c66 <main+0x936>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xe9(%rbp)
jae    1ce9 <main+0x9b9>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xe9(%rbp)
mov    -0xe9(%rbp),%al
test   $0x1,%al
jne    1cfc <main+0x9cc>
jmp    1d27 <main+0x9f7>
mov    -0x18(%rbp),%eax
mov    %eax,-0xf0(%rbp)
mov    $0x0,%al
call   1090 <test_gf2x_modexp@plt>
mov    %eax,%ecx
mov    -0xf0(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1cca <main+0x99a>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xf1(%rbp)
jae    1d4d <main+0xa1d>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xf1(%rbp)
mov    -0xf1(%rbp),%al
test   $0x1,%al
jne    1d60 <main+0xa30>
jmp    1d8b <main+0xa5b>
mov    -0x18(%rbp),%eax
mov    %eax,-0xf8(%rbp)
mov    $0x0,%al
call   1170 <test_gf2x_karatsuba@plt>
mov    %eax,%ecx
mov    -0xf8(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1d2e <main+0x9fe>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0xf9(%rbp)
jae    1db1 <main+0xa81>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0xf9(%rbp)
mov    -0xf9(%rbp),%al
test   $0x1,%al
jne    1dc4 <main+0xa94>
jmp    1def <main+0xabf>
mov    -0x18(%rbp),%eax
mov    %eax,-0x100(%rbp)
mov    $0x0,%al
call   1140 <test_gf2x_minpoly@plt>
mov    %eax,%ecx
mov    -0x100(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1d92 <main+0xa62>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x101(%rbp)
jae    1e15 <main+0xae5>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x101(%rbp)
mov    -0x101(%rbp),%al
test   $0x1,%al
jne    1e28 <main+0xaf8>
jmp    1e53 <main+0xb23>
mov    -0x18(%rbp),%eax
mov    %eax,-0x108(%rbp)
mov    $0x0,%al
call   1130 <test_gf4096_inverse@plt>
mov    %eax,%ecx
mov    -0x108(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1df6 <main+0xac6>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x109(%rbp)
jae    1e79 <main+0xb49>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x109(%rbp)
mov    -0x109(%rbp),%al
test   $0x1,%al
jne    1e8c <main+0xb5c>
jmp    1eb7 <main+0xb87>
mov    -0x18(%rbp),%eax
mov    %eax,-0x110(%rbp)
mov    $0x0,%al
call   1070 <test_gf4096x_add@plt>
mov    %eax,%ecx
mov    -0x110(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1e5a <main+0xb2a>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x111(%rbp)
jae    1edd <main+0xbad>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x111(%rbp)
mov    -0x111(%rbp),%al
test   $0x1,%al
jne    1ef0 <main+0xbc0>
jmp    1f1b <main+0xbeb>
mov    -0x18(%rbp),%eax
mov    %eax,-0x118(%rbp)
mov    $0x0,%al
call   1240 <test_gf4096x_multiply@plt>
mov    %eax,%ecx
mov    -0x118(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1ebe <main+0xb8e>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x119(%rbp)
jae    1f41 <main+0xc11>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x119(%rbp)
mov    -0x119(%rbp),%al
test   $0x1,%al
jne    1f54 <main+0xc24>
jmp    1f7f <main+0xc4f>
mov    -0x18(%rbp),%eax
mov    %eax,-0x120(%rbp)
mov    $0x0,%al
call   1040 <test_gf4096x_divide@plt>
mov    %eax,%ecx
mov    -0x120(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1f22 <main+0xbf2>
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x14(%rbp)
mov    %al,-0x121(%rbp)
jae    1fa5 <main+0xc75>
cmpl   $0x1,-0x18(%rbp)
sete   %al
mov    %al,-0x121(%rbp)
mov    -0x121(%rbp),%al
test   $0x1,%al
jne    1fb8 <main+0xc88>
jmp    1fe3 <main+0xcb3>
mov    -0x18(%rbp),%eax
mov    %eax,-0x128(%rbp)
mov    $0x0,%al
call   1100 <test_gf4096x_xgcd@plt>
mov    %eax,%ecx
mov    -0x128(%rbp),%eax
and    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1f86 <main+0xc56>
cmpl   $0x1,-0x18(%rbp)
jne    2007 <main+0xcd7>
lea    0x1042(%rip),%rdi
mov    $0x0,%al
call   10b0 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    201c <main+0xcec>
lea    0x1032(%rip),%rdi
mov    $0x0,%al
call   10b0 <printf@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
lea    0xcc8(%rip),%rdi
call   1070 <puts@plt>
xor    %ebx,%ebx
nop
xor    %eax,%eax
call   10c0 <test_csprng@plt>
cmp    $0x8,%ebx
ja     1358 <main+0x28>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1340 <main+0x10>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
call   1230 <test_matrix_inverse@plt>
cmp    $0x8,%ebx
ja     1388 <main+0x58>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1370 <main+0x40>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
call   1090 <test_multiply_transpose@plt>
cmp    $0x8,%ebx
ja     13b8 <main+0x88>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    13a0 <main+0x70>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
call   1050 <test_solve@plt>
cmp    $0x8,%ebx
ja     13e8 <main+0xb8>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    13d0 <main+0xa0>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
call   1160 <test_composition@plt>
cmp    $0x8,%ebx
ja     1418 <main+0xe8>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1400 <main+0xd0>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
call   1110 <test_gf256x_add@plt>
cmp    $0x8,%ebx
ja     1448 <main+0x118>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1430 <main+0x100>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
call   1030 <test_gf256x_multiply@plt>
cmp    $0x8,%ebx
ja     1478 <main+0x148>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1460 <main+0x130>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
call   10e0 <test_gf256x_divide@plt>
cmp    $0x8,%ebx
ja     14a8 <main+0x178>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1490 <main+0x160>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   11d0 <test_gf256x_xgcd@plt>
cmp    $0x8,%ebx
ja     14ca <main+0x19a>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    14b2 <main+0x182>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1200 <test_gf65536_inverse@plt>
cmp    $0x8,%ebx
ja     14ec <main+0x1bc>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    14d4 <main+0x1a4>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1150 <test_gf65536x_add@plt>
cmp    $0x8,%ebx
ja     150e <main+0x1de>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    14f6 <main+0x1c6>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1210 <test_gf65536x_multiply@plt>
cmp    $0x8,%ebx
ja     1530 <main+0x200>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1518 <main+0x1e8>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   10f0 <test_gf65536x_divide@plt>
cmp    $0x8,%ebx
ja     1552 <main+0x222>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    153a <main+0x20a>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1250 <test_gf65536x_xgcd@plt>
cmp    $0x8,%ebx
ja     1574 <main+0x244>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    155c <main+0x22c>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1190 <test_gf16777216_inverse@plt>
cmp    $0x8,%ebx
ja     1596 <main+0x266>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    157e <main+0x24e>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   11f0 <test_gf16777216x_add@plt>
cmp    $0x8,%ebx
ja     15b8 <main+0x288>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    15a0 <main+0x270>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   11c0 <test_gf16777216x_multiply@plt>
cmp    $0x8,%ebx
ja     15da <main+0x2aa>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    15c2 <main+0x292>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1060 <test_gf16777216x_divide@plt>
cmp    $0x8,%ebx
ja     15fc <main+0x2cc>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    15e4 <main+0x2b4>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   10d0 <test_gf16777216x_xgcd@plt>
cmp    $0x8,%ebx
ja     161e <main+0x2ee>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1606 <main+0x2d6>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   11a0 <test_gf16777216x_modexp@plt>
cmp    $0x8,%ebx
ja     1640 <main+0x310>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1628 <main+0x2f8>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1220 <test_gf2x_add@plt>
cmp    $0x8,%ebx
ja     1662 <main+0x332>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    164a <main+0x31a>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   10b0 <test_gf2x_multiply@plt>
cmp    $0x8,%ebx
ja     1684 <main+0x354>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    166c <main+0x33c>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   11e0 <test_gf2x_divide@plt>
cmp    $0x8,%ebx
ja     16a6 <main+0x376>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    168e <main+0x35e>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   11b0 <test_gf2x_xgcd@plt>
cmp    $0x8,%ebx
ja     16c8 <main+0x398>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    16b0 <main+0x380>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1120 <test_gf2x_lcm@plt>
cmp    $0x8,%ebx
ja     16ea <main+0x3ba>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    16d2 <main+0x3a2>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1180 <test_gf2x_modinv@plt>
cmp    $0x8,%ebx
ja     170c <main+0x3dc>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    16f4 <main+0x3c4>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   10a0 <test_gf2x_modexp@plt>
cmp    $0x8,%ebx
ja     172e <main+0x3fe>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1716 <main+0x3e6>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1170 <test_gf2x_karatsuba@plt>
cmp    $0x8,%ebx
ja     1750 <main+0x420>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    1738 <main+0x408>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1140 <test_gf2x_minpoly@plt>
cmp    $0x8,%ebx
ja     1772 <main+0x442>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    175a <main+0x42a>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1130 <test_gf4096_inverse@plt>
cmp    $0x8,%ebx
ja     1794 <main+0x464>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    177c <main+0x44c>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1080 <test_gf4096x_add@plt>
cmp    $0x8,%ebx
ja     17b6 <main+0x486>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    179e <main+0x46e>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1240 <test_gf4096x_multiply@plt>
cmp    $0x8,%ebx
ja     17d4 <main+0x4a4>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    17bc <main+0x48c>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1040 <test_gf4096x_divide@plt>
cmp    $0x8,%ebx
ja     17f2 <main+0x4c2>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    17da <main+0x4aa>
test   $0x1,%al
je     1822 <main+0x4f2>
xor    %ebx,%ebx
xor    %eax,%eax
call   1100 <test_gf4096x_xgcd@plt>
cmp    $0x8,%ebx
ja     1810 <main+0x4e0>
mov    %eax,%ecx
and    $0x1,%ecx
add    $0x1,%ebx
test   %ecx,%ecx
jne    17f8 <main+0x4c8>
test   $0x1,%al
je     1822 <main+0x4f2>
mov    $0x1,%ebx
lea    0x81e(%rip),%rdi
jmp    182b <main+0x4fb>
xor    %ebx,%ebx
lea    0x80a(%rip),%rdi
call   1070 <puts@plt>
mov    %ebx,%eax
pop    %rbx
ret

LLVM IR (-O0):
@.str = [54 x i8] c"testing basic algebra routines for finite fields ...\0A\00"
@.str.1 = [10 x i8] c"success.\0A\00"
@.str.2 = [10 x i8] c"failure.\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i32
%7 = alloca i32
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i32 1, i32* %7
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %6
br label %9
9: ; preds = %21, %2
%10 = load i32, i32* %6
%11 = icmp ult i32 %10, 10
br i1 %11, label %12, label %15
12: ; preds = %9
%13 = load i32, i32* %7
%14 = icmp eq i32 %13, 1
br label %15
15: ; preds = %12, %9
%16 = phi i1 [ false, %9 ], [ %14, %12 ]
br i1 %16, label %17, label %24
17: ; preds = %15
%18 = load i32, i32* %7
%19 = call i32 (...) @test_csprng()
%20 = and i32 %18, %19
store i32 %20, i32* %7
br label %21
21: ; preds = %17
%22 = load i32, i32* %6
%23 = add i32 %22, 1
store i32 %23, i32* %6
br label %9
24: ; preds = %15
store i32 0, i32* %6
br label %25
25: ; preds = %37, %24
%26 = load i32, i32* %6
%27 = icmp ult i32 %26, 10
br i1 %27, label %28, label %31
28: ; preds = %25
%29 = load i32, i32* %7
%30 = icmp eq i32 %29, 1
br label %31
31: ; preds = %28, %25
%32 = phi i1 [ false, %25 ], [ %30, %28 ]
br i1 %32, label %33, label %40
33: ; preds = %31
%34 = load i32, i32* %7
%35 = call i32 (...) @test_matrix_inverse()
%36 = and i32 %34, %35
store i32 %36, i32* %7
br label %37
37: ; preds = %33
%38 = load i32, i32* %6
%39 = add i32 %38, 1
store i32 %39, i32* %6
br label %25
40: ; preds = %31
store i32 0, i32* %6
br label %41
41: ; preds = %53, %40
%42 = load i32, i32* %6
%43 = icmp ult i32 %42, 10
br i1 %43, label %44, label %47
44: ; preds = %41
%45 = load i32, i32* %7
%46 = icmp eq i32 %45, 1
br label %47
47: ; preds = %44, %41
%48 = phi i1 [ false, %41 ], [ %46, %44 ]
br i1 %48, label %49, label %56
49: ; preds = %47
%50 = load i32, i32* %7
%51 = call i32 (...) @test_multiply_transpose()
%52 = and i32 %50, %51
store i32 %52, i32* %7
br label %53
53: ; preds = %49
%54 = load i32, i32* %6
%55 = add i32 %54, 1
store i32 %55, i32* %6
br label %41
56: ; preds = %47
store i32 0, i32* %6
br label %57
57: ; preds = %69, %56
%58 = load i32, i32* %6
%59 = icmp ult i32 %58, 10
br i1 %59, label %60, label %63
60: ; preds = %57
%61 = load i32, i32* %7
%62 = icmp eq i32 %61, 1
br label %63
63: ; preds = %60, %57
%64 = phi i1 [ false, %57 ], [ %62, %60 ]
br i1 %64, label %65, label %72
65: ; preds = %63
%66 = load i32, i32* %7
%67 = call i32 (...) @test_solve()
%68 = and i32 %66, %67
store i32 %68, i32* %7
br label %69
69: ; preds = %65
%70 = load i32, i32* %6
%71 = add i32 %70, 1
store i32 %71, i32* %6
br label %57
72: ; preds = %63
store i32 0, i32* %6
br label %73
73: ; preds = %85, %72
%74 = load i32, i32* %6
%75 = icmp ult i32 %74, 10
br i1 %75, label %76, label %79
76: ; preds = %73
%77 = load i32, i32* %7
%78 = icmp eq i32 %77, 1
br label %79
79: ; preds = %76, %73
%80 = phi i1 [ false, %73 ], [ %78, %76 ]
br i1 %80, label %81, label %88
81: ; preds = %79
%82 = load i32, i32* %7
%83 = call i32 (...) @test_composition()
%84 = and i32 %82, %83
store i32 %84, i32* %7
br label %85
85: ; preds = %81
%86 = load i32, i32* %6
%87 = add i32 %86, 1
store i32 %87, i32* %6
br label %73
88: ; preds = %79
store i32 0, i32* %6
br label %89
89: ; preds = %101, %88
%90 = load i32, i32* %6
%91 = icmp ult i32 %90, 10
br i1 %91, label %92, label %95
92: ; preds = %89
%93 = load i32, i32* %7
%94 = icmp eq i32 %93, 1
br label %95
95: ; preds = %92, %89
%96 = phi i1 [ false, %89 ], [ %94, %92 ]
br i1 %96, label %97, label %104
97: ; preds = %95
%98 = load i32, i32* %7
%99 = call i32 (...) @test_gf256x_add()
%100 = and i32 %98, %99
store i32 %100, i32* %7
br label %101
101: ; preds = %97
%102 = load i32, i32* %6
%103 = add i32 %102, 1
store i32 %103, i32* %6
br label %89
104: ; preds = %95
store i32 0, i32* %6
br label %105
105: ; preds = %117, %104
%106 = load i32, i32* %6
%107 = icmp ult i32 %106, 10
br i1 %107, label %108, label %111
108: ; preds = %105
%109 = load i32, i32* %7
%110 = icmp eq i32 %109, 1
br label %111
111: ; preds = %108, %105
%112 = phi i1 [ false, %105 ], [ %110, %108 ]
br i1 %112, label %113, label %120
113: ; preds = %111
%114 = load i32, i32* %7
%115 = call i32 (...) @test_gf256x_multiply()
%116 = and i32 %114, %115
store i32 %116, i32* %7
br label %117
117: ; preds = %113
%118 = load i32, i32* %6
%119 = add i32 %118, 1
store i32 %119, i32* %6
br label %105
120: ; preds = %111
store i32 0, i32* %6
br label %121
121: ; preds = %133, %120
%122 = load i32, i32* %6
%123 = icmp ult i32 %122, 10
br i1 %123, label %124, label %127
124: ; preds = %121
%125 = load i32, i32* %7
%126 = icmp eq i32 %125, 1
br label %127
127: ; preds = %124, %121
%128 = phi i1 [ false, %121 ], [ %126, %124 ]
br i1 %128, label %129, label %136
129: ; preds = %127
%130 = load i32, i32* %7
%131 = call i32 (...) @test_gf256x_divide()
%132 = and i32 %130, %131
store i32 %132, i32* %7
br label %133
133: ; preds = %129
%134 = load i32, i32* %6
%135 = add i32 %134, 1
store i32 %135, i32* %6
br label %121
136: ; preds = %127
store i32 0, i32* %6
br label %137
137: ; preds = %149, %136
%138 = load i32, i32* %6
%139 = icmp ult i32 %138, 10
br i1 %139, label %140, label %143
140: ; preds = %137
%141 = load i32, i32* %7
%142 = icmp eq i32 %141, 1
br label %143
143: ; preds = %140, %137
%144 = phi i1 [ false, %137 ], [ %142, %140 ]
br i1 %144, label %145, label %152
145: ; preds = %143
%146 = load i32, i32* %7
%147 = call i32 (...) @test_gf256x_xgcd()
%148 = and i32 %146, %147
store i32 %148, i32* %7
br label %149
149: ; preds = %145
%150 = load i32, i32* %6
%151 = add i32 %150, 1
store i32 %151, i32* %6
br label %137
152: ; preds = %143
store i32 0, i32* %6
br label %153
153: ; preds = %165, %152
%154 = load i32, i32* %6
%155 = icmp ult i32 %154, 10
br i1 %155, label %156, label %159
156: ; preds = %153
%157 = load i32, i32* %7
%158 = icmp eq i32 %157, 1
br label %159
159: ; preds = %156, %153
%160 = phi i1 [ false, %153 ], [ %158, %156 ]
br i1 %160, label %161, label %168
161: ; preds = %159
%162 = load i32, i32* %7
%163 = call i32 (...) @test_gf65536_inverse()
%164 = and i32 %162, %163
store i32 %164, i32* %7
br label %165
165: ; preds = %161
%166 = load i32, i32* %6
%167 = add i32 %166, 1
store i32 %167, i32* %6
br label %153
168: ; preds = %159
store i32 0, i32* %6
br label %169
169: ; preds = %181, %168
%170 = load i32, i32* %6
%171 = icmp ult i32 %170, 10
br i1 %171, label %172, label %175
172: ; preds = %169
%173 = load i32, i32* %7
%174 = icmp eq i32 %173, 1
br label %175
175: ; preds = %172, %169
%176 = phi i1 [ false, %169 ], [ %174, %172 ]
br i1 %176, label %177, label %184
177: ; preds = %175
%178 = load i32, i32* %7
%179 = call i32 (...) @test_gf65536x_add()
%180 = and i32 %178, %179
store i32 %180, i32* %7
br label %181
181: ; preds = %177
%182 = load i32, i32* %6
%183 = add i32 %182, 1
store i32 %183, i32* %6
br label %169
184: ; preds = %175
store i32 0, i32* %6
br label %185
185: ; preds = %197, %184
%186 = load i32, i32* %6
%187 = icmp ult i32 %186, 10
br i1 %187, label %188, label %191
188: ; preds = %185
%189 = load i32, i32* %7
%190 = icmp eq i32 %189, 1
br label %191
191: ; preds = %188, %185
%192 = phi i1 [ false, %185 ], [ %190, %188 ]
br i1 %192, label %193, label %200
193: ; preds = %191
%194 = load i32, i32* %7
%195 = call i32 (...) @test_gf65536x_multiply()
%196 = and i32 %194, %195
store i32 %196, i32* %7
br label %197
197: ; preds = %193
%198 = load i32, i32* %6
%199 = add i32 %198, 1
store i32 %199, i32* %6
br label %185
200: ; preds = %191
store i32 0, i32* %6
br label %201
201: ; preds = %213, %200
%202 = load i32, i32* %6
%203 = icmp ult i32 %202, 10
br i1 %203, label %204, label %207
204: ; preds = %201
%205 = load i32, i32* %7
%206 = icmp eq i32 %205, 1
br label %207
207: ; preds = %204, %201
%208 = phi i1 [ false, %201 ], [ %206, %204 ]
br i1 %208, label %209, label %216
209: ; preds = %207
%210 = load i32, i32* %7
%211 = call i32 (...) @test_gf65536x_divide()
%212 = and i32 %210, %211
store i32 %212, i32* %7
br label %213
213: ; preds = %209
%214 = load i32, i32* %6
%215 = add i32 %214, 1
store i32 %215, i32* %6
br label %201
216: ; preds = %207
store i32 0, i32* %6
br label %217
217: ; preds = %229, %216
%218 = load i32, i32* %6
%219 = icmp ult i32 %218, 10
br i1 %219, label %220, label %223
220: ; preds = %217
%221 = load i32, i32* %7
%222 = icmp eq i32 %221, 1
br label %223
223: ; preds = %220, %217
%224 = phi i1 [ false, %217 ], [ %222, %220 ]
br i1 %224, label %225, label %232
225: ; preds = %223
%226 = load i32, i32* %7
%227 = call i32 (...) @test_gf65536x_xgcd()
%228 = and i32 %226, %227
store i32 %228, i32* %7
br label %229
229: ; preds = %225
%230 = load i32, i32* %6
%231 = add i32 %230, 1
store i32 %231, i32* %6
br label %217
232: ; preds = %223
store i32 0, i32* %6
br label %233
233: ; preds = %245, %232
%234 = load i32, i32* %6
%235 = icmp ult i32 %234, 10
br i1 %235, label %236, label %239
236: ; preds = %233
%237 = load i32, i32* %7
%238 = icmp eq i32 %237, 1
br label %239
239: ; preds = %236, %233
%240 = phi i1 [ false, %233 ], [ %238, %236 ]
br i1 %240, label %241, label %248
241: ; preds = %239
%242 = load i32, i32* %7
%243 = call i32 (...) @test_gf16777216_inverse()
%244 = and i32 %242, %243
store i32 %244, i32* %7
br label %245
245: ; preds = %241
%246 = load i32, i32* %6
%247 = add i32 %246, 1
store i32 %247, i32* %6
br label %233
248: ; preds = %239
store i32 0, i32* %6
br label %249
249: ; preds = %261, %248
%250 = load i32, i32* %6
%251 = icmp ult i32 %250, 10
br i1 %251, label %252, label %255
252: ; preds = %249
%253 = load i32, i32* %7
%254 = icmp eq i32 %253, 1
br label %255
255: ; preds = %252, %249
%256 = phi i1 [ false, %249 ], [ %254, %252 ]
br i1 %256, label %257, label %264
257: ; preds = %255
%258 = load i32, i32* %7
%259 = call i32 (...) @test_gf16777216x_add()
%260 = and i32 %258, %259
store i32 %260, i32* %7
br label %261
261: ; preds = %257
%262 = load i32, i32* %6
%263 = add i32 %262, 1
store i32 %263, i32* %6
br label %249
264: ; preds = %255
store i32 0, i32* %6
br label %265
265: ; preds = %277, %264
%266 = load i32, i32* %6
%267 = icmp ult i32 %266, 10
br i1 %267, label %268, label %271
268: ; preds = %265
%269 = load i32, i32* %7
%270 = icmp eq i32 %269, 1
br label %271
271: ; preds = %268, %265
%272 = phi i1 [ false, %265 ], [ %270, %268 ]
br i1 %272, label %273, label %280
273: ; preds = %271
%274 = load i32, i32* %7
%275 = call i32 (...) @test_gf16777216x_multiply()
%276 = and i32 %274, %275
store i32 %276, i32* %7
br label %277
277: ; preds = %273
%278 = load i32, i32* %6
%279 = add i32 %278, 1
store i32 %279, i32* %6
br label %265
280: ; preds = %271
store i32 0, i32* %6
br label %281
281: ; preds = %293, %280
%282 = load i32, i32* %6
%283 = icmp ult i32 %282, 10
br i1 %283, label %284, label %287
284: ; preds = %281
%285 = load i32, i32* %7
%286 = icmp eq i32 %285, 1
br label %287
287: ; preds = %284, %281
%288 = phi i1 [ false, %281 ], [ %286, %284 ]
br i1 %288, label %289, label %296
289: ; preds = %287
%290 = load i32, i32* %7
%291 = call i32 (...) @test_gf16777216x_divide()
%292 = and i32 %290, %291
store i32 %292, i32* %7
br label %293
293: ; preds = %289
%294 = load i32, i32* %6
%295 = add i32 %294, 1
store i32 %295, i32* %6
br label %281
296: ; preds = %287
store i32 0, i32* %6
br label %297
297: ; preds = %309, %296
%298 = load i32, i32* %6
%299 = icmp ult i32 %298, 10
br i1 %299, label %300, label %303
300: ; preds = %297
%301 = load i32, i32* %7
%302 = icmp eq i32 %301, 1
br label %303
303: ; preds = %300, %297
%304 = phi i1 [ false, %297 ], [ %302, %300 ]
br i1 %304, label %305, label %312
305: ; preds = %303
%306 = load i32, i32* %7
%307 = call i32 (...) @test_gf16777216x_xgcd()
%308 = and i32 %306, %307
store i32 %308, i32* %7
br label %309
309: ; preds = %305
%310 = load i32, i32* %6
%311 = add i32 %310, 1
store i32 %311, i32* %6
br label %297
312: ; preds = %303
store i32 0, i32* %6
br label %313
313: ; preds = %325, %312
%314 = load i32, i32* %6
%315 = icmp ult i32 %314, 10
br i1 %315, label %316, label %319
316: ; preds = %313
%317 = load i32, i32* %7
%318 = icmp eq i32 %317, 1
br label %319
319: ; preds = %316, %313
%320 = phi i1 [ false, %313 ], [ %318, %316 ]
br i1 %320, label %321, label %328
321: ; preds = %319
%322 = load i32, i32* %7
%323 = call i32 (...) @test_gf16777216x_modexp()
%324 = and i32 %322, %323
store i32 %324, i32* %7
br label %325
325: ; preds = %321
%326 = load i32, i32* %6
%327 = add i32 %326, 1
store i32 %327, i32* %6
br label %313
328: ; preds = %319
store i32 0, i32* %6
br label %329
329: ; preds = %341, %328
%330 = load i32, i32* %6
%331 = icmp ult i32 %330, 10
br i1 %331, label %332, label %335
332: ; preds = %329
%333 = load i32, i32* %7
%334 = icmp eq i32 %333, 1
br label %335
335: ; preds = %332, %329
%336 = phi i1 [ false, %329 ], [ %334, %332 ]
br i1 %336, label %337, label %344
337: ; preds = %335
%338 = load i32, i32* %7
%339 = call i32 (...) @test_gf2x_add()
%340 = and i32 %338, %339
store i32 %340, i32* %7
br label %341
341: ; preds = %337
%342 = load i32, i32* %6
%343 = add i32 %342, 1
store i32 %343, i32* %6
br label %329
344: ; preds = %335
store i32 0, i32* %6
br label %345
345: ; preds = %357, %344
%346 = load i32, i32* %6
%347 = icmp ult i32 %346, 10
br i1 %347, label %348, label %351
348: ; preds = %345
%349 = load i32, i32* %7
%350 = icmp eq i32 %349, 1
br label %351
351: ; preds = %348, %345
%352 = phi i1 [ false, %345 ], [ %350, %348 ]
br i1 %352, label %353, label %360
353: ; preds = %351
%354 = load i32, i32* %7
%355 = call i32 (...) @test_gf2x_multiply()
%356 = and i32 %354, %355
store i32 %356, i32* %7
br label %357
357: ; preds = %353
%358 = load i32, i32* %6
%359 = add i32 %358, 1
store i32 %359, i32* %6
br label %345
360: ; preds = %351
store i32 0, i32* %6
br label %361
361: ; preds = %373, %360
%362 = load i32, i32* %6
%363 = icmp ult i32 %362, 10
br i1 %363, label %364, label %367
364: ; preds = %361
%365 = load i32, i32* %7
%366 = icmp eq i32 %365, 1
br label %367
367: ; preds = %364, %361
%368 = phi i1 [ false, %361 ], [ %366, %364 ]
br i1 %368, label %369, label %376
369: ; preds = %367
%370 = load i32, i32* %7
%371 = call i32 (...) @test_gf2x_divide()
%372 = and i32 %370, %371
store i32 %372, i32* %7
br label %373
373: ; preds = %369
%374 = load i32, i32* %6
%375 = add i32 %374, 1
store i32 %375, i32* %6
br label %361
376: ; preds = %367
store i32 0, i32* %6
br label %377
377: ; preds = %389, %376
%378 = load i32, i32* %6
%379 = icmp ult i32 %378, 10
br i1 %379, label %380, label %383
380: ; preds = %377
%381 = load i32, i32* %7
%382 = icmp eq i32 %381, 1
br label %383
383: ; preds = %380, %377
%384 = phi i1 [ false, %377 ], [ %382, %380 ]
br i1 %384, label %385, label %392
385: ; preds = %383
%386 = load i32, i32* %7
%387 = call i32 (...) @test_gf2x_xgcd()
%388 = and i32 %386, %387
store i32 %388, i32* %7
br label %389
389: ; preds = %385
%390 = load i32, i32* %6
%391 = add i32 %390, 1
store i32 %391, i32* %6
br label %377
392: ; preds = %383
store i32 0, i32* %6
br label %393
393: ; preds = %405, %392
%394 = load i32, i32* %6
%395 = icmp ult i32 %394, 10
br i1 %395, label %396, label %399
396: ; preds = %393
%397 = load i32, i32* %7
%398 = icmp eq i32 %397, 1
br label %399
399: ; preds = %396, %393
%400 = phi i1 [ false, %393 ], [ %398, %396 ]
br i1 %400, label %401, label %408
401: ; preds = %399
%402 = load i32, i32* %7
%403 = call i32 (...) @test_gf2x_lcm()
%404 = and i32 %402, %403
store i32 %404, i32* %7
br label %405
405: ; preds = %401
%406 = load i32, i32* %6
%407 = add i32 %406, 1
store i32 %407, i32* %6
br label %393
408: ; preds = %399
store i32 0, i32* %6
br label %409
409: ; preds = %421, %408
%410 = load i32, i32* %6
%411 = icmp ult i32 %410, 10
br i1 %411, label %412, label %415
412: ; preds = %409
%413 = load i32, i32* %7
%414 = icmp eq i32 %413, 1
br label %415
415: ; preds = %412, %409
%416 = phi i1 [ false, %409 ], [ %414, %412 ]
br i1 %416, label %417, label %424
417: ; preds = %415
%418 = load i32, i32* %7
%419 = call i32 (...) @test_gf2x_modinv()
%420 = and i32 %418, %419
store i32 %420, i32* %7
br label %421
421: ; preds = %417
%422 = load i32, i32* %6
%423 = add i32 %422, 1
store i32 %423, i32* %6
br label %409
424: ; preds = %415
store i32 0, i32* %6
br label %425
425: ; preds = %437, %424
%426 = load i32, i32* %6
%427 = icmp ult i32 %426, 10
br i1 %427, label %428, label %431
428: ; preds = %425
%429 = load i32, i32* %7
%430 = icmp eq i32 %429, 1
br label %431
431: ; preds = %428, %425
%432 = phi i1 [ false, %425 ], [ %430, %428 ]
br i1 %432, label %433, label %440
433: ; preds = %431
%434 = load i32, i32* %7
%435 = call i32 (...) @test_gf2x_modexp()
%436 = and i32 %434, %435
store i32 %436, i32* %7
br label %437
437: ; preds = %433
%438 = load i32, i32* %6
%439 = add i32 %438, 1
store i32 %439, i32* %6
br label %425
440: ; preds = %431
store i32 0, i32* %6
br label %441
441: ; preds = %453, %440
%442 = load i32, i32* %6
%443 = icmp ult i32 %442, 10
br i1 %443, label %444, label %447
444: ; preds = %441
%445 = load i32, i32* %7
%446 = icmp eq i32 %445, 1
br label %447
447: ; preds = %444, %441
%448 = phi i1 [ false, %441 ], [ %446, %444 ]
br i1 %448, label %449, label %456
449: ; preds = %447
%450 = load i32, i32* %7
%451 = call i32 (...) @test_gf2x_karatsuba()
%452 = and i32 %450, %451
store i32 %452, i32* %7
br label %453
453: ; preds = %449
%454 = load i32, i32* %6
%455 = add i32 %454, 1
store i32 %455, i32* %6
br label %441
456: ; preds = %447
store i32 0, i32* %6
br label %457
457: ; preds = %469, %456
%458 = load i32, i32* %6
%459 = icmp ult i32 %458, 10
br i1 %459, label %460, label %463
460: ; preds = %457
%461 = load i32, i32* %7
%462 = icmp eq i32 %461, 1
br label %463
463: ; preds = %460, %457
%464 = phi i1 [ false, %457 ], [ %462, %460 ]
br i1 %464, label %465, label %472
465: ; preds = %463
%466 = load i32, i32* %7
%467 = call i32 (...) @test_gf2x_minpoly()
%468 = and i32 %466, %467
store i32 %468, i32* %7
br label %469
469: ; preds = %465
%470 = load i32, i32* %6
%471 = add i32 %470, 1
store i32 %471, i32* %6
br label %457
472: ; preds = %463
store i32 0, i32* %6
br label %473
473: ; preds = %485, %472
%474 = load i32, i32* %6
%475 = icmp ult i32 %474, 10
br i1 %475, label %476, label %479
476: ; preds = %473
%477 = load i32, i32* %7
%478 = icmp eq i32 %477, 1
br label %479
479: ; preds = %476, %473
%480 = phi i1 [ false, %473 ], [ %478, %476 ]
br i1 %480, label %481, label %488
481: ; preds = %479
%482 = load i32, i32* %7
%483 = call i32 (...) @test_gf4096_inverse()
%484 = and i32 %482, %483
store i32 %484, i32* %7
br label %485
485: ; preds = %481
%486 = load i32, i32* %6
%487 = add i32 %486, 1
store i32 %487, i32* %6
br label %473
488: ; preds = %479
store i32 0, i32* %6
br label %489
489: ; preds = %501, %488
%490 = load i32, i32* %6
%491 = icmp ult i32 %490, 10
br i1 %491, label %492, label %495
492: ; preds = %489
%493 = load i32, i32* %7
%494 = icmp eq i32 %493, 1
br label %495
495: ; preds = %492, %489
%496 = phi i1 [ false, %489 ], [ %494, %492 ]
br i1 %496, label %497, label %504
497: ; preds = %495
%498 = load i32, i32* %7
%499 = call i32 (...) @test_gf4096x_add()
%500 = and i32 %498, %499
store i32 %500, i32* %7
br label %501
501: ; preds = %497
%502 = load i32, i32* %6
%503 = add i32 %502, 1
store i32 %503, i32* %6
br label %489
504: ; preds = %495
store i32 0, i32* %6
br label %505
505: ; preds = %517, %504
%506 = load i32, i32* %6
%507 = icmp ult i32 %506, 10
br i1 %507, label %508, label %511
508: ; preds = %505
%509 = load i32, i32* %7
%510 = icmp eq i32 %509, 1
br label %511
511: ; preds = %508, %505
%512 = phi i1 [ false, %505 ], [ %510, %508 ]
br i1 %512, label %513, label %520
513: ; preds = %511
%514 = load i32, i32* %7
%515 = call i32 (...) @test_gf4096x_multiply()
%516 = and i32 %514, %515
store i32 %516, i32* %7
br label %517
517: ; preds = %513
%518 = load i32, i32* %6
%519 = add i32 %518, 1
store i32 %519, i32* %6
br label %505
520: ; preds = %511
store i32 0, i32* %6
br label %521
521: ; preds = %533, %520
%522 = load i32, i32* %6
%523 = icmp ult i32 %522, 10
br i1 %523, label %524, label %527
524: ; preds = %521
%525 = load i32, i32* %7
%526 = icmp eq i32 %525, 1
br label %527
527: ; preds = %524, %521
%528 = phi i1 [ false, %521 ], [ %526, %524 ]
br i1 %528, label %529, label %536
529: ; preds = %527
%530 = load i32, i32* %7
%531 = call i32 (...) @test_gf4096x_divide()
%532 = and i32 %530, %531
store i32 %532, i32* %7
br label %533
533: ; preds = %529
%534 = load i32, i32* %6
%535 = add i32 %534, 1
store i32 %535, i32* %6
br label %521
536: ; preds = %527
store i32 0, i32* %6
br label %537
537: ; preds = %549, %536
%538 = load i32, i32* %6
%539 = icmp ult i32 %538, 10
br i1 %539, label %540, label %543
540: ; preds = %537
%541 = load i32, i32* %7
%542 = icmp eq i32 %541, 1
br label %543
543: ; preds = %540, %537
%544 = phi i1 [ false, %537 ], [ %542, %540 ]
br i1 %544, label %545, label %552
545: ; preds = %543
%546 = load i32, i32* %7
%547 = call i32 (...) @test_gf4096x_xgcd()
%548 = and i32 %546, %547
store i32 %548, i32* %7
br label %549
549: ; preds = %545
%550 = load i32, i32* %6
%551 = add i32 %550, 1
store i32 %551, i32* %6
br label %537
552: ; preds = %543
%553 = load i32, i32* %7
%554 = icmp eq i32 %553, 1
br i1 %554, label %555, label %557
555: ; preds = %552
%556 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0))
store i32 1, i32* %3
br label %559
557: ; preds = %552
%558 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0))
store i32 0, i32* %3
br label %559
559: ; preds = %557, %555
%560 = load i32, i32* %3
ret i32 %560
}

LLVM IR (-O2):
@str = [53 x i8] c"testing basic algebra routines for finite fields ...\00"
@str.3 = [9 x i8] c"failure.\00"
@str.4 = [9 x i8] c"success.\00"
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([53 x i8], [53 x i8]* @str, i64 0, i64 0))
br label %6
4: ; preds = %6
%5 = icmp eq i32 %9, 0
br i1 %5, label %343, label %16
6: ; preds = %2, %6
%7 = phi i32 [ 0, %2 ], [ %10, %6 ]
%8 = tail call i32 (...) @test_csprng()
%9 = and i32 %8, 1
%10 = add nuw nsw i32 %7, 1
%11 = icmp ult i32 %7, 9
%12 = icmp ne i32 %9, 0
%13 = select i1 %11, i1 %12, i1 false
br i1 %13, label %6, label %4
14: ; preds = %16
%15 = icmp eq i32 %19, 0
br i1 %15, label %343, label %26
16: ; preds = %4, %16
%17 = phi i32 [ %20, %16 ], [ 0, %4 ]
%18 = tail call i32 (...) @test_matrix_inverse()
%19 = and i32 %18, 1
%20 = add nuw nsw i32 %17, 1
%21 = icmp ult i32 %17, 9
%22 = icmp ne i32 %19, 0
%23 = select i1 %21, i1 %22, i1 false
br i1 %23, label %16, label %14
24: ; preds = %26
%25 = icmp eq i32 %29, 0
br i1 %25, label %343, label %36
26: ; preds = %14, %26
%27 = phi i32 [ %30, %26 ], [ 0, %14 ]
%28 = tail call i32 (...) @test_multiply_transpose()
%29 = and i32 %28, 1
%30 = add nuw nsw i32 %27, 1
%31 = icmp ult i32 %27, 9
%32 = icmp ne i32 %29, 0
%33 = select i1 %31, i1 %32, i1 false
br i1 %33, label %26, label %24
34: ; preds = %36
%35 = icmp eq i32 %39, 0
br i1 %35, label %343, label %46
36: ; preds = %24, %36
%37 = phi i32 [ %40, %36 ], [ 0, %24 ]
%38 = tail call i32 (...) @test_solve()
%39 = and i32 %38, 1
%40 = add nuw nsw i32 %37, 1
%41 = icmp ult i32 %37, 9
%42 = icmp ne i32 %39, 0
%43 = select i1 %41, i1 %42, i1 false
br i1 %43, label %36, label %34
44: ; preds = %46
%45 = icmp eq i32 %49, 0
br i1 %45, label %343, label %56
46: ; preds = %34, %46
%47 = phi i32 [ %50, %46 ], [ 0, %34 ]
%48 = tail call i32 (...) @test_composition()
%49 = and i32 %48, 1
%50 = add nuw nsw i32 %47, 1
%51 = icmp ult i32 %47, 9
%52 = icmp ne i32 %49, 0
%53 = select i1 %51, i1 %52, i1 false
br i1 %53, label %46, label %44
54: ; preds = %56
%55 = icmp eq i32 %59, 0
br i1 %55, label %343, label %66
56: ; preds = %44, %56
%57 = phi i32 [ %60, %56 ], [ 0, %44 ]
%58 = tail call i32 (...) @test_gf256x_add()
%59 = and i32 %58, 1
%60 = add nuw nsw i32 %57, 1
%61 = icmp ult i32 %57, 9
%62 = icmp ne i32 %59, 0
%63 = select i1 %61, i1 %62, i1 false
br i1 %63, label %56, label %54
64: ; preds = %66
%65 = icmp eq i32 %69, 0
br i1 %65, label %343, label %76
66: ; preds = %54, %66
%67 = phi i32 [ %70, %66 ], [ 0, %54 ]
%68 = tail call i32 (...) @test_gf256x_multiply()
%69 = and i32 %68, 1
%70 = add nuw nsw i32 %67, 1
%71 = icmp ult i32 %67, 9
%72 = icmp ne i32 %69, 0
%73 = select i1 %71, i1 %72, i1 false
br i1 %73, label %66, label %64
74: ; preds = %76
%75 = icmp eq i32 %79, 0
br i1 %75, label %343, label %86
76: ; preds = %64, %76
%77 = phi i32 [ %80, %76 ], [ 0, %64 ]
%78 = tail call i32 (...) @test_gf256x_divide()
%79 = and i32 %78, 1
%80 = add nuw nsw i32 %77, 1
%81 = icmp ult i32 %77, 9
%82 = icmp ne i32 %79, 0
%83 = select i1 %81, i1 %82, i1 false
br i1 %83, label %76, label %74
84: ; preds = %86
%85 = icmp eq i32 %89, 0
br i1 %85, label %343, label %96
86: ; preds = %74, %86
%87 = phi i32 [ %90, %86 ], [ 0, %74 ]
%88 = tail call i32 (...) @test_gf256x_xgcd()
%89 = and i32 %88, 1
%90 = add nuw nsw i32 %87, 1
%91 = icmp ult i32 %87, 9
%92 = icmp ne i32 %89, 0
%93 = select i1 %91, i1 %92, i1 false
br i1 %93, label %86, label %84
94: ; preds = %96
%95 = icmp eq i32 %99, 0
br i1 %95, label %343, label %106
96: ; preds = %84, %96
%97 = phi i32 [ %100, %96 ], [ 0, %84 ]
%98 = tail call i32 (...) @test_gf65536_inverse()
%99 = and i32 %98, 1
%100 = add nuw nsw i32 %97, 1
%101 = icmp ult i32 %97, 9
%102 = icmp ne i32 %99, 0
%103 = select i1 %101, i1 %102, i1 false
br i1 %103, label %96, label %94
104: ; preds = %106
%105 = icmp eq i32 %109, 0
br i1 %105, label %343, label %116
106: ; preds = %94, %106
%107 = phi i32 [ %110, %106 ], [ 0, %94 ]
%108 = tail call i32 (...) @test_gf65536x_add()
%109 = and i32 %108, 1
%110 = add nuw nsw i32 %107, 1
%111 = icmp ult i32 %107, 9
%112 = icmp ne i32 %109, 0
%113 = select i1 %111, i1 %112, i1 false
br i1 %113, label %106, label %104
114: ; preds = %116
%115 = icmp eq i32 %119, 0
br i1 %115, label %343, label %126
116: ; preds = %104, %116
%117 = phi i32 [ %120, %116 ], [ 0, %104 ]
%118 = tail call i32 (...) @test_gf65536x_multiply()
%119 = and i32 %118, 1
%120 = add nuw nsw i32 %117, 1
%121 = icmp ult i32 %117, 9
%122 = icmp ne i32 %119, 0
%123 = select i1 %121, i1 %122, i1 false
br i1 %123, label %116, label %114
124: ; preds = %126
%125 = icmp eq i32 %129, 0
br i1 %125, label %343, label %136
126: ; preds = %114, %126
%127 = phi i32 [ %130, %126 ], [ 0, %114 ]
%128 = tail call i32 (...) @test_gf65536x_divide()
%129 = and i32 %128, 1
%130 = add nuw nsw i32 %127, 1
%131 = icmp ult i32 %127, 9
%132 = icmp ne i32 %129, 0
%133 = select i1 %131, i1 %132, i1 false
br i1 %133, label %126, label %124
134: ; preds = %136
%135 = icmp eq i32 %139, 0
br i1 %135, label %343, label %146
136: ; preds = %124, %136
%137 = phi i32 [ %140, %136 ], [ 0, %124 ]
%138 = tail call i32 (...) @test_gf65536x_xgcd()
%139 = and i32 %138, 1
%140 = add nuw nsw i32 %137, 1
%141 = icmp ult i32 %137, 9
%142 = icmp ne i32 %139, 0
%143 = select i1 %141, i1 %142, i1 false
br i1 %143, label %136, label %134
144: ; preds = %146
%145 = icmp eq i32 %149, 0
br i1 %145, label %343, label %156
146: ; preds = %134, %146
%147 = phi i32 [ %150, %146 ], [ 0, %134 ]
%148 = tail call i32 (...) @test_gf16777216_inverse()
%149 = and i32 %148, 1
%150 = add nuw nsw i32 %147, 1
%151 = icmp ult i32 %147, 9
%152 = icmp ne i32 %149, 0
%153 = select i1 %151, i1 %152, i1 false
br i1 %153, label %146, label %144
154: ; preds = %156
%155 = icmp eq i32 %159, 0
br i1 %155, label %343, label %166
156: ; preds = %144, %156
%157 = phi i32 [ %160, %156 ], [ 0, %144 ]
%158 = tail call i32 (...) @test_gf16777216x_add()
%159 = and i32 %158, 1
%160 = add nuw nsw i32 %157, 1
%161 = icmp ult i32 %157, 9
%162 = icmp ne i32 %159, 0
%163 = select i1 %161, i1 %162, i1 false
br i1 %163, label %156, label %154
164: ; preds = %166
%165 = icmp eq i32 %169, 0
br i1 %165, label %343, label %176
166: ; preds = %154, %166
%167 = phi i32 [ %170, %166 ], [ 0, %154 ]
%168 = tail call i32 (...) @test_gf16777216x_multiply()
%169 = and i32 %168, 1
%170 = add nuw nsw i32 %167, 1
%171 = icmp ult i32 %167, 9
%172 = icmp ne i32 %169, 0
%173 = select i1 %171, i1 %172, i1 false
br i1 %173, label %166, label %164
174: ; preds = %176
%175 = icmp eq i32 %179, 0
br i1 %175, label %343, label %186
176: ; preds = %164, %176
%177 = phi i32 [ %180, %176 ], [ 0, %164 ]
%178 = tail call i32 (...) @test_gf16777216x_divide()
%179 = and i32 %178, 1
%180 = add nuw nsw i32 %177, 1
%181 = icmp ult i32 %177, 9
%182 = icmp ne i32 %179, 0
%183 = select i1 %181, i1 %182, i1 false
br i1 %183, label %176, label %174
184: ; preds = %186
%185 = icmp eq i32 %189, 0
br i1 %185, label %343, label %196
186: ; preds = %174, %186
%187 = phi i32 [ %190, %186 ], [ 0, %174 ]
%188 = tail call i32 (...) @test_gf16777216x_xgcd()
%189 = and i32 %188, 1
%190 = add nuw nsw i32 %187, 1
%191 = icmp ult i32 %187, 9
%192 = icmp ne i32 %189, 0
%193 = select i1 %191, i1 %192, i1 false
br i1 %193, label %186, label %184
194: ; preds = %196
%195 = icmp eq i32 %199, 0
br i1 %195, label %343, label %206
196: ; preds = %184, %196
%197 = phi i32 [ %200, %196 ], [ 0, %184 ]
%198 = tail call i32 (...) @test_gf16777216x_modexp()
%199 = and i32 %198, 1
%200 = add nuw nsw i32 %197, 1
%201 = icmp ult i32 %197, 9
%202 = icmp ne i32 %199, 0
%203 = select i1 %201, i1 %202, i1 false
br i1 %203, label %196, label %194
204: ; preds = %206
%205 = icmp eq i32 %209, 0
br i1 %205, label %343, label %216
206: ; preds = %194, %206
%207 = phi i32 [ %210, %206 ], [ 0, %194 ]
%208 = tail call i32 (...) @test_gf2x_add()
%209 = and i32 %208, 1
%210 = add nuw nsw i32 %207, 1
%211 = icmp ult i32 %207, 9
%212 = icmp ne i32 %209, 0
%213 = select i1 %211, i1 %212, i1 false
br i1 %213, label %206, label %204
214: ; preds = %216
%215 = icmp eq i32 %219, 0
br i1 %215, label %343, label %226
216: ; preds = %204, %216
%217 = phi i32 [ %220, %216 ], [ 0, %204 ]
%218 = tail call i32 (...) @test_gf2x_multiply()
%219 = and i32 %218, 1
%220 = add nuw nsw i32 %217, 1
%221 = icmp ult i32 %217, 9
%222 = icmp ne i32 %219, 0
%223 = select i1 %221, i1 %222, i1 false
br i1 %223, label %216, label %214
224: ; preds = %226
%225 = icmp eq i32 %229, 0
br i1 %225, label %343, label %236
226: ; preds = %214, %226
%227 = phi i32 [ %230, %226 ], [ 0, %214 ]
%228 = tail call i32 (...) @test_gf2x_divide()
%229 = and i32 %228, 1
%230 = add nuw nsw i32 %227, 1
%231 = icmp ult i32 %227, 9
%232 = icmp ne i32 %229, 0
%233 = select i1 %231, i1 %232, i1 false
br i1 %233, label %226, label %224
234: ; preds = %236
%235 = icmp eq i32 %239, 0
br i1 %235, label %343, label %246
236: ; preds = %224, %236
%237 = phi i32 [ %240, %236 ], [ 0, %224 ]
%238 = tail call i32 (...) @test_gf2x_xgcd()
%239 = and i32 %238, 1
%240 = add nuw nsw i32 %237, 1
%241 = icmp ult i32 %237, 9
%242 = icmp ne i32 %239, 0
%243 = select i1 %241, i1 %242, i1 false
br i1 %243, label %236, label %234
244: ; preds = %246
%245 = icmp eq i32 %249, 0
br i1 %245, label %343, label %256
246: ; preds = %234, %246
%247 = phi i32 [ %250, %246 ], [ 0, %234 ]
%248 = tail call i32 (...) @test_gf2x_lcm()
%249 = and i32 %248, 1
%250 = add nuw nsw i32 %247, 1
%251 = icmp ult i32 %247, 9
%252 = icmp ne i32 %249, 0
%253 = select i1 %251, i1 %252, i1 false
br i1 %253, label %246, label %244
254: ; preds = %256
%255 = icmp eq i32 %259, 0
br i1 %255, label %343, label %266
256: ; preds = %244, %256
%257 = phi i32 [ %260, %256 ], [ 0, %244 ]
%258 = tail call i32 (...) @test_gf2x_modinv()
%259 = and i32 %258, 1
%260 = add nuw nsw i32 %257, 1
%261 = icmp ult i32 %257, 9
%262 = icmp ne i32 %259, 0
%263 = select i1 %261, i1 %262, i1 false
br i1 %263, label %256, label %254
264: ; preds = %266
%265 = icmp eq i32 %269, 0
br i1 %265, label %343, label %276
266: ; preds = %254, %266
%267 = phi i32 [ %270, %266 ], [ 0, %254 ]
%268 = tail call i32 (...) @test_gf2x_modexp()
%269 = and i32 %268, 1
%270 = add nuw nsw i32 %267, 1
%271 = icmp ult i32 %267, 9
%272 = icmp ne i32 %269, 0
%273 = select i1 %271, i1 %272, i1 false
br i1 %273, label %266, label %264
274: ; preds = %276
%275 = icmp eq i32 %279, 0
br i1 %275, label %343, label %286
276: ; preds = %264, %276
%277 = phi i32 [ %280, %276 ], [ 0, %264 ]
%278 = tail call i32 (...) @test_gf2x_karatsuba()
%279 = and i32 %278, 1
%280 = add nuw nsw i32 %277, 1
%281 = icmp ult i32 %277, 9
%282 = icmp ne i32 %279, 0
%283 = select i1 %281, i1 %282, i1 false
br i1 %283, label %276, label %274
284: ; preds = %286
%285 = icmp eq i32 %289, 0
br i1 %285, label %343, label %296
286: ; preds = %274, %286
%287 = phi i32 [ %290, %286 ], [ 0, %274 ]
%288 = tail call i32 (...) @test_gf2x_minpoly()
%289 = and i32 %288, 1
%290 = add nuw nsw i32 %287, 1
%291 = icmp ult i32 %287, 9
%292 = icmp ne i32 %289, 0
%293 = select i1 %291, i1 %292, i1 false
br i1 %293, label %286, label %284
294: ; preds = %296
%295 = icmp eq i32 %299, 0
br i1 %295, label %343, label %306
296: ; preds = %284, %296
%297 = phi i32 [ %300, %296 ], [ 0, %284 ]
%298 = tail call i32 (...) @test_gf4096_inverse()
%299 = and i32 %298, 1
%300 = add nuw nsw i32 %297, 1
%301 = icmp ult i32 %297, 9
%302 = icmp ne i32 %299, 0
%303 = select i1 %301, i1 %302, i1 false
br i1 %303, label %296, label %294
304: ; preds = %306
%305 = icmp eq i32 %309, 0
br i1 %305, label %343, label %316
306: ; preds = %294, %306
%307 = phi i32 [ %310, %306 ], [ 0, %294 ]
%308 = tail call i32 (...) @test_gf4096x_add()
%309 = and i32 %308, 1
%310 = add nuw nsw i32 %307, 1
%311 = icmp ult i32 %307, 9
%312 = icmp ne i32 %309, 0
%313 = select i1 %311, i1 %312, i1 false
br i1 %313, label %306, label %304
314: ; preds = %316
%315 = icmp eq i32 %319, 0
br i1 %315, label %343, label %326
316: ; preds = %304, %316
%317 = phi i32 [ %320, %316 ], [ 0, %304 ]
%318 = tail call i32 (...) @test_gf4096x_multiply()
%319 = and i32 %318, 1
%320 = add nuw nsw i32 %317, 1
%321 = icmp ult i32 %317, 9
%322 = icmp ne i32 %319, 0
%323 = select i1 %321, i1 %322, i1 false
br i1 %323, label %316, label %314
324: ; preds = %326
%325 = icmp eq i32 %329, 0
br i1 %325, label %343, label %334
326: ; preds = %314, %326
%327 = phi i32 [ %330, %326 ], [ 0, %314 ]
%328 = tail call i32 (...) @test_gf4096x_divide()
%329 = and i32 %328, 1
%330 = add nuw nsw i32 %327, 1
%331 = icmp ult i32 %327, 9
%332 = icmp ne i32 %329, 0
%333 = select i1 %331, i1 %332, i1 false
br i1 %333, label %326, label %324
334: ; preds = %324, %334
%335 = phi i32 [ %338, %334 ], [ 0, %324 ]
%336 = tail call i32 (...) @test_gf4096x_xgcd()
%337 = and i32 %336, 1
%338 = add nuw nsw i32 %335, 1
%339 = icmp ult i32 %335, 9
%340 = icmp ne i32 %337, 0
%341 = select i1 %339, i1 %340, i1 false
br i1 %341, label %334, label %342
342: ; preds = %334
br i1 %340, label %344, label %343
343: ; preds = %4, %14, %24, %34, %44, %54, %64, %74, %84, %94, %104, %114, %124, %134, %144, %154, %164, %174, %184, %194, %204, %214, %224, %234, %244, %254, %264, %274, %284, %294, %304, %314, %324, %342
br label %344
344: ; preds = %342, %343
%345 = phi i8* [ getelementptr inbounds ([9 x i8], [9 x i8]* @str.3, i64 0, i64 0), %343 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @str.4, i64 0, i64 0), %342 ]
%346 = phi i32 [ 0, %343 ], [ 1, %342 ]
%347 = tail call i32 @puts(i8* dereferenceable(1) %345)
ret i32 %346
}