#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ core_acc(int *, int *, double *, double *, double *,
                            double *, int *, double *, double *, double *,
                            double *, double *, double *, double *, double *,
                            double *, double *, double *, double *, double *,
                            double *, double *, double *, double *, double *);
int /*<<< orphan*/ gas_acc(int *, int *, double *, double *, double *, double *,
                           double *, double *, double *, double *, double *,
                           double *, double *);
int /*<<< orphan*/ gimpact(double *, double *, double *, double *, double *,
                           double *, double *, int *, double *, double *,
                           int *);
int /*<<< orphan*/ initial(int *, double *, double *, double *, double *,
                           double *, double *, int *, double *, double *,
                           double *, double *, double *, double *, double *,
                           double *, double *, double *, double *, double *,
                           double *, double *, double *, double *, double *,
                           double *, int *, int *, double *, double *,
                           double *);
int /*<<< orphan*/ next(double *, double *, double *, double *, int *, double *,
                        double *, double *, double *, int *, int *, double *,
                        double *, double *, double *, double *, double *,
                        double *, double *, int *, double *, int *, int *,
                        double *);
int /*<<< orphan*/ output(int *, double *, double *, double *, double *,
                          double *);
int /*<<< orphan*/ parameter(int *, int *, int *, double *, double *, double *,
                             double *, double *, double *, double *, double *,
                             double *, double *, double *, double *, double *);
