void rungekutta4(double *x, double *x1, int dim, double t, double h,
                 double *par, double (*f[dim])(double *, double, double *)) {
  int i = 0;
  double aux[dim];
  double k1[dim];
  for (i = 0; i < dim; i++)
    aux[i] = x[i];
  for (i = 0; i < dim; i++)
    k1[i] = h * (*f[i])(aux, t, par);
  double k2[dim];
  for (i = 0; i < dim; i++)
    aux[i] = x[i] + k1[i] / 2.;
  for (i = 0; i < dim; i++)
    k2[i] = h * (*f[i])(aux, t + h / 2., par);
  double k3[dim];
  for (i = 0; i < dim; i++)
    aux[i] = x[i] + k2[i] / 2.;
  for (i = 0; i < dim; i++)
    k3[i] = h * (*f[i])(aux, t + h / 2., par);
  double k4[dim];
  for (i = 0; i < dim; i++)
    aux[i] = x[i] + k3[i];
  for (i = 0; i < dim; i++)
    k4[i] = h * (*f[i])(aux, t + h, par);
  for (i = 0; i < dim; i++)
    x1[i] = x[i] + (k1[i] + 2. * k2[i] + 2. * k3[i] + k4[i]) / 6.;
}


x86 assembly (clang, -O0):
<rungekutta4>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movsd  %xmm0,-0x20(%rbp)
movsd  %xmm1,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
mov    %r8,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x14(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x48(%rbp)
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x80(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x50(%rbp)
mov    -0x14(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x78(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x58(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11b1 <rungekutta4+0xb1>
mov    -0x80(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq -0x3c(%rbp),%rdx
movsd  (%rcx,%rdx,8),%xmm0
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    117d <rungekutta4+0x7d>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1216 <rungekutta4+0x116>
mov    -0x80(%rbp),%rdi
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  -0x20(%rbp),%xmm0
mov    -0x30(%rbp),%rsi
call   *%rax
mov    -0x78(%rbp),%rax
movaps %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11b8 <rungekutta4+0xb8>
mov    -0x14(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x90(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1291 <rungekutta4+0x191>
mov    -0x80(%rbp),%rax
mov    -0x78(%rbp),%rcx
mov    -0x8(%rbp),%rdx
movslq -0x3c(%rbp),%rsi
movsd  (%rdx,%rsi,8),%xmm0
movslq -0x3c(%rbp),%rdx
movsd  (%rcx,%rdx,8),%xmm1
movsd  0xd96(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1240 <rungekutta4+0x140>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    130e <rungekutta4+0x20e>
mov    -0x80(%rbp),%rdi
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  0xd35(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rsi
call   *%rax
mov    -0x90(%rbp),%rax
movaps %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1298 <rungekutta4+0x198>
mov    -0x14(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xa0(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x68(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    138c <rungekutta4+0x28c>
mov    -0x80(%rbp),%rax
mov    -0x90(%rbp),%rcx
mov    -0x8(%rbp),%rdx
movslq -0x3c(%rbp),%rsi
movsd  (%rdx,%rsi,8),%xmm0
movslq -0x3c(%rbp),%rdx
movsd  (%rcx,%rdx,8),%xmm1
movsd  0xc9b(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1338 <rungekutta4+0x238>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1409 <rungekutta4+0x309>
mov    -0x80(%rbp),%rdi
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x38(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  0xc3a(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rsi
call   *%rax
mov    -0xa0(%rbp),%rax
movaps %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1393 <rungekutta4+0x293>
mov    -0x14(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xb0(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x70(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1477 <rungekutta4+0x377>
mov    -0x80(%rbp),%rax
mov    -0xa0(%rbp),%rcx
mov    -0x8(%rbp),%rdx
movslq -0x3c(%rbp),%rsi
movsd  (%rdx,%rsi,8),%xmm0
movslq -0x3c(%rbp),%rdx
addsd  (%rcx,%rdx,8),%xmm0
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1433 <rungekutta4+0x333>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    14e4 <rungekutta4+0x3e4>
mov    -0x80(%rbp),%rdi
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x38(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  -0x20(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
mov    -0x30(%rbp),%rsi
call   *%rax
mov    -0xb0(%rbp),%rax
movaps %xmm0,%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    147e <rungekutta4+0x37e>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    157d <rungekutta4+0x47d>
mov    -0xb0(%rbp),%rax
mov    -0xa0(%rbp),%rcx
mov    -0x90(%rbp),%rdx
mov    -0x78(%rbp),%rsi
mov    -0x8(%rbp),%rdi
movslq -0x3c(%rbp),%r8
movsd  (%rdi,%r8,8),%xmm0
movslq -0x3c(%rbp),%rdi
movsd  (%rsi,%rdi,8),%xmm1
movslq -0x3c(%rbp),%rsi
movsd  (%rdx,%rsi,8),%xmm2
addsd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
movslq -0x3c(%rbp),%rdx
movsd  (%rcx,%rdx,8),%xmm1
addsd  %xmm1,%xmm1
addsd  %xmm2,%xmm1
movslq -0x3c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xaa6(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    14eb <rungekutta4+0x3eb>
mov    -0x48(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rungekutta4>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
movsd  %xmm0,-0x48(%rbp)
mov    %rsi,-0x70(%rbp)
mov    %edx,%eax
mov    %rsp,%r14
mov    %rax,-0x30(%rbp)
lea    0xf(,%rax,8),%rsi
and    $0xfffffffffffffff0,%rsi
sub    %rsi,%r14
mov    %r14,%rsp
mov    %rsp,%rax
sub    %rsi,%rax
mov    %rax,-0x40(%rbp)
mov    %rax,%rsp
test   %edx,%edx
jle    1769 <rungekutta4+0x659>
mov    %rdi,%rbx
mov    %rsi,-0x60(%rbp)
mov    %edx,-0x34(%rbp)
mov    -0x30(%rbp),%r15
lea    0x0(,%r15,8),%rdx
mov    %r14,%rdi
mov    %rbx,-0x58(%rbp)
mov    %rbx,%rsi
mov    %r8,%r12
mov    %rcx,-0x88(%rbp)
movsd  %xmm1,-0x50(%rbp)
call   1030 <memcpy@plt>
xor    %ebx,%ebx
mov    -0x40(%rbp),%r13
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r14,%rdi
movsd  -0x48(%rbp),%xmm0
mov    -0x88(%rbp),%rsi
call   *(%r12,%rbx,8)
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,0x0(%r13,%rbx,8)
add    $0x1,%rbx
cmp    %rbx,%r15
jne    11a0 <rungekutta4+0x90>
mov    %rsp,%r11
sub    -0x60(%rbp),%r11
mov    %r11,%rsp
mov    -0x34(%rbp),%r8d
test   %r8d,%r8d
mov    -0x88(%rbp),%rsi
movsd  -0x50(%rbp),%xmm4
mov    -0x58(%rbp),%r15
jle    1769 <rungekutta4+0x659>
mov    %r12,%rdx
cmp    $0x4,%r8d
jae    1207 <rungekutta4+0xf7>
xor    %eax,%eax
mov    -0x30(%rbp),%r10
mov    -0x40(%rbp),%rbx
jmp    12fb <rungekutta4+0x1eb>
mov    -0x30(%rbp),%r10
mov    %r10d,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rcx
mov    %rcx,%r9
shr    $0x2,%r9
add    $0x1,%r9
test   %rcx,%rcx
je     1572 <rungekutta4+0x462>
mov    %r9,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %ecx,%ecx
movapd 0xdc6(%rip),%xmm0
mov    -0x40(%rbp),%rbx
xchg   %ax,%ax
movupd (%r15,%rcx,8),%xmm1
movupd 0x10(%r15,%rcx,8),%xmm2
movapd (%rbx,%rcx,8),%xmm3
mulpd  %xmm0,%xmm3
addpd  %xmm1,%xmm3
movapd 0x10(%rbx,%rcx,8),%xmm1
mulpd  %xmm0,%xmm1
addpd  %xmm2,%xmm1
movapd %xmm3,(%r14,%rcx,8)
movapd %xmm1,0x10(%r14,%rcx,8)
movupd 0x20(%r15,%rcx,8),%xmm1
movupd 0x30(%r15,%rcx,8),%xmm2
movapd 0x20(%rbx,%rcx,8),%xmm3
mulpd  %xmm0,%xmm3
addpd  %xmm1,%xmm3
movapd 0x30(%rbx,%rcx,8),%xmm1
mulpd  %xmm0,%xmm1
addpd  %xmm2,%xmm1
movapd %xmm3,0x20(%r14,%rcx,8)
movapd %xmm1,0x30(%r14,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rdi
jne    1240 <rungekutta4+0x130>
test   $0x1,%r9b
je     12f6 <rungekutta4+0x1e6>
movupd (%r15,%rcx,8),%xmm0
movupd 0x10(%r15,%rcx,8),%xmm1
movapd 0xd2e(%rip),%xmm2
movapd (%rbx,%rcx,8),%xmm3
mulpd  %xmm2,%xmm3
mulpd  0x10(%rbx,%rcx,8),%xmm2
addpd  %xmm0,%xmm3
addpd  %xmm1,%xmm2
movapd %xmm3,(%r14,%rcx,8)
movapd %xmm2,0x10(%r14,%rcx,8)
cmp    %r10,%rax
je     132e <rungekutta4+0x21e>
movsd  0xd1d(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%rbx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r15,%rax,8),%xmm1
movsd  %xmm1,(%r14,%rax,8)
add    $0x1,%rax
cmp    %rax,%r10
jne    1310 <rungekutta4+0x200>
test   %r8d,%r8d
jle    1769 <rungekutta4+0x659>
movsd  0xce1(%rip),%xmm5
mulsd  %xmm4,%xmm5
addsd  -0x48(%rbp),%xmm5
mov    %r14,%r15
xor    %r13d,%r13d
mov    -0x30(%rbp),%rbx
mov    %r11,-0x78(%rbp)
movsd  %xmm5,-0x80(%rbp)
nopl   0x0(%rax,%rax,1)
mov    %r15,%rdi
movapd %xmm5,%xmm0
mov    %rdx,%r12
mov    %rsi,%r14
call   *(%rdx,%r13,8)
movsd  -0x80(%rbp),%xmm5
movsd  -0x50(%rbp),%xmm4
mov    %r14,%rsi
mov    %r12,%rdx
mov    -0x78(%rbp),%r11
mulsd  %xmm4,%xmm0
movsd  %xmm0,(%r11,%r13,8)
add    $0x1,%r13
cmp    %r13,%rbx
jne    1360 <rungekutta4+0x250>
mov    %rsp,%rdx
sub    -0x60(%rbp),%rdx
mov    %rdx,%rsp
mov    -0x34(%rbp),%r8d
test   %r8d,%r8d
mov    -0x58(%rbp),%rbx
jle    1769 <rungekutta4+0x659>
cmp    $0x4,%r8d
jae    13c4 <rungekutta4+0x2b4>
xor    %eax,%eax
mov    -0x30(%rbp),%rcx
jmp    14bf <rungekutta4+0x3af>
mov    -0x30(%rbp),%rax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rcx
mov    %rcx,%r9
shr    $0x2,%r9
add    $0x1,%r9
test   %rcx,%rcx
je     1605 <rungekutta4+0x4f5>
mov    %r9,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %ecx,%ecx
movapd 0xc0c(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd (%rbx,%rcx,8),%xmm1
movupd 0x10(%rbx,%rcx,8),%xmm2
movapd (%r11,%rcx,8),%xmm3
mulpd  %xmm0,%xmm3
addpd  %xmm1,%xmm3
movapd 0x10(%r11,%rcx,8),%xmm1
mulpd  %xmm0,%xmm1
addpd  %xmm2,%xmm1
movapd %xmm3,(%r15,%rcx,8)
movapd %xmm1,0x10(%r15,%rcx,8)
movupd 0x20(%rbx,%rcx,8),%xmm1
movupd 0x30(%rbx,%rcx,8),%xmm2
movapd 0x20(%r11,%rcx,8),%xmm3
mulpd  %xmm0,%xmm3
addpd  %xmm1,%xmm3
movapd 0x30(%r11,%rcx,8),%xmm1
mulpd  %xmm0,%xmm1
addpd  %xmm2,%xmm1
movapd %xmm3,0x20(%r15,%rcx,8)
movapd %xmm1,0x30(%r15,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rdi
jne    1400 <rungekutta4+0x2f0>
test   $0x1,%r9b
je     14b6 <rungekutta4+0x3a6>
movupd (%rbx,%rcx,8),%xmm0
movupd 0x10(%rbx,%rcx,8),%xmm1
movapd 0xb70(%rip),%xmm2
movapd (%r11,%rcx,8),%xmm3
mulpd  %xmm2,%xmm3
mulpd  0x10(%r11,%rcx,8),%xmm2
addpd  %xmm0,%xmm3
addpd  %xmm1,%xmm2
movapd %xmm3,(%r15,%rcx,8)
movapd %xmm2,0x10(%r15,%rcx,8)
mov    -0x30(%rbp),%rcx
cmp    %rcx,%rax
je     14ee <rungekutta4+0x3de>
movsd  0xb59(%rip),%xmm0
nopw   0x0(%rax,%rax,1)
movsd  (%r11,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rbx,%rax,8),%xmm1
movsd  %xmm1,(%r15,%rax,8)
add    $0x1,%rax
cmp    %rax,%rcx
jne    14d0 <rungekutta4+0x3c0>
test   %r8d,%r8d
jle    1769 <rungekutta4+0x659>
xor    %ebx,%ebx
mov    %r15,-0x68(%rbp)
mov    -0x30(%rbp),%r13
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    -0x68(%rbp),%rdi
movapd %xmm5,%xmm0
mov    %rdx,%r15
call   *(%r12,%rbx,8)
movsd  -0x80(%rbp),%xmm5
mov    %r15,%rdx
movsd  -0x50(%rbp),%xmm2
mov    %r14,%rsi
mulsd  %xmm2,%xmm0
movsd  %xmm0,(%r15,%rbx,8)
add    $0x1,%rbx
cmp    %rbx,%r13
jne    1510 <rungekutta4+0x400>
mov    %rsp,%r13
sub    -0x60(%rbp),%r13
mov    %r13,%rsp
mov    -0x34(%rbp),%r9d
test   %r9d,%r9d
mov    -0x68(%rbp),%r10
mov    -0x58(%rbp),%rdi
jle    1769 <rungekutta4+0x659>
cmp    $0x4,%r9d
jae    1587 <rungekutta4+0x477>
xor    %eax,%eax
mov    -0x30(%rbp),%rcx
jmp    1650 <rungekutta4+0x540>
xor    %ecx,%ecx
mov    -0x40(%rbp),%rbx
test   $0x1,%r9b
jne    12bd <rungekutta4+0x1ad>
jmp    12f6 <rungekutta4+0x1e6>
mov    -0x30(%rbp),%rax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rcx
mov    %rcx,%r8
shr    $0x2,%r8
add    $0x1,%r8
test   %rcx,%rcx
je     1616 <rungekutta4+0x506>
mov    %r8,%rbx
and    $0xfffffffffffffffe,%rbx
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movupd (%rdi,%rcx,8),%xmm0
movupd 0x10(%rdi,%rcx,8),%xmm1
addpd  (%rdx,%rcx,8),%xmm0
addpd  0x10(%rdx,%rcx,8),%xmm1
movapd %xmm0,(%r10,%rcx,8)
movapd %xmm1,0x10(%r10,%rcx,8)
movupd 0x20(%rdi,%rcx,8),%xmm0
movupd 0x30(%rdi,%rcx,8),%xmm1
addpd  0x20(%rdx,%rcx,8),%xmm0
addpd  0x30(%rdx,%rcx,8),%xmm1
movapd %xmm0,0x20(%r10,%rcx,8)
movapd %xmm1,0x30(%r10,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rbx
jne    15b0 <rungekutta4+0x4a0>
jmp    1618 <rungekutta4+0x508>
xor    %ecx,%ecx
test   $0x1,%r9b
jne    147d <rungekutta4+0x36d>
jmp    14b6 <rungekutta4+0x3a6>
xor    %ecx,%ecx
test   $0x1,%r8b
je     1641 <rungekutta4+0x531>
movupd (%rdi,%rcx,8),%xmm0
movupd 0x10(%rdi,%rcx,8),%xmm1
addpd  (%rdx,%rcx,8),%xmm0
addpd  0x10(%rdx,%rcx,8),%xmm1
movapd %xmm0,(%r10,%rcx,8)
movapd %xmm1,0x10(%r10,%rcx,8)
mov    -0x30(%rbp),%rcx
cmp    %rcx,%rax
je     1669 <rungekutta4+0x559>
nopw   0x0(%rax,%rax,1)
movsd  (%rdi,%rax,8),%xmm0
addsd  (%rdx,%rax,8),%xmm0
movsd  %xmm0,(%r10,%rax,8)
add    $0x1,%rax
cmp    %rax,%rcx
jne    1650 <rungekutta4+0x540>
test   %r9d,%r9d
jle    1769 <rungekutta4+0x659>
movsd  -0x48(%rbp),%xmm1
addsd  %xmm2,%xmm1
xor    %ebx,%ebx
movsd  %xmm1,-0x48(%rbp)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    -0x68(%rbp),%rdi
movapd %xmm1,%xmm0
call   *(%r12,%rbx,8)
movsd  -0x48(%rbp),%xmm1
mov    %r14,%rsi
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,0x0(%r13,%rbx,8)
add    $0x1,%rbx
cmp    %rbx,-0x30(%rbp)
jne    1690 <rungekutta4+0x580>
mov    -0x34(%rbp),%eax
test   %eax,%eax
mov    -0x78(%rbp),%rdi
mov    -0x58(%rbp),%rbx
jle    1769 <rungekutta4+0x659>
cmp    $0x1,%eax
je     16f4 <rungekutta4+0x5e4>
mov    -0x30(%rbp),%r8
lea    (%rbx,%r8,8),%rax
mov    -0x70(%rbp),%rcx
cmp    %rcx,%rax
jbe    1778 <rungekutta4+0x668>
lea    (%rcx,%r8,8),%rax
cmp    %rbx,%rax
jbe    1778 <rungekutta4+0x668>
xor    %r8d,%r8d
mov    -0x70(%rbp),%rax
lea    (%rax,%r8,8),%r9
lea    0x0(,%r8,8),%rdx
add    %r13,%rdx
lea    (%r15,%r8,8),%rsi
lea    (%rdi,%r8,8),%rdi
mov    -0x40(%rbp),%rax
lea    (%rax,%r8,8),%rax
lea    (%rbx,%r8,8),%rbx
sub    %r8,-0x30(%rbp)
xor    %ecx,%ecx
movsd  0x8fc(%rip),%xmm0
nopl   0x0(%rax)
movsd  (%rdi,%rcx,8),%xmm1
addsd  %xmm1,%xmm1
addsd  (%rax,%rcx,8),%xmm1
movsd  (%rsi,%rcx,8),%xmm2
addsd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
addsd  (%rdx,%rcx,8),%xmm2
divsd  %xmm0,%xmm2
addsd  (%rbx,%rcx,8),%xmm2
movsd  %xmm2,(%r9,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,-0x30(%rbp)
jne    1730 <rungekutta4+0x620>
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
and    $0xfffffffe,%r8d
xor    %eax,%eax
movapd 0x88a(%rip),%xmm0
mov    -0x40(%rbp),%rdx
movupd (%rbx,%rax,8),%xmm1
movapd (%rdi,%rax,8),%xmm2
addpd  %xmm2,%xmm2
addpd  (%rdx,%rax,8),%xmm2
movapd (%r15,%rax,8),%xmm3
addpd  %xmm3,%xmm3
addpd  %xmm2,%xmm3
addpd  0x0(%r13,%rax,8),%xmm3
divpd  %xmm0,%xmm3
addpd  %xmm1,%xmm3
movupd %xmm3,(%rcx,%rax,8)
add    $0x2,%rax
cmp    %rax,%r8
jne    178a <rungekutta4+0x67a>
cmp    -0x30(%rbp),%r8
je     1769 <rungekutta4+0x659>
jmp    16f7 <rungekutta4+0x5e7>

LLVM IR (-O0):
define void @rungekutta4(double* %0, double* %1, i32 %2, double %3, double %4, double* %5, double (double*, double, double*)** %6) {
%8 = alloca double*
%9 = alloca double*
%10 = alloca i32
%11 = alloca double
%12 = alloca double
%13 = alloca double*
%14 = alloca double (double*, double, double*)**
%15 = alloca i32
%16 = alloca i8*
%17 = alloca i64
%18 = alloca i64
%19 = alloca i64
%20 = alloca i64
%21 = alloca i64
store double* %0, double** %8
store double* %1, double** %9
store i32 %2, i32* %10
store double %3, double* %11
store double %4, double* %12
store double* %5, double** %13
store double (double*, double, double*)** %6, double (double*, double, double*)*** %14
%22 = load i32, i32* %10
%23 = zext i32 %22 to i64
store i32 0, i32* %15
%24 = load i32, i32* %10
%25 = zext i32 %24 to i64
%26 = call i8* @llvm.stacksave()
store i8* %26, i8** %16
%27 = alloca double, i64 %25
store i64 %25, i64* %17
%28 = load i32, i32* %10
%29 = zext i32 %28 to i64
%30 = alloca double, i64 %29
store i64 %29, i64* %18
store i32 0, i32* %15
br label %31
31: ; preds = %44, %7
%32 = load i32, i32* %15
%33 = load i32, i32* %10
%34 = icmp slt i32 %32, %33
br i1 %34, label %35, label %47
35: ; preds = %31
%36 = load double*, double** %8
%37 = load i32, i32* %15
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds double, double* %36, i64 %38
%40 = load double, double* %39
%41 = load i32, i32* %15
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds double, double* %27, i64 %42
store double %40, double* %43
br label %44
44: ; preds = %35
%45 = load i32, i32* %15
%46 = add nsw i32 %45, 1
store i32 %46, i32* %15
br label %31
47: ; preds = %31
store i32 0, i32* %15
br label %48
48: ; preds = %66, %47
%49 = load i32, i32* %15
%50 = load i32, i32* %10
%51 = icmp slt i32 %49, %50
br i1 %51, label %52, label %69
52: ; preds = %48
%53 = load double, double* %12
%54 = load double (double*, double, double*)**, double (double*, double, double*)*** %14
%55 = load i32, i32* %15
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds double (double*, double, double*)*, double (double*, double, double*)** %54, i64 %56
%58 = load double (double*, double, double*)*, double (double*, double, double*)** %57
%59 = load double, double* %11
%60 = load double*, double** %13
%61 = call double %58(double* %27, double %59, double* %60)
%62 = fmul double %53, %61
%63 = load i32, i32* %15
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds double, double* %30, i64 %64
store double %62, double* %65
br label %66
66: ; preds = %52
%67 = load i32, i32* %15
%68 = add nsw i32 %67, 1
store i32 %68, i32* %15
br label %48
69: ; preds = %48
%70 = load i32, i32* %10
%71 = zext i32 %70 to i64
%72 = alloca double, i64 %71
store i64 %71, i64* %19
store i32 0, i32* %15
br label %73
73: ; preds = %92, %69
%74 = load i32, i32* %15
%75 = load i32, i32* %10
%76 = icmp slt i32 %74, %75
br i1 %76, label %77, label %95
77: ; preds = %73
%78 = load double*, double** %8
%79 = load i32, i32* %15
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds double, double* %78, i64 %80
%82 = load double, double* %81
%83 = load i32, i32* %15
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds double, double* %30, i64 %84
%86 = load double, double* %85
%87 = fdiv double %86, 2.000000e+00
%88 = fadd double %82, %87
%89 = load i32, i32* %15
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds double, double* %27, i64 %90
store double %88, double* %91
br label %92
92: ; preds = %77
%93 = load i32, i32* %15
%94 = add nsw i32 %93, 1
store i32 %94, i32* %15
br label %73
95: ; preds = %73
store i32 0, i32* %15
br label %96
96: ; preds = %117, %95
%97 = load i32, i32* %15
%98 = load i32, i32* %10
%99 = icmp slt i32 %97, %98
br i1 %99, label %100, label %120
100: ; preds = %96
%101 = load double, double* %12
%102 = load double (double*, double, double*)**, double (double*, double, double*)*** %14
%103 = load i32, i32* %15
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds double (double*, double, double*)*, double (double*, double, double*)** %102, i64 %104
%106 = load double (double*, double, double*)*, double (double*, double, double*)** %105
%107 = load double, double* %11
%108 = load double, double* %12
%109 = fdiv double %108, 2.000000e+00
%110 = fadd double %107, %109
%111 = load double*, double** %13
%112 = call double %106(double* %27, double %110, double* %111)
%113 = fmul double %101, %112
%114 = load i32, i32* %15
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds double, double* %72, i64 %115
store double %113, double* %116
br label %117
117: ; preds = %100
%118 = load i32, i32* %15
%119 = add nsw i32 %118, 1
store i32 %119, i32* %15
br label %96
120: ; preds = %96
%121 = load i32, i32* %10
%122 = zext i32 %121 to i64
%123 = alloca double, i64 %122
store i64 %122, i64* %20
store i32 0, i32* %15
br label %124
124: ; preds = %143, %120
%125 = load i32, i32* %15
%126 = load i32, i32* %10
%127 = icmp slt i32 %125, %126
br i1 %127, label %128, label %146
128: ; preds = %124
%129 = load double*, double** %8
%130 = load i32, i32* %15
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds double, double* %129, i64 %131
%133 = load double, double* %132
%134 = load i32, i32* %15
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds double, double* %72, i64 %135
%137 = load double, double* %136
%138 = fdiv double %137, 2.000000e+00
%139 = fadd double %133, %138
%140 = load i32, i32* %15
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds double, double* %27, i64 %141
store double %139, double* %142
br label %143
143: ; preds = %128
%144 = load i32, i32* %15
%145 = add nsw i32 %144, 1
store i32 %145, i32* %15
br label %124
146: ; preds = %124
store i32 0, i32* %15
br label %147
147: ; preds = %168, %146
%148 = load i32, i32* %15
%149 = load i32, i32* %10
%150 = icmp slt i32 %148, %149
br i1 %150, label %151, label %171
151: ; preds = %147
%152 = load double, double* %12
%153 = load double (double*, double, double*)**, double (double*, double, double*)*** %14
%154 = load i32, i32* %15
%155 = sext i32 %154 to i64
%156 = getelementptr inbounds double (double*, double, double*)*, double (double*, double, double*)** %153, i64 %155
%157 = load double (double*, double, double*)*, double (double*, double, double*)** %156
%158 = load double, double* %11
%159 = load double, double* %12
%160 = fdiv double %159, 2.000000e+00
%161 = fadd double %158, %160
%162 = load double*, double** %13
%163 = call double %157(double* %27, double %161, double* %162)
%164 = fmul double %152, %163
%165 = load i32, i32* %15
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds double, double* %123, i64 %166
store double %164, double* %167
br label %168
168: ; preds = %151
%169 = load i32, i32* %15
%170 = add nsw i32 %169, 1
store i32 %170, i32* %15
br label %147
171: ; preds = %147
%172 = load i32, i32* %10
%173 = zext i32 %172 to i64
%174 = alloca double, i64 %173
store i64 %173, i64* %21
store i32 0, i32* %15
br label %175
175: ; preds = %193, %171
%176 = load i32, i32* %15
%177 = load i32, i32* %10
%178 = icmp slt i32 %176, %177
br i1 %178, label %179, label %196
179: ; preds = %175
%180 = load double*, double** %8
%181 = load i32, i32* %15
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds double, double* %180, i64 %182
%184 = load double, double* %183
%185 = load i32, i32* %15
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds double, double* %123, i64 %186
%188 = load double, double* %187
%189 = fadd double %184, %188
%190 = load i32, i32* %15
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds double, double* %27, i64 %191
store double %189, double* %192
br label %193
193: ; preds = %179
%194 = load i32, i32* %15
%195 = add nsw i32 %194, 1
store i32 %195, i32* %15
br label %175
196: ; preds = %175
store i32 0, i32* %15
br label %197
197: ; preds = %217, %196
%198 = load i32, i32* %15
%199 = load i32, i32* %10
%200 = icmp slt i32 %198, %199
br i1 %200, label %201, label %220
201: ; preds = %197
%202 = load double, double* %12
%203 = load double (double*, double, double*)**, double (double*, double, double*)*** %14
%204 = load i32, i32* %15
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds double (double*, double, double*)*, double (double*, double, double*)** %203, i64 %205
%207 = load double (double*, double, double*)*, double (double*, double, double*)** %206
%208 = load double, double* %11
%209 = load double, double* %12
%210 = fadd double %208, %209
%211 = load double*, double** %13
%212 = call double %207(double* %27, double %210, double* %211)
%213 = fmul double %202, %212
%214 = load i32, i32* %15
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds double, double* %174, i64 %215
store double %213, double* %216
br label %217
217: ; preds = %201
%218 = load i32, i32* %15
%219 = add nsw i32 %218, 1
store i32 %219, i32* %15
br label %197
220: ; preds = %197
store i32 0, i32* %15
br label %221
221: ; preds = %256, %220
%222 = load i32, i32* %15
%223 = load i32, i32* %10
%224 = icmp slt i32 %222, %223
br i1 %224, label %225, label %259
225: ; preds = %221
%226 = load double*, double** %8
%227 = load i32, i32* %15
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds double, double* %226, i64 %228
%230 = load double, double* %229
%231 = load i32, i32* %15
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds double, double* %30, i64 %232
%234 = load double, double* %233
%235 = load i32, i32* %15
%236 = sext i32 %235 to i64
%237 = getelementptr inbounds double, double* %72, i64 %236
%238 = load double, double* %237
%239 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %238, double %234)
%240 = load i32, i32* %15
%241 = sext i32 %240 to i64
%242 = getelementptr inbounds double, double* %123, i64 %241
%243 = load double, double* %242
%244 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %243, double %239)
%245 = load i32, i32* %15
%246 = sext i32 %245 to i64
%247 = getelementptr inbounds double, double* %174, i64 %246
%248 = load double, double* %247
%249 = fadd double %244, %248
%250 = fdiv double %249, 6.000000e+00
%251 = fadd double %230, %250
%252 = load double*, double** %9
%253 = load i32, i32* %15
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds double, double* %252, i64 %254
store double %251, double* %255
br label %256
256: ; preds = %225
%257 = load i32, i32* %15
%258 = add nsw i32 %257, 1
store i32 %258, i32* %15
br label %221
259: ; preds = %221
%260 = load i8*, i8** %16
ret void
}

LLVM IR (-O2):
define void @rungekutta4(double* nocapture %0, double* nocapture writeonly %1, i32 %2, double %3, double %4, double* %5, double (double*, double, double*)** nocapture %6) {
%8 = zext i32 %2 to i64
%9 = alloca double, i64 %8
%10 = alloca double, i64 %8
%11 = icmp sgt i32 %2, 0
br i1 %11, label %12, label %414
12: ; preds = %7
%13 = bitcast double* %9 to i8*
%14 = bitcast double* %0 to i8*
%15 = shl nuw nsw i64 %8, 3
br label %16
16: ; preds = %12, %16
%17 = phi i64 [ 0, %12 ], [ %23, %16 ]
%18 = getelementptr inbounds double (double*, double, double*)*, double (double*, double, double*)** %6, i64 %17
%19 = load double (double*, double, double*)*, double (double*, double, double*)** %18
%20 = call double %19(double* %9, double %3, double* %5)
%21 = fmul double %20, %4
%22 = getelementptr inbounds double, double* %10, i64 %17
store double %21, double* %22
%23 = add nuw nsw i64 %17, 1
%24 = icmp eq i64 %23, %8
br i1 %24, label %25, label %16
25: ; preds = %16
%26 = alloca double, i64 %8
br i1 %11, label %27, label %414
27: ; preds = %25
%28 = icmp ult i32 %2, 4
br i1 %28, label %111, label %29
29: ; preds = %27
%30 = and i64 %8, 4294967292
%31 = add nsw i64 %30, -4
%32 = lshr exact i64 %31, 2
%33 = add nuw nsw i64 %32, 1
%34 = and i64 %33, 1
%35 = icmp eq i64 %31, 0
br i1 %35, label %85, label %36
36: ; preds = %29
%37 = and i64 %33, 9223372036854775806
br label %38
38: ; preds = %38, %36
%39 = phi i64 [ 0, %36 ], [ %82, %38 ]
%40 = phi i64 [ 0, %36 ], [ %83, %38 ]
%41 = getelementptr inbounds double, double* %0, i64 %39
%42 = bitcast double* %41 to <2 x double>*
%43 = load <2 x double>, <2 x double>* %42
%44 = getelementptr inbounds double, double* %41, i64 2
%45 = bitcast double* %44 to <2 x double>*
%46 = load <2 x double>, <2 x double>* %45
%47 = getelementptr inbounds double, double* %10, i64 %39
%48 = bitcast double* %47 to <2 x double>*
%49 = load <2 x double>, <2 x double>* %48
%50 = getelementptr inbounds double, double* %47, i64 2
%51 = bitcast double* %50 to <2 x double>*
%52 = load <2 x double>, <2 x double>* %51
%53 = fmul <2 x double> %49, <double 5.000000e-01, double 5.000000e-01>
%54 = fmul <2 x double> %52, <double 5.000000e-01, double 5.000000e-01>
%55 = fadd <2 x double> %43, %53
%56 = fadd <2 x double> %46, %54
%57 = getelementptr inbounds double, double* %9, i64 %39
%58 = bitcast double* %57 to <2 x double>*
store <2 x double> %55, <2 x double>* %58
%59 = getelementptr inbounds double, double* %57, i64 2
%60 = bitcast double* %59 to <2 x double>*
store <2 x double> %56, <2 x double>* %60
%61 = or i64 %39, 4
%62 = getelementptr inbounds double, double* %0, i64 %61
%63 = bitcast double* %62 to <2 x double>*
%64 = load <2 x double>, <2 x double>* %63
%65 = getelementptr inbounds double, double* %62, i64 2
%66 = bitcast double* %65 to <2 x double>*
%67 = load <2 x double>, <2 x double>* %66
%68 = getelementptr inbounds double, double* %10, i64 %61
%69 = bitcast double* %68 to <2 x double>*
%70 = load <2 x double>, <2 x double>* %69
%71 = getelementptr inbounds double, double* %68, i64 2
%72 = bitcast double* %71 to <2 x double>*
%73 = load <2 x double>, <2 x double>* %72
%74 = fmul <2 x double> %70, <double 5.000000e-01, double 5.000000e-01>
%75 = fmul <2 x double> %73, <double 5.000000e-01, double 5.000000e-01>
%76 = fadd <2 x double> %64, %74
%77 = fadd <2 x double> %67, %75
%78 = getelementptr inbounds double, double* %9, i64 %61
%79 = bitcast double* %78 to <2 x double>*
store <2 x double> %76, <2 x double>* %79
%80 = getelementptr inbounds double, double* %78, i64 2
%81 = bitcast double* %80 to <2 x double>*
store <2 x double> %77, <2 x double>* %81
%82 = add nuw i64 %39, 8
%83 = add i64 %40, 2
%84 = icmp eq i64 %83, %37
br i1 %84, label %85, label %38
85: ; preds = %38, %29
%86 = phi i64 [ 0, %29 ], [ %82, %38 ]
%87 = icmp eq i64 %34, 0
br i1 %87, label %109, label %88
88: ; preds = %85
%89 = getelementptr inbounds double, double* %0, i64 %86
%90 = bitcast double* %89 to <2 x double>*
%91 = load <2 x double>, <2 x double>* %90
%92 = getelementptr inbounds double, double* %89, i64 2
%93 = bitcast double* %92 to <2 x double>*
%94 = load <2 x double>, <2 x double>* %93
%95 = getelementptr inbounds double, double* %10, i64 %86
%96 = bitcast double* %95 to <2 x double>*
%97 = load <2 x double>, <2 x double>* %96
%98 = getelementptr inbounds double, double* %95, i64 2
%99 = bitcast double* %98 to <2 x double>*
%100 = load <2 x double>, <2 x double>* %99
%101 = fmul <2 x double> %97, <double 5.000000e-01, double 5.000000e-01>
%102 = fmul <2 x double> %100, <double 5.000000e-01, double 5.000000e-01>
%103 = fadd <2 x double> %91, %101
%104 = fadd <2 x double> %94, %102
%105 = getelementptr inbounds double, double* %9, i64 %86
%106 = bitcast double* %105 to <2 x double>*
store <2 x double> %103, <2 x double>* %106
%107 = getelementptr inbounds double, double* %105, i64 2
%108 = bitcast double* %107 to <2 x double>*
store <2 x double> %104, <2 x double>* %108
br label %109
109: ; preds = %85, %88
%110 = icmp eq i64 %30, %8
br i1 %110, label %113, label %111
111: ; preds = %27, %109
%112 = phi i64 [ 0, %27 ], [ %30, %109 ]
br label %117
113: ; preds = %117, %109
br i1 %11, label %114, label %414
114: ; preds = %113
%115 = fmul double %4, 5.000000e-01
%116 = fadd double %115, %3
br label %128
117: ; preds = %111, %117
%118 = phi i64 [ %126, %117 ], [ %112, %111 ]
%119 = getelementptr inbounds double, double* %0, i64 %118
%120 = load double, double* %119
%121 = getelementptr inbounds double, double* %10, i64 %118
%122 = load double, double* %121
%123 = fmul double %122, 5.000000e-01
%124 = fadd double %120, %123
%125 = getelementptr inbounds double, double* %9, i64 %118
store double %124, double* %125
%126 = add nuw nsw i64 %118, 1
%127 = icmp eq i64 %126, %8
br i1 %127, label %113, label %117
128: ; preds = %114, %128
%129 = phi i64 [ 0, %114 ], [ %135, %128 ]
%130 = getelementptr inbounds double (double*, double, double*)*, double (double*, double, double*)** %6, i64 %129
%131 = load double (double*, double, double*)*, double (double*, double, double*)** %130
%132 = call double %131(double* %9, double %116, double* %5)
%133 = fmul double %132, %4
%134 = getelementptr inbounds double, double* %26, i64 %129
store double %133, double* %134
%135 = add nuw nsw i64 %129, 1
%136 = icmp eq i64 %135, %8
br i1 %136, label %137, label %128
137: ; preds = %128
%138 = alloca double, i64 %8
br i1 %11, label %139, label %414
139: ; preds = %137
%140 = icmp ult i32 %2, 4
br i1 %140, label %223, label %141
141: ; preds = %139
%142 = and i64 %8, 4294967292
%143 = add nsw i64 %142, -4
%144 = lshr exact i64 %143, 2
%145 = add nuw nsw i64 %144, 1
%146 = and i64 %145, 1
%147 = icmp eq i64 %143, 0
br i1 %147, label %197, label %148
148: ; preds = %141
%149 = and i64 %145, 9223372036854775806
br label %150
150: ; preds = %150, %148
%151 = phi i64 [ 0, %148 ], [ %194, %150 ]
%152 = phi i64 [ 0, %148 ], [ %195, %150 ]
%153 = getelementptr inbounds double, double* %0, i64 %151
%154 = bitcast double* %153 to <2 x double>*
%155 = load <2 x double>, <2 x double>* %154
%156 = getelementptr inbounds double, double* %153, i64 2
%157 = bitcast double* %156 to <2 x double>*
%158 = load <2 x double>, <2 x double>* %157
%159 = getelementptr inbounds double, double* %26, i64 %151
%160 = bitcast double* %159 to <2 x double>*
%161 = load <2 x double>, <2 x double>* %160
%162 = getelementptr inbounds double, double* %159, i64 2
%163 = bitcast double* %162 to <2 x double>*
%164 = load <2 x double>, <2 x double>* %163
%165 = fmul <2 x double> %161, <double 5.000000e-01, double 5.000000e-01>
%166 = fmul <2 x double> %164, <double 5.000000e-01, double 5.000000e-01>
%167 = fadd <2 x double> %155, %165
%168 = fadd <2 x double> %158, %166
%169 = getelementptr inbounds double, double* %9, i64 %151
%170 = bitcast double* %169 to <2 x double>*
store <2 x double> %167, <2 x double>* %170
%171 = getelementptr inbounds double, double* %169, i64 2
%172 = bitcast double* %171 to <2 x double>*
store <2 x double> %168, <2 x double>* %172
%173 = or i64 %151, 4
%174 = getelementptr inbounds double, double* %0, i64 %173
%175 = bitcast double* %174 to <2 x double>*
%176 = load <2 x double>, <2 x double>* %175
%177 = getelementptr inbounds double, double* %174, i64 2
%178 = bitcast double* %177 to <2 x double>*
%179 = load <2 x double>, <2 x double>* %178
%180 = getelementptr inbounds double, double* %26, i64 %173
%181 = bitcast double* %180 to <2 x double>*
%182 = load <2 x double>, <2 x double>* %181
%183 = getelementptr inbounds double, double* %180, i64 2
%184 = bitcast double* %183 to <2 x double>*
%185 = load <2 x double>, <2 x double>* %184
%186 = fmul <2 x double> %182, <double 5.000000e-01, double 5.000000e-01>
%187 = fmul <2 x double> %185, <double 5.000000e-01, double 5.000000e-01>
%188 = fadd <2 x double> %176, %186
%189 = fadd <2 x double> %179, %187
%190 = getelementptr inbounds double, double* %9, i64 %173
%191 = bitcast double* %190 to <2 x double>*
store <2 x double> %188, <2 x double>* %191
%192 = getelementptr inbounds double, double* %190, i64 2
%193 = bitcast double* %192 to <2 x double>*
store <2 x double> %189, <2 x double>* %193
%194 = add nuw i64 %151, 8
%195 = add i64 %152, 2
%196 = icmp eq i64 %195, %149
br i1 %196, label %197, label %150
197: ; preds = %150, %141
%198 = phi i64 [ 0, %141 ], [ %194, %150 ]
%199 = icmp eq i64 %146, 0
br i1 %199, label %221, label %200
200: ; preds = %197
%201 = getelementptr inbounds double, double* %0, i64 %198
%202 = bitcast double* %201 to <2 x double>*
%203 = load <2 x double>, <2 x double>* %202
%204 = getelementptr inbounds double, double* %201, i64 2
%205 = bitcast double* %204 to <2 x double>*
%206 = load <2 x double>, <2 x double>* %205
%207 = getelementptr inbounds double, double* %26, i64 %198
%208 = bitcast double* %207 to <2 x double>*
%209 = load <2 x double>, <2 x double>* %208
%210 = getelementptr inbounds double, double* %207, i64 2
%211 = bitcast double* %210 to <2 x double>*
%212 = load <2 x double>, <2 x double>* %211
%213 = fmul <2 x double> %209, <double 5.000000e-01, double 5.000000e-01>
%214 = fmul <2 x double> %212, <double 5.000000e-01, double 5.000000e-01>
%215 = fadd <2 x double> %203, %213
%216 = fadd <2 x double> %206, %214
%217 = getelementptr inbounds double, double* %9, i64 %198
%218 = bitcast double* %217 to <2 x double>*
store <2 x double> %215, <2 x double>* %218
%219 = getelementptr inbounds double, double* %217, i64 2
%220 = bitcast double* %219 to <2 x double>*
store <2 x double> %216, <2 x double>* %220
br label %221
221: ; preds = %197, %200
%222 = icmp eq i64 %142, %8
br i1 %222, label %225, label %223
223: ; preds = %139, %221
%224 = phi i64 [ 0, %139 ], [ %142, %221 ]
br label %229
225: ; preds = %229, %221
br i1 %11, label %226, label %414
226: ; preds = %225
%227 = fmul double %4, 5.000000e-01
%228 = fadd double %227, %3
br label %240
229: ; preds = %223, %229
%230 = phi i64 [ %238, %229 ], [ %224, %223 ]
%231 = getelementptr inbounds double, double* %0, i64 %230
%232 = load double, double* %231
%233 = getelementptr inbounds double, double* %26, i64 %230
%234 = load double, double* %233
%235 = fmul double %234, 5.000000e-01
%236 = fadd double %232, %235
%237 = getelementptr inbounds double, double* %9, i64 %230
store double %236, double* %237
%238 = add nuw nsw i64 %230, 1
%239 = icmp eq i64 %238, %8
br i1 %239, label %225, label %229
240: ; preds = %226, %240
%241 = phi i64 [ 0, %226 ], [ %247, %240 ]
%242 = getelementptr inbounds double (double*, double, double*)*, double (double*, double, double*)** %6, i64 %241
%243 = load double (double*, double, double*)*, double (double*, double, double*)** %242
%244 = call double %243(double* %9, double %228, double* %5)
%245 = fmul double %244, %4
%246 = getelementptr inbounds double, double* %138, i64 %241
store double %245, double* %246
%247 = add nuw nsw i64 %241, 1
%248 = icmp eq i64 %247, %8
br i1 %248, label %249, label %240
249: ; preds = %240
%250 = alloca double, i64 %8
br i1 %11, label %251, label %414
251: ; preds = %249
%252 = icmp ult i32 %2, 4
br i1 %252, label %329, label %253
253: ; preds = %251
%254 = and i64 %8, 4294967292
%255 = add nsw i64 %254, -4
%256 = lshr exact i64 %255, 2
%257 = add nuw nsw i64 %256, 1
%258 = and i64 %257, 1
%259 = icmp eq i64 %255, 0
br i1 %259, label %305, label %260
260: ; preds = %253
%261 = and i64 %257, 9223372036854775806
br label %262
262: ; preds = %262, %260
%263 = phi i64 [ 0, %260 ], [ %302, %262 ]
%264 = phi i64 [ 0, %260 ], [ %303, %262 ]
%265 = getelementptr inbounds double, double* %0, i64 %263
%266 = bitcast double* %265 to <2 x double>*
%267 = load <2 x double>, <2 x double>* %266
%268 = getelementptr inbounds double, double* %265, i64 2
%269 = bitcast double* %268 to <2 x double>*
%270 = load <2 x double>, <2 x double>* %269
%271 = getelementptr inbounds double, double* %138, i64 %263
%272 = bitcast double* %271 to <2 x double>*
%273 = load <2 x double>, <2 x double>* %272
%274 = getelementptr inbounds double, double* %271, i64 2
%275 = bitcast double* %274 to <2 x double>*
%276 = load <2 x double>, <2 x double>* %275
%277 = fadd <2 x double> %267, %273
%278 = fadd <2 x double> %270, %276
%279 = getelementptr inbounds double, double* %9, i64 %263
%280 = bitcast double* %279 to <2 x double>*
store <2 x double> %277, <2 x double>* %280
%281 = getelementptr inbounds double, double* %279, i64 2
%282 = bitcast double* %281 to <2 x double>*
store <2 x double> %278, <2 x double>* %282
%283 = or i64 %263, 4
%284 = getelementptr inbounds double, double* %0, i64 %283
%285 = bitcast double* %284 to <2 x double>*
%286 = load <2 x double>, <2 x double>* %285
%287 = getelementptr inbounds double, double* %284, i64 2
%288 = bitcast double* %287 to <2 x double>*
%289 = load <2 x double>, <2 x double>* %288
%290 = getelementptr inbounds double, double* %138, i64 %283
%291 = bitcast double* %290 to <2 x double>*
%292 = load <2 x double>, <2 x double>* %291
%293 = getelementptr inbounds double, double* %290, i64 2
%294 = bitcast double* %293 to <2 x double>*
%295 = load <2 x double>, <2 x double>* %294
%296 = fadd <2 x double> %286, %292
%297 = fadd <2 x double> %289, %295
%298 = getelementptr inbounds double, double* %9, i64 %283
%299 = bitcast double* %298 to <2 x double>*
store <2 x double> %296, <2 x double>* %299
%300 = getelementptr inbounds double, double* %298, i64 2
%301 = bitcast double* %300 to <2 x double>*
store <2 x double> %297, <2 x double>* %301
%302 = add nuw i64 %263, 8
%303 = add i64 %264, 2
%304 = icmp eq i64 %303, %261
br i1 %304, label %305, label %262
305: ; preds = %262, %253
%306 = phi i64 [ 0, %253 ], [ %302, %262 ]
%307 = icmp eq i64 %258, 0
br i1 %307, label %327, label %308
308: ; preds = %305
%309 = getelementptr inbounds double, double* %0, i64 %306
%310 = bitcast double* %309 to <2 x double>*
%311 = load <2 x double>, <2 x double>* %310
%312 = getelementptr inbounds double, double* %309, i64 2
%313 = bitcast double* %312 to <2 x double>*
%314 = load <2 x double>, <2 x double>* %313
%315 = getelementptr inbounds double, double* %138, i64 %306
%316 = bitcast double* %315 to <2 x double>*
%317 = load <2 x double>, <2 x double>* %316
%318 = getelementptr inbounds double, double* %315, i64 2
%319 = bitcast double* %318 to <2 x double>*
%320 = load <2 x double>, <2 x double>* %319
%321 = fadd <2 x double> %311, %317
%322 = fadd <2 x double> %314, %320
%323 = getelementptr inbounds double, double* %9, i64 %306
%324 = bitcast double* %323 to <2 x double>*
store <2 x double> %321, <2 x double>* %324
%325 = getelementptr inbounds double, double* %323, i64 2
%326 = bitcast double* %325 to <2 x double>*
store <2 x double> %322, <2 x double>* %326
br label %327
327: ; preds = %305, %308
%328 = icmp eq i64 %254, %8
br i1 %328, label %331, label %329
329: ; preds = %251, %327
%330 = phi i64 [ 0, %251 ], [ %254, %327 ]
br label %334
331: ; preds = %334, %327
br i1 %11, label %332, label %414
332: ; preds = %331
%333 = fadd double %3, %4
br label %385
334: ; preds = %329, %334
%335 = phi i64 [ %342, %334 ], [ %330, %329 ]
%336 = getelementptr inbounds double, double* %0, i64 %335
%337 = load double, double* %336
%338 = getelementptr inbounds double, double* %138, i64 %335
%339 = load double, double* %338
%340 = fadd double %337, %339
%341 = getelementptr inbounds double, double* %9, i64 %335
store double %340, double* %341
%342 = add nuw nsw i64 %335, 1
%343 = icmp eq i64 %342, %8
br i1 %343, label %331, label %334
344: ; preds = %385
br i1 %11, label %345, label %414
345: ; preds = %344
%346 = icmp eq i32 %2, 1
br i1 %346, label %383, label %347
347: ; preds = %345
%348 = getelementptr double, double* %1, i64 %8
%349 = getelementptr double, double* %0, i64 %8
%350 = icmp ugt double* %349, %1
%351 = icmp ugt double* %348, %0
%352 = and i1 %350, %351
br i1 %352, label %383, label %353
353: ; preds = %347
%354 = and i64 %8, 4294967294
br label %355
355: ; preds = %355, %353
%356 = phi i64 [ 0, %353 ], [ %379, %355 ]
%357 = getelementptr inbounds double, double* %0, i64 %356
%358 = bitcast double* %357 to <2 x double>*
%359 = load <2 x double>, <2 x double>* %358
%360 = getelementptr inbounds double, double* %10, i64 %356
%361 = bitcast double* %360 to <2 x double>*
%362 = load <2 x double>, <2 x double>* %361
%363 = getelementptr inbounds double, double* %26, i64 %356
%364 = bitcast double* %363 to <2 x double>*
%365 = load <2 x double>, <2 x double>* %364
%366 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %365, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> %362)
%367 = getelementptr inbounds double, double* %138, i64 %356
%368 = bitcast double* %367 to <2 x double>*
%369 = load <2 x double>, <2 x double>* %368
%370 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %369, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> %366)
%371 = getelementptr inbounds double, double* %250, i64 %356
%372 = bitcast double* %371 to <2 x double>*
%373 = load <2 x double>, <2 x double>* %372
%374 = fadd <2 x double> %370, %373
%375 = fdiv <2 x double> %374, <double 6.000000e+00, double 6.000000e+00>
%376 = fadd <2 x double> %359, %375
%377 = getelementptr inbounds double, double* %1, i64 %356
%378 = bitcast double* %377 to <2 x double>*
store <2 x double> %376, <2 x double>* %378
%379 = add nuw i64 %356, 2
%380 = icmp eq i64 %379, %354
br i1 %380, label %381, label %355
381: ; preds = %355
%382 = icmp eq i64 %354, %8
br i1 %382, label %414, label %383
383: ; preds = %347, %345, %381
%384 = phi i64 [ 0, %347 ], [ 0, %345 ], [ %354, %381 ]
br label %394
385: ; preds = %332, %385
%386 = phi i64 [ 0, %332 ], [ %392, %385 ]
%387 = getelementptr inbounds double (double*, double, double*)*, double (double*, double, double*)** %6, i64 %386
%388 = load double (double*, double, double*)*, double (double*, double, double*)** %387
%389 = call double %388(double* %9, double %333, double* %5)
%390 = fmul double %389, %4
%391 = getelementptr inbounds double, double* %250, i64 %386
store double %390, double* %391
%392 = add nuw nsw i64 %386, 1
%393 = icmp eq i64 %392, %8
br i1 %393, label %344, label %385
394: ; preds = %383, %394
%395 = phi i64 [ %412, %394 ], [ %384, %383 ]
%396 = getelementptr inbounds double, double* %0, i64 %395
%397 = load double, double* %396
%398 = getelementptr inbounds double, double* %10, i64 %395
%399 = load double, double* %398
%400 = getelementptr inbounds double, double* %26, i64 %395
%401 = load double, double* %400
%402 = call double @llvm.fmuladd.f64(double %401, double 2.000000e+00, double %399)
%403 = getelementptr inbounds double, double* %138, i64 %395
%404 = load double, double* %403
%405 = call double @llvm.fmuladd.f64(double %404, double 2.000000e+00, double %402)
%406 = getelementptr inbounds double, double* %250, i64 %395
%407 = load double, double* %406
%408 = fadd double %405, %407
%409 = fdiv double %408, 6.000000e+00
%410 = fadd double %397, %409
%411 = getelementptr inbounds double, double* %1, i64 %395
store double %410, double* %411
%412 = add nuw nsw i64 %395, 1
%413 = icmp eq i64 %412, %8
br i1 %413, label %414, label %394
414: ; preds = %394, %381, %7, %25, %113, %137, %225, %249, %331, %344
ret void
}