int /*<<< orphan*/ printf(char *, int, ...);
int main(void) {
  int i, j, k, n;
  double t, dt;
  int nd, nt, PS;
  double Time, FeH, alpha, qd, qg, C1, C2, M, L, p1, p2, kappa, k1, k2;
  parameter(&nd, &nt, &PS, &FeH, &alpha, &qd, &qg, &C1, &C2, &M, &L, &p1, &p2,
            &kappa, &k1, &k2);
  int fossilize = 0;
  double r[nd], Sigd[nd], Sigg[nd], fd[nd], T[nd], eta[nd], fg, fg_0, tau_dep,
      dM, r_snow;
  int type[500], gene[500];
  double Mp[500], Mc[500], Mr[500], Mi[500], Mg[500], a[500], a_0[500], e[500],
      peri[500], apo[500];
  for (k = 0; k < PS; k++) {
    initial(&n, &t, &dt, &Time, &tau_dep, &fg_0, &FeH, &nd, r, T, &L, eta, &fg,
            fd, Sigd, &qd, Sigg, &qg, a, &M, Mr, Mi, Mg, Mc, Mp, a_0, type,
            gene, &dM, &alpha, &r_snow);
    printf("%d %f\n", k, fg_0);
    for (j = 1; j < nt; j++) {
      core_acc(&n, type, r, a, Mp, &M, &nd, eta, fd, &fg, &qg, &qd, &dt, Mr, Mi,
               Mc, Mg, Sigd, &p1, &p2, &kappa, T, &alpha, &L, &dM);
      gas_acc(&n, type, &alpha, a, &L, &M, &k1, Mp, &k2, &fg, Mg, &dt, Mc);
      next(&fg, &fg_0, &t, &tau_dep, &nd, Sigg, r, &dt, &Time, &nt, &j, &dM, &M,
           &alpha, &L, T, eta, fd, Sigd, &fossilize, &r_snow, type, &n, a);
    }
    printf("%d\n", n);
    gimpact(e, a, Mp, peri, apo, &M, &t, &n, Mr, Mi, type);
    output(&n, a, Mp, Mr, Mi, Mg);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xadf8,%rsp
movl   $0x0,-0x2c(%rbp)
sub    $0x50,%rsp
mov    %rsp,%rax
mov    %rax,-0xad58(%rbp)
lea    -0xd0(%rbp),%rcx
mov    %rcx,0x48(%rax)
lea    -0xc8(%rbp),%rcx
mov    %rcx,0x40(%rax)
lea    -0xc0(%rbp),%rcx
mov    %rcx,0x38(%rax)
lea    -0xb8(%rbp),%rcx
mov    %rcx,0x30(%rax)
lea    -0xb0(%rbp),%rcx
mov    %rcx,0x28(%rax)
lea    -0xa8(%rbp),%rcx
mov    %rcx,0x20(%rax)
lea    -0xa0(%rbp),%rcx
mov    %rcx,0x18(%rax)
lea    -0x98(%rbp),%rcx
mov    %rcx,0x10(%rax)
lea    -0x90(%rbp),%rcx
mov    %rcx,0x8(%rax)
lea    -0x88(%rbp),%rcx
mov    %rcx,(%rax)
lea    -0x54(%rbp),%rdi
lea    -0x58(%rbp),%rsi
lea    -0x5c(%rbp),%rdx
lea    -0x70(%rbp),%rcx
lea    -0x78(%rbp),%r8
lea    -0x80(%rbp),%r9
call   1050 <parameter@plt>
add    $0x50,%rsp
movl   $0x0,-0xd4(%rbp)
mov    -0x54(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0xe0(%rbp)
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xad50(%rbp)
mov    %rcx,%rsp
mov    %rax,-0xe8(%rbp)
mov    -0x54(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xad48(%rbp)
mov    %rcx,%rsp
mov    %rax,-0xf0(%rbp)
mov    -0x54(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xad40(%rbp)
mov    %rcx,%rsp
mov    %rax,-0xf8(%rbp)
mov    -0x54(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xad38(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x100(%rbp)
mov    -0x54(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xad30(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x108(%rbp)
mov    -0x54(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xad28(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x110(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x5c(%rbp),%eax
jge    1999 <main+0x819>
lea    -0x6ea0(%rbp),%rax
mov    %rax,-0xad88(%rbp)
lea    -0x3fc0(%rbp),%rax
mov    %rax,-0xad78(%rbp)
lea    -0x4f60(%rbp),%rax
mov    %rax,-0xad70(%rbp)
lea    -0x5f00(%rbp),%rax
mov    %rax,-0xad68(%rbp)
lea    -0x3020(%rbp),%r13
lea    -0x2080(%rbp),%r12
lea    -0x7e40(%rbp),%r15
lea    -0x910(%rbp),%r14
lea    -0x10e0(%rbp),%rbx
lea    -0x3c(%rbp),%rdi
lea    -0x48(%rbp),%rsi
lea    -0x50(%rbp),%rdx
lea    -0x68(%rbp),%rcx
lea    -0x128(%rbp),%r8
lea    -0x120(%rbp),%r9
lea    -0x70(%rbp),%rax
mov    %rax,-0xadb8(%rbp)
lea    -0x54(%rbp),%rax
mov    %rax,-0xadb0(%rbp)
lea    -0xa8(%rbp),%rax
mov    %rax,-0xada8(%rbp)
lea    -0x118(%rbp),%rax
mov    %rax,-0xada0(%rbp)
lea    -0x80(%rbp),%rax
mov    %rax,-0xad98(%rbp)
lea    -0x88(%rbp),%rax
mov    %rax,-0xad90(%rbp)
lea    -0xa0(%rbp),%rax
mov    %rax,-0xad80(%rbp)
lea    -0x130(%rbp),%r11
lea    -0x78(%rbp),%r10
lea    -0x138(%rbp),%rax
mov    %rax,-0xad60(%rbp)
mov    -0xadb8(%rbp),%rax
sub    $0xd0,%rsp
mov    %rax,(%rsp)
mov    -0xadb0(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0xad50(%rbp),%rax
mov    %rax,0x10(%rsp)
mov    -0xad30(%rbp),%rax
mov    %rax,0x18(%rsp)
mov    -0xada8(%rbp),%rax
mov    %rax,0x20(%rsp)
mov    -0xad28(%rbp),%rax
mov    %rax,0x28(%rsp)
mov    -0xada0(%rbp),%rax
mov    %rax,0x30(%rsp)
mov    -0xad38(%rbp),%rax
mov    %rax,0x38(%rsp)
mov    -0xad48(%rbp),%rax
mov    %rax,0x40(%rsp)
mov    -0xad98(%rbp),%rax
mov    %rax,0x48(%rsp)
mov    -0xad40(%rbp),%rax
mov    %rax,0x50(%rsp)
mov    -0xad90(%rbp),%rax
mov    %rax,0x58(%rsp)
mov    -0xad88(%rbp),%rax
mov    %rax,0x60(%rsp)
mov    -0xad80(%rbp),%rax
mov    %rax,0x68(%rsp)
mov    -0xad78(%rbp),%rax
mov    %rax,0x70(%rsp)
mov    -0xad70(%rbp),%rax
mov    %rax,0x78(%rsp)
mov    -0xad68(%rbp),%rax
mov    %rax,0x80(%rsp)
mov    -0xad60(%rbp),%rax
mov    %r13,0x88(%rsp)
mov    %r12,0x90(%rsp)
mov    %r15,0x98(%rsp)
mov    %r14,0xa0(%rsp)
mov    %rbx,0xa8(%rsp)
mov    %r11,0xb0(%rsp)
mov    %r10,0xb8(%rsp)
mov    %rax,0xc0(%rsp)
call   1060 <initial@plt>
add    $0xd0,%rsp
mov    -0x38(%rbp),%esi
movsd  -0x120(%rbp),%xmm0
ff
lea    0xa99(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    18e2 <main+0x762>
lea    -0x910(%rbp),%rsi
lea    -0x6ea0(%rbp),%rcx
lea    -0x2080(%rbp),%r8
lea    -0x3fc0(%rbp),%rax
mov    %rax,-0xae00(%rbp)
lea    -0x4f60(%rbp),%rax
mov    %rax,-0xadf8(%rbp)
lea    -0x3020(%rbp),%r13
lea    -0x5f00(%rbp),%rbx
lea    -0x3c(%rbp),%rdi
lea    -0xa0(%rbp),%r9
lea    -0x54(%rbp),%rax
lea    -0x118(%rbp),%rdx
mov    %rdx,-0xae20(%rbp)
lea    -0x88(%rbp),%rdx
mov    %rdx,-0xae18(%rbp)
lea    -0x80(%rbp),%rdx
mov    %rdx,-0xae10(%rbp)
lea    -0x50(%rbp),%rdx
mov    %rdx,-0xae08(%rbp)
lea    -0xb0(%rbp),%r12
lea    -0xb8(%rbp),%r15
lea    -0xc0(%rbp),%r14
lea    -0x78(%rbp),%r11
lea    -0xa8(%rbp),%r10
lea    -0x130(%rbp),%rdx
mov    %rdx,-0xadf0(%rbp)
mov    -0xad50(%rbp),%rdx
sub    $0xa0,%rsp
mov    %rax,(%rsp)
mov    -0xad28(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0xad38(%rbp),%rax
mov    %rax,0x10(%rsp)
mov    -0xae20(%rbp),%rax
mov    %rax,0x18(%rsp)
mov    -0xae18(%rbp),%rax
mov    %rax,0x20(%rsp)
mov    -0xae10(%rbp),%rax
mov    %rax,0x28(%rsp)
mov    -0xae08(%rbp),%rax
mov    %rax,0x30(%rsp)
mov    -0xae00(%rbp),%rax
mov    %rax,0x38(%rsp)
mov    -0xadf8(%rbp),%rax
mov    %rax,0x40(%rsp)
mov    -0xadf0(%rbp),%rax
mov    %r13,0x48(%rsp)
mov    -0xad48(%rbp),%r13
mov    %rbx,0x50(%rsp)
mov    -0xad30(%rbp),%rbx
mov    %r13,0x58(%rsp)
mov    %r12,0x60(%rsp)
mov    %r15,0x68(%rsp)
mov    %r14,0x70(%rsp)
mov    %rbx,0x78(%rsp)
mov    %r11,0x80(%rsp)
mov    %r10,0x88(%rsp)
mov    %rax,0x90(%rsp)
call   10a0 <core_acc@plt>
add    $0xa0,%rsp
lea    -0x910(%rbp),%rsi
lea    -0x6ea0(%rbp),%rcx
lea    -0x2080(%rbp),%r15
lea    -0x5f00(%rbp),%r11
lea    -0x3020(%rbp),%rax
lea    -0x3c(%rbp),%rdi
lea    -0x78(%rbp),%rdx
lea    -0xa8(%rbp),%r8
lea    -0xa0(%rbp),%r9
lea    -0xc8(%rbp),%r12
lea    -0xd0(%rbp),%r14
lea    -0x118(%rbp),%rbx
lea    -0x50(%rbp),%r10
sub    $0x40,%rsp
mov    %r12,(%rsp)
mov    %r15,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %rax,0x30(%rsp)
call   1090 <gas_acc@plt>
mov    -0xad40(%rbp),%r9
add    $0x40,%rsp
mov    -0xad50(%rbp),%rax
lea    -0x910(%rbp),%r11
lea    -0x6ea0(%rbp),%rcx
mov    %rcx,-0xadc0(%rbp)
lea    -0x118(%rbp),%rdi
lea    -0x120(%rbp),%rsi
lea    -0x48(%rbp),%rdx
lea    -0x128(%rbp),%rcx
lea    -0x54(%rbp),%r8
lea    -0x50(%rbp),%r10
mov    %r10,-0xade8(%rbp)
lea    -0x68(%rbp),%r10
mov    %r10,-0xade0(%rbp)
lea    -0x58(%rbp),%r10
mov    %r10,-0xadd8(%rbp)
lea    -0x34(%rbp),%r10
mov    %r10,-0xadd0(%rbp)
lea    -0x130(%rbp),%r10
mov    %r10,-0xadc8(%rbp)
lea    -0xa0(%rbp),%r13
lea    -0x78(%rbp),%r12
lea    -0xa8(%rbp),%r15
lea    -0xd4(%rbp),%r14
lea    -0x138(%rbp),%rbx
lea    -0x3c(%rbp),%r10
sub    $0x90,%rsp
mov    %rax,(%rsp)
mov    -0xade8(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0xade0(%rbp),%rax
mov    %rax,0x10(%rsp)
mov    -0xadd8(%rbp),%rax
mov    %rax,0x18(%rsp)
mov    -0xadd0(%rbp),%rax
mov    %rax,0x20(%rsp)
mov    -0xadc8(%rbp),%rax
mov    %rax,0x28(%rsp)
mov    -0xadc0(%rbp),%rax
mov    %r13,0x30(%rsp)
mov    -0xad28(%rbp),%r13
mov    %r12,0x38(%rsp)
mov    -0xad38(%rbp),%r12
mov    %r15,0x40(%rsp)
mov    -0xad30(%rbp),%r15
mov    %r15,0x48(%rsp)
mov    -0xad48(%rbp),%r15
mov    %r13,0x50(%rsp)
mov    %r12,0x58(%rsp)
mov    %r15,0x60(%rsp)
mov    %r14,0x68(%rsp)
mov    %rbx,0x70(%rsp)
mov    %r11,0x78(%rsp)
mov    %r10,0x80(%rsp)
mov    %rax,0x88(%rsp)
call   1080 <next@plt>
add    $0x90,%rsp
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1575 <main+0x3f5>
mov    -0x3c(%rbp),%esi
lea    0x71b(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
lea    -0x8de0(%rbp),%rdi
lea    -0x6ea0(%rbp),%rsi
lea    -0x2080(%rbp),%rdx
lea    -0x9d80(%rbp),%rcx
lea    -0xad20(%rbp),%r8
lea    -0x3fc0(%rbp),%r11
lea    -0x4f60(%rbp),%r10
lea    -0x910(%rbp),%rax
lea    -0xa0(%rbp),%r9
lea    -0x48(%rbp),%r14
lea    -0x3c(%rbp),%rbx
sub    $0x30,%rsp
mov    %r14,(%rsp)
mov    %rbx,0x8(%rsp)
mov    %r11,0x10(%rsp)
mov    %r10,0x18(%rsp)
mov    %rax,0x20(%rsp)
call   1030 <gimpact@plt>
add    $0x30,%rsp
lea    -0x6ea0(%rbp),%rsi
lea    -0x2080(%rbp),%rdx
lea    -0x3fc0(%rbp),%rcx
lea    -0x4f60(%rbp),%r8
lea    -0x5f00(%rbp),%r9
lea    -0x3c(%rbp),%rdi
call   1040 <output@plt>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1336 <main+0x1b6>
movl   $0x0,-0x2c(%rbp)
mov    -0xe0(%rbp),%rax
mov    %rax,%rsp
mov    -0x2c(%rbp),%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xace8,%rsp
lea    -0xf8(%rbp),%rax
lea    -0x100(%rbp),%rbx
lea    -0xb8(%rbp),%r14
lea    -0xc0(%rbp),%r15
lea    -0x108(%rbp),%r12
lea    -0x48(%rbp),%r10
lea    -0x110(%rbp),%r13
lea    -0xc8(%rbp),%r11
lea    -0x2c(%rbp),%rdi
lea    -0x30(%rbp),%rsi
lea    -0x3c(%rbp),%rdx
lea    -0x118(%rbp),%rcx
lea    -0x50(%rbp),%r8
lea    -0xd0(%rbp),%r9
push   %rax
push   %rbx
push   %r14
push   %r15
push   %r12
push   %r10
push   %r13
lea    -0x120(%rbp),%rax
push   %rax
lea    -0x128(%rbp),%rax
push   %rax
push   %r11
call   1050 <parameter@plt>
add    $0x50,%rsp
mov    %rsp,-0xf0(%rbp)
movl   $0x0,-0x84(%rbp)
mov    -0x2c(%rbp),%eax
mov    %rsp,%rcx
lea    0xf(,%rax,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rcx
mov    %rcx,-0x98(%rbp)
mov    %rcx,%rsp
mov    -0x2c(%rbp),%eax
mov    %rsp,%r8
lea    0xf(,%rax,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r8
mov    %r8,%rsp
mov    %rsp,%r9
sub    %rax,%r9
mov    %r9,%rsp
mov    %rsp,%r13
sub    %rax,%r13
mov    %r13,%rsp
mov    %rsp,%rcx
sub    %rax,%rcx
mov    %rcx,-0x70(%rbp)
mov    %rcx,%rsp
mov    %rsp,%r12
sub    %rax,%r12
mov    %r12,%rsp
cmpl   $0x0,-0x3c(%rbp)
jle    1648 <main+0x4c8>
lea    -0xa0(%rbp),%r10
lea    -0x2840(%rbp),%r14
lea    -0x37e0(%rbp),%r11
lea    -0x40(%rbp),%r15
lea    -0xe8(%rbp),%rsi
lea    -0xe0(%rbp),%rdx
lea    -0xd8(%rbp),%rcx
lea    -0xb0(%rbp),%rbx
lea    -0x78(%rbp),%rax
xor    %edi,%edi
mov    %r12,-0x68(%rbp)
mov    %r13,-0x60(%rbp)
mov    %r8,-0x58(%rbp)
mov    %r9,-0x90(%rbp)
jmp    13b0 <main+0x230>
nopl   0x0(%rax,%rax,1)
mov    -0x40(%rbp),%esi
lea    0xd1d(%rip),%rdi
xor    %eax,%eax
call   1070 <printf@plt>
sub    $0x8,%rsp
lea    -0x9d70(%rbp),%rdi
mov    %rbx,%rsi
mov    %r14,%r12
lea    -0x18a0(%rbp),%rdx
lea    -0x8dd0(%rbp),%rcx
lea    -0x7e30(%rbp),%r8
mov    %r13,%r9
lea    -0x900(%rbp),%rax
push   %rax
lea    -0x37e0(%rbp),%r13
push   %r13
lea    -0x4780(%rbp),%r14
push   %r14
push   %r12
lea    -0xe8(%rbp),%rbx
push   %rbx
call   1030 <gimpact@plt>
add    $0x30,%rsp
mov    %r12,%r15
mov    %r12,%rdi
lea    -0x66c0(%rbp),%rsi
lea    -0x18a0(%rbp),%rdx
mov    %r14,%rcx
mov    %r13,%r8
lea    -0x2840(%rbp),%r14
mov    %r14,%r9
call   1040 <output@plt>
mov    -0x38(%rbp),%edi
add    $0x1,%edi
cmp    -0x3c(%rbp),%edi
mov    -0x90(%rbp),%r9
mov    -0x68(%rbp),%r12
lea    -0xa0(%rbp),%r10
mov    %r13,%r11
mov    %rbx,%rsi
lea    -0xe0(%rbp),%rdx
lea    -0xd8(%rbp),%rcx
lea    -0xb0(%rbp),%rbx
lea    -0x78(%rbp),%rax
jge    1648 <main+0x4c8>
mov    %edi,-0x38(%rbp)
sub    $0x8,%rsp
mov    %r15,%rdi
mov    -0x98(%rbp),%r15
mov    %rbx,%r8
mov    %r9,%r13
mov    %rax,%r9
push   %r10
mov    %r14,%rbx
lea    -0x50(%rbp),%r14
push   %r14
lea    -0xa8(%rbp),%rax
push   %rax
lea    -0x6e90(%rbp),%rax
push   %rax
lea    -0x900(%rbp),%rax
push   %rax
lea    -0xad10(%rbp),%rax
push   %rax
lea    -0x18a0(%rbp),%rax
push   %rax
lea    -0x5720(%rbp),%rax
push   %rax
push   %rbx
push   %r11
lea    -0x4780(%rbp),%rax
push   %rax
lea    -0x110(%rbp),%rbx
push   %rbx
lea    -0x66c0(%rbp),%r14
push   %r14
lea    -0xc8(%rbp),%rax
push   %rax
push   %r13
lea    -0xd0(%rbp),%rax
push   %rax
push   -0x58(%rbp)
push   -0x60(%rbp)
lea    -0x80(%rbp),%rax
push   %rax
push   %r12
mov    %rbx,%r13
lea    -0x48(%rbp),%r12
push   %r12
push   -0x70(%rbp)
push   %r15
mov    %r15,%r12
lea    -0x2c(%rbp),%r15
push   %r15
lea    -0x118(%rbp),%rax
push   %rax
call   1060 <initial@plt>
add    $0xd0,%rsp
movsd  -0x78(%rbp),%xmm0
lea    0xb89(%rip),%rdi
mov    -0x38(%rbp),%esi
mov    $0x1,%al
call   1070 <printf@plt>
movl   $0x1,-0x34(%rbp)
cmpl   $0x2,-0x30(%rbp)
lea    -0xb8(%rbp),%r10
lea    -0xc0(%rbp),%r11
mov    %r14,%rbx
lea    -0x40(%rbp),%r14
jl     12e0 <main+0x160>
nopw   0x0(%rax,%rax,1)
sub    $0x8,%rsp
mov    %r14,%rdi
lea    -0x900(%rbp),%rsi
mov    %r12,%rdx
mov    %rbx,%rcx
mov    %r14,%r12
lea    -0x18a0(%rbp),%r8
mov    %r13,%r9
lea    -0xa8(%rbp),%rax
push   %rax
lea    -0x48(%rbp),%rax
push   %rax
lea    -0x50(%rbp),%rax
push   %rax
push   -0x70(%rbp)
push   %r10
push   %r11
lea    -0x108(%rbp),%rax
push   %rax
push   -0x58(%rbp)
lea    -0x2840(%rbp),%r14
push   %r14
lea    -0x5720(%rbp),%rax
push   %rax
lea    -0x37e0(%rbp),%rax
push   %rax
lea    -0x4780(%rbp),%rax
push   %rax
mov    %r13,%r15
lea    -0xe0(%rbp),%r13
push   %r13
lea    -0xd0(%rbp),%rax
push   %rax
lea    -0xc8(%rbp),%rax
push   %rax
lea    -0x80(%rbp),%rax
push   %rax
push   -0x60(%rbp)
push   -0x68(%rbp)
lea    -0x2c(%rbp),%rax
push   %rax
call   10a0 <core_acc@plt>
add    $0x98,%rsp
mov    %r12,%rdi
lea    -0x900(%rbp),%rsi
lea    -0x50(%rbp),%rdx
mov    %rbx,%rcx
lea    -0x48(%rbp),%r8
mov    %r15,%r9
lea    -0x5720(%rbp),%rax
push   %rax
push   %r13
push   %r14
lea    -0x80(%rbp),%rax
push   %rax
lea    -0xf8(%rbp),%rax
push   %rax
lea    -0x18a0(%rbp),%rax
push   %rax
mov    %r12,%r14
mov    -0x98(%rbp),%r12
lea    -0x100(%rbp),%rax
push   %rax
call   1090 <gas_acc@plt>
add    $0x40,%rsp
lea    -0x80(%rbp),%rdi
lea    -0x78(%rbp),%rsi
lea    -0xe8(%rbp),%rdx
lea    -0xb0(%rbp),%rcx
lea    -0x2c(%rbp),%r8
mov    -0x90(%rbp),%r9
push   %rbx
push   %r14
lea    -0x900(%rbp),%rax
push   %rax
lea    -0xa0(%rbp),%rax
push   %rax
lea    -0x84(%rbp),%rax
push   %rax
push   -0x58(%rbp)
push   -0x60(%rbp)
push   -0x68(%rbp)
push   -0x70(%rbp)
lea    -0x48(%rbp),%rax
push   %rax
lea    -0x50(%rbp),%rax
push   %rax
push   %r15
lea    -0xa8(%rbp),%rax
push   %rax
lea    -0x34(%rbp),%rax
push   %rax
lea    -0x30(%rbp),%rax
push   %rax
lea    -0xd8(%rbp),%rax
push   %rax
push   %r13
mov    %r15,%r13
push   %r12
call   1080 <next@plt>
lea    -0xc0(%rbp),%r11
lea    -0xb8(%rbp),%r10
add    $0x90,%rsp
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
cmp    -0x30(%rbp),%eax
jl     14b0 <main+0x330>
jmp    12e0 <main+0x160>
mov    -0xf0(%rbp),%rsp
xor    %eax,%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [7 x i8] c"%d %f\0A\00"
@.str.1 = [4 x i8] c"%d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca double
%7 = alloca double
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca i32
%26 = alloca i8*
%27 = alloca i64
%28 = alloca i64
%29 = alloca i64
%30 = alloca i64
%31 = alloca i64
%32 = alloca i64
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca [500 x i32]
%39 = alloca [500 x i32]
%40 = alloca [500 x double]
%41 = alloca [500 x double]
%42 = alloca [500 x double]
%43 = alloca [500 x double]
%44 = alloca [500 x double]
%45 = alloca [500 x double]
%46 = alloca [500 x double]
%47 = alloca [500 x double]
%48 = alloca [500 x double]
%49 = alloca [500 x double]
store i32 0, i32* %1
%50 = call i32 @parameter(i32* %8, i32* %9, i32* %10, double* %12, double* %13, double* %14, double* %15, double* %16, double* %17, double* %18, double* %19, double* %20, double* %21, double* %22, double* %23, double* %24)
store i32 0, i32* %25
%51 = load i32, i32* %8
%52 = zext i32 %51 to i64
%53 = call i8* @llvm.stacksave()
store i8* %53, i8** %26
%54 = alloca double, i64 %52
store i64 %52, i64* %27
%55 = load i32, i32* %8
%56 = zext i32 %55 to i64
%57 = alloca double, i64 %56
store i64 %56, i64* %28
%58 = load i32, i32* %8
%59 = zext i32 %58 to i64
%60 = alloca double, i64 %59
store i64 %59, i64* %29
%61 = load i32, i32* %8
%62 = zext i32 %61 to i64
%63 = alloca double, i64 %62
store i64 %62, i64* %30
%64 = load i32, i32* %8
%65 = zext i32 %64 to i64
%66 = alloca double, i64 %65
store i64 %65, i64* %31
%67 = load i32, i32* %8
%68 = zext i32 %67 to i64
%69 = alloca double, i64 %68
store i64 %68, i64* %32
store i32 0, i32* %4
br label %70
70: ; preds = %131, %0
%71 = load i32, i32* %4
%72 = load i32, i32* %10
%73 = icmp slt i32 %71, %72
br i1 %73, label %74, label %134
74: ; preds = %70
%75 = getelementptr inbounds [500 x double], [500 x double]* %45, i64 0, i64 0
%76 = getelementptr inbounds [500 x double], [500 x double]* %42, i64 0, i64 0
%77 = getelementptr inbounds [500 x double], [500 x double]* %43, i64 0, i64 0
%78 = getelementptr inbounds [500 x double], [500 x double]* %44, i64 0, i64 0
%79 = getelementptr inbounds [500 x double], [500 x double]* %41, i64 0, i64 0
%80 = getelementptr inbounds [500 x double], [500 x double]* %40, i64 0, i64 0
%81 = getelementptr inbounds [500 x double], [500 x double]* %46, i64 0, i64 0
%82 = getelementptr inbounds [500 x i32], [500 x i32]* %38, i64 0, i64 0
%83 = getelementptr inbounds [500 x i32], [500 x i32]* %39, i64 0, i64 0
%84 = call i32 @initial(i32* %5, double* %6, double* %7, double* %11, double* %35, double* %34, double* %12, i32* %8, double* %54, double* %66, double* %19, double* %69, double* %33, double* %63, double* %57, double* %14, double* %60, double* %15, double* %75, double* %18, double* %76, double* %77, double* %78, double* %79, double* %80, double* %81, i32* %82, i32* %83, double* %36, double* %13, double* %37)
%85 = load i32, i32* %4
%86 = load double, double* %34
%87 = call i32 (i8*, i32, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i32 %85, double %86)
store i32 1, i32* %3
br label %88
88: ; preds = %110, %74
%89 = load i32, i32* %3
%90 = load i32, i32* %9
%91 = icmp slt i32 %89, %90
br i1 %91, label %92, label %113
92: ; preds = %88
%93 = getelementptr inbounds [500 x i32], [500 x i32]* %38, i64 0, i64 0
%94 = getelementptr inbounds [500 x double], [500 x double]* %45, i64 0, i64 0
%95 = getelementptr inbounds [500 x double], [500 x double]* %40, i64 0, i64 0
%96 = getelementptr inbounds [500 x double], [500 x double]* %42, i64 0, i64 0
%97 = getelementptr inbounds [500 x double], [500 x double]* %43, i64 0, i64 0
%98 = getelementptr inbounds [500 x double], [500 x double]* %41, i64 0, i64 0
%99 = getelementptr inbounds [500 x double], [500 x double]* %44, i64 0, i64 0
%100 = call i32 @core_acc(i32* %5, i32* %93, double* %54, double* %94, double* %95, double* %18, i32* %8, double* %69, double* %63, double* %33, double* %15, double* %14, double* %7, double* %96, double* %97, double* %98, double* %99, double* %57, double* %20, double* %21, double* %22, double* %66, double* %13, double* %19, double* %36)
%101 = getelementptr inbounds [500 x i32], [500 x i32]* %38, i64 0, i64 0
%102 = getelementptr inbounds [500 x double], [500 x double]* %45, i64 0, i64 0
%103 = getelementptr inbounds [500 x double], [500 x double]* %40, i64 0, i64 0
%104 = getelementptr inbounds [500 x double], [500 x double]* %44, i64 0, i64 0
%105 = getelementptr inbounds [500 x double], [500 x double]* %41, i64 0, i64 0
%106 = call i32 @gas_acc(i32* %5, i32* %101, double* %13, double* %102, double* %19, double* %18, double* %23, double* %103, double* %24, double* %33, double* %104, double* %7, double* %105)
%107 = getelementptr inbounds [500 x i32], [500 x i32]* %38, i64 0, i64 0
%108 = getelementptr inbounds [500 x double], [500 x double]* %45, i64 0, i64 0
%109 = call i32 @next(double* %33, double* %34, double* %6, double* %35, i32* %8, double* %60, double* %54, double* %7, double* %11, i32* %9, i32* %3, double* %36, double* %18, double* %13, double* %19, double* %66, double* %69, double* %63, double* %57, i32* %25, double* %37, i32* %107, i32* %5, double* %108)
br label %110
110: ; preds = %92
%111 = load i32, i32* %3
%112 = add nsw i32 %111, 1
store i32 %112, i32* %3
br label %88
113: ; preds = %88
%114 = load i32, i32* %5
%115 = call i32 (i8*, i32, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %114)
%116 = getelementptr inbounds [500 x double], [500 x double]* %47, i64 0, i64 0
%117 = getelementptr inbounds [500 x double], [500 x double]* %45, i64 0, i64 0
%118 = getelementptr inbounds [500 x double], [500 x double]* %40, i64 0, i64 0
%119 = getelementptr inbounds [500 x double], [500 x double]* %48, i64 0, i64 0
%120 = getelementptr inbounds [500 x double], [500 x double]* %49, i64 0, i64 0
%121 = getelementptr inbounds [500 x double], [500 x double]* %42, i64 0, i64 0
%122 = getelementptr inbounds [500 x double], [500 x double]* %43, i64 0, i64 0
%123 = getelementptr inbounds [500 x i32], [500 x i32]* %38, i64 0, i64 0
%124 = call i32 @gimpact(double* %116, double* %117, double* %118, double* %119, double* %120, double* %18, double* %6, i32* %5, double* %121, double* %122, i32* %123)
%125 = getelementptr inbounds [500 x double], [500 x double]* %45, i64 0, i64 0
%126 = getelementptr inbounds [500 x double], [500 x double]* %40, i64 0, i64 0
%127 = getelementptr inbounds [500 x double], [500 x double]* %42, i64 0, i64 0
%128 = getelementptr inbounds [500 x double], [500 x double]* %43, i64 0, i64 0
%129 = getelementptr inbounds [500 x double], [500 x double]* %44, i64 0, i64 0
%130 = call i32 @output(i32* %5, double* %125, double* %126, double* %127, double* %128, double* %129)
br label %131
131: ; preds = %113
%132 = load i32, i32* %4
%133 = add nsw i32 %132, 1
store i32 %133, i32* %4
br label %70
134: ; preds = %70
store i32 0, i32* %1
%135 = load i8*, i8** %26
%136 = load i32, i32* %1
ret i32 %136
}

LLVM IR (-O2):
@.str = [7 x i8] c"%d %f\0A\00"
@.str.1 = [4 x i8] c"%d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca double
%4 = alloca double
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca i32
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca [500 x i32]
%29 = alloca [500 x i32]
%30 = alloca [500 x double]
%31 = alloca [500 x double]
%32 = alloca [500 x double]
%33 = alloca [500 x double]
%34 = alloca [500 x double]
%35 = alloca [500 x double]
%36 = alloca [500 x double]
%37 = alloca [500 x double]
%38 = alloca [500 x double]
%39 = alloca [500 x double]
%40 = bitcast i32* %1 to i8*
%41 = bitcast i32* %2 to i8*
%42 = bitcast double* %3 to i8*
%43 = bitcast double* %4 to i8*
%44 = bitcast i32* %5 to i8*
%45 = bitcast i32* %6 to i8*
%46 = bitcast i32* %7 to i8*
%47 = bitcast double* %8 to i8*
%48 = bitcast double* %9 to i8*
%49 = bitcast double* %10 to i8*
%50 = bitcast double* %11 to i8*
%51 = bitcast double* %12 to i8*
%52 = bitcast double* %13 to i8*
%53 = bitcast double* %14 to i8*
%54 = bitcast double* %15 to i8*
%55 = bitcast double* %16 to i8*
%56 = bitcast double* %17 to i8*
%57 = bitcast double* %18 to i8*
%58 = bitcast double* %19 to i8*
%59 = bitcast double* %20 to i8*
%60 = bitcast double* %21 to i8*
%61 = call i32 @parameter(i32* %5, i32* %6, i32* %7, double* %9, double* %10, double* %11, double* %12, double* %13, double* %14, double* %15, double* %16, double* %17, double* %18, double* %19, double* %20, double* %21)
%62 = bitcast i32* %22 to i8*
store i32 0, i32* %22
%63 = load i32, i32* %5
%64 = zext i32 %63 to i64
%65 = call i8* @llvm.stacksave()
%66 = alloca double, i64 %64
%67 = load i32, i32* %5
%68 = zext i32 %67 to i64
%69 = alloca double, i64 %68
%70 = alloca double, i64 %68
%71 = alloca double, i64 %68
%72 = alloca double, i64 %68
%73 = alloca double, i64 %68
%74 = bitcast double* %23 to i8*
%75 = bitcast double* %24 to i8*
%76 = bitcast double* %25 to i8*
%77 = bitcast double* %26 to i8*
%78 = bitcast double* %27 to i8*
%79 = bitcast [500 x i32]* %28 to i8*
%80 = bitcast [500 x i32]* %29 to i8*
%81 = bitcast [500 x double]* %30 to i8*
%82 = bitcast [500 x double]* %31 to i8*
%83 = bitcast [500 x double]* %32 to i8*
%84 = bitcast [500 x double]* %33 to i8*
%85 = bitcast [500 x double]* %34 to i8*
%86 = bitcast [500 x double]* %35 to i8*
%87 = bitcast [500 x double]* %36 to i8*
%88 = bitcast [500 x double]* %37 to i8*
%89 = bitcast [500 x double]* %38 to i8*
%90 = bitcast [500 x double]* %39 to i8*
%91 = load i32, i32* %7
%92 = icmp sgt i32 %91, 0
br i1 %92, label %93, label %129
93: ; preds = %0
%94 = getelementptr inbounds [500 x double], [500 x double]* %35, i64 0, i64 0
%95 = getelementptr inbounds [500 x double], [500 x double]* %32, i64 0, i64 0
%96 = getelementptr inbounds [500 x double], [500 x double]* %33, i64 0, i64 0
%97 = getelementptr inbounds [500 x double], [500 x double]* %34, i64 0, i64 0
%98 = getelementptr inbounds [500 x double], [500 x double]* %31, i64 0, i64 0
%99 = getelementptr inbounds [500 x double], [500 x double]* %30, i64 0, i64 0
%100 = getelementptr inbounds [500 x double], [500 x double]* %36, i64 0, i64 0
%101 = getelementptr inbounds [500 x i32], [500 x i32]* %28, i64 0, i64 0
%102 = getelementptr inbounds [500 x i32], [500 x i32]* %29, i64 0, i64 0
%103 = getelementptr inbounds [500 x double], [500 x double]* %37, i64 0, i64 0
%104 = getelementptr inbounds [500 x double], [500 x double]* %38, i64 0, i64 0
%105 = getelementptr inbounds [500 x double], [500 x double]* %39, i64 0, i64 0
br label %106
106: ; preds = %93, %121
%107 = phi i32 [ 0, %93 ], [ %126, %121 ]
%108 = call i32 @initial(i32* %2, double* %3, double* %4, double* %8, double* %25, double* %24, double* %9, i32* %5, double* %66, double* %72, double* %16, double* %73, double* %23, double* %71, double* %69, double* %11, double* %70, double* %12, double* %94, double* %15, double* %95, double* %96, double* %97, double* %98, double* %99, double* %100, i32* %101, i32* %102, double* %26, double* %10, double* %27)
%109 = load double, double* %24
%110 = call i32 (i8*, i32, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i32 %107, double %109)
store i32 1, i32* %1
%111 = load i32, i32* %6
%112 = icmp sgt i32 %111, 1
br i1 %112, label %113, label %121
113: ; preds = %106, %113
%114 = call i32 @core_acc(i32* %2, i32* %101, double* %66, double* %94, double* %99, double* %15, i32* %5, double* %73, double* %71, double* %23, double* %12, double* %11, double* %4, double* %95, double* %96, double* %98, double* %97, double* %69, double* %17, double* %18, double* %19, double* %72, double* %10, double* %16, double* %26)
%115 = call i32 @gas_acc(i32* %2, i32* %101, double* %10, double* %94, double* %16, double* %15, double* %20, double* %99, double* %21, double* %23, double* %97, double* %4, double* %98)
%116 = call i32 @next(double* %23, double* %24, double* %3, double* %25, i32* %5, double* %70, double* %66, double* %4, double* %8, i32* %6, i32* %1, double* %26, double* %15, double* %10, double* %16, double* %72, double* %73, double* %71, double* %69, i32* %22, double* %27, i32* %101, i32* %2, double* %94)
%117 = load i32, i32* %1
%118 = add nsw i32 %117, 1
store i32 %118, i32* %1
%119 = load i32, i32* %6
%120 = icmp slt i32 %118, %119
br i1 %120, label %113, label %121
121: ; preds = %113, %106
%122 = load i32, i32* %2
%123 = call i32 (i8*, i32, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %122)
%124 = call i32 @gimpact(double* %103, double* %94, double* %99, double* %104, double* %105, double* %15, double* %3, i32* %2, double* %95, double* %96, i32* %101)
%125 = call i32 @output(i32* %2, double* %94, double* %99, double* %95, double* %96, double* %97)
%126 = add nuw nsw i32 %107, 1
%127 = load i32, i32* %7
%128 = icmp slt i32 %126, %127
br i1 %128, label %106, label %129
129: ; preds = %121, %0
ret i32 0
}