#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 */
double floor(double);
double fmod(double, double);
scalar_t__ malloc(int);
double pow(double, int);
int /*<<< orphan*/ printf(char *);
double *cell_parameters(double tau, double C, double D, double a, double Vi) {
  double segregation_timer = 0.0;
  double l = floor(D / tau);
  double k = floor((C + D) / tau);
  double volume = pow(2.0, (C + D + (a * tau)) / tau - 1.0);
  double ai = tau * (k + 1.0) - C - D;
  int terC = pow(2, l);
  int oriC = pow(2, k);
  double G0 = ((pow(2.0, k) - 1.0) * (tau / C)) +
              ((pow(2.0, k) * (fmod((C + D), tau)) / C)) -
              ((pow(2.0, l) - 1.0) * (tau / C)) -
              (pow(2.0, l) * ((fmod(D, tau)) / C));
  double *ain = (double *)malloc(sizeof(double) * ((int)k + 1));
  ain[(int)k] = tau * (k + 1.0) - C - D;
  int i;
  for (i = (int)k - 1; i >= 0; i--) {
    ain[i] = ain[i + 1] - tau;
  }
  for (i = 0; i < ((int)k + 1); i++) {
    if (ain[i] < 0.0 && ain[i] + C > 0.0) {
      if (C - (C + ain[i]) + a >= C) {
        terC = terC * 2;
      }
    } else if (ain[i] >= 0.0 && a > ain[i]) {
      if (a - ain[i] >= C) {
        terC = terC * 2;
      }
    }
  }
  double sum_An = 0.0;
  for (i = 0; i < ((int)k + 1); i++) {
    double dn = 0.0;
    double bn = 0.0;
    if (ain[i] < 0.0) {
      dn = 0.0;
    } else {
      dn = ain[i];
    }
    if (a < ain[i]) {
      bn = 0.0;
    } else if (ain[i] + C > a && a >= ain[i]) {
      bn = C;
    } else if (a >= ain[i] + C) {
      if (tau <= (C + D)) {
        if (ain[i] + C == 0.0) {
          bn = 0.0;
        } else {
          bn = (a - dn) * C / (ain[i] + C);
        }
      } else {
        bn = a - dn;
      }
    } else {
      printf("ERROR: Stupid calculation problem\n");
    }
    if (bn > 0.0) {
      sum_An += pow(2.0, i) * ((a - dn) / bn);
    }
  }
  double Ga = G0 + sum_An;
  double at = (1.0 - D / tau) * tau;
  if (a > at) {
    segregation_timer = a - at;
    if (segregation_timer >= D) {
      segregation_timer = 0.0;
      volume = volume / 2.0;
      terC = terC / 2;
      Ga = Ga / 2.0;
      oriC = oriC / 2;
    }
  }
  if (a > ai) {
    oriC = oriC * 2;
  }
  static double ret[6];
  ret[0] = volume;
  ret[1] = G0;
  ret[2] = Ga;
  ret[3] = segregation_timer;
  ret[4] = (double)oriC;
  if (terC > 8) {
    printf("ERROR: Cannot have more than 8 chromosomes\n");
  }
  ret[5] = (double)terC;
  return ret;
}


x86 assembly (clang, -O0):
<cell_parameters>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
divsd  -0x8(%rbp),%xmm0
call   1070 <floor@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
divsd  -0x8(%rbp),%xmm0
call   1070 <floor@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x10(%rbp),%xmm1
addsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x8(%rbp),%xmm0
movsd  0xe2e(%rip),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
movsd  0xe26(%rip),%xmm0
call   1060 <pow@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0xe07(%rip),%xmm2
addsd  -0x40(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
cvttsd2si -0x38(%rbp),%edi
movsd  0xdcf(%rip),%xmm0
call   1060 <pow@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x54(%rbp)
cvttsd2si -0x40(%rbp),%edi
movsd  0xdb6(%rip),%xmm0
call   1060 <pow@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x58(%rbp)
cvttsd2si -0x40(%rbp),%edi
movsd  0xd9d(%rip),%xmm0
call   1060 <pow@plt>
movsd  0xd88(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
cvttsd2si -0x40(%rbp),%edi
movsd  0xd65(%rip),%xmm0
call   1060 <pow@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
call   1040 <fmod@plt>
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
divsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
cvttsd2si -0x38(%rbp),%edi
movsd  0xd03(%rip),%xmm0
call   1060 <pow@plt>
movsd  -0xb0(%rbp),%xmm1
ff
movsd  0xce6(%rip),%xmm2
subsd  %xmm2,%xmm0
movsd  -0x8(%rbp),%xmm2
divsd  -0x10(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
cvttsd2si -0x38(%rbp),%edi
movsd  0xcac(%rip),%xmm0
call   1060 <pow@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
call   1040 <fmod@plt>
movsd  -0xa8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xa0(%rbp),%xmm0
ff
divsd  -0x10(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
cvttsd2si -0x40(%rbp),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1050 <malloc@plt>
mov    %rax,-0x68(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0xc26(%rip),%xmm2
addsd  -0x40(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x18(%rbp),%xmm0
mov    -0x68(%rbp),%rax
cvttsd2si -0x40(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
cvttsd2si -0x40(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x6c(%rbp)
cmpl   $0x0,-0x6c(%rbp)
jl     1460 <cell_parameters+0x310>
mov    -0x68(%rbp),%rax
mov    -0x6c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x8(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x6c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x6c(%rbp)
jmp    1424 <cell_parameters+0x2d4>
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cvttsd2si -0x40(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    155d <cell_parameters+0x40d>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
xorps  %xmm0,%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    14e8 <cell_parameters+0x398>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14e8 <cell_parameters+0x398>
movsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
subsd  %xmm1,%xmm0
addsd  -0x20(%rbp),%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     14e3 <cell_parameters+0x393>
mov    -0x54(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    154a <cell_parameters+0x3fa>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1545 <cell_parameters+0x3f5>
movsd  -0x20(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    1545 <cell_parameters+0x3f5>
movsd  -0x20(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     1540 <cell_parameters+0x3f0>
mov    -0x54(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1545 <cell_parameters+0x3f5>
jmp    154a <cell_parameters+0x3fa>
jmp    154f <cell_parameters+0x3ff>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1467 <cell_parameters+0x317>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cvttsd2si -0x40(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1764 <cell_parameters+0x614>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
xorps  %xmm0,%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    15b5 <cell_parameters+0x465>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    15c7 <cell_parameters+0x477>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x20(%rbp),%xmm1
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    15f3 <cell_parameters+0x4a3>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1708 <cell_parameters+0x5b8>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x10(%rbp),%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    163a <cell_parameters+0x4ea>
movsd  -0x20(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     163a <cell_parameters+0x4ea>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1703 <cell_parameters+0x5b3>
movsd  -0x20(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  -0x10(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jb     16f2 <cell_parameters+0x5a2>
movsd  -0x8(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     16db <cell_parameters+0x58b>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    16a9 <cell_parameters+0x559>
jp     16a9 <cell_parameters+0x559>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    16d6 <cell_parameters+0x586>
movsd  -0x20(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  -0x10(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    16ed <cell_parameters+0x59d>
movsd  -0x20(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    16fe <cell_parameters+0x5ae>
lea    0x917(%rip),%rdi
call   1030 <printf@plt>
jmp    1703 <cell_parameters+0x5b3>
jmp    1708 <cell_parameters+0x5b8>
movsd  -0x88(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1751 <cell_parameters+0x601>
mov    -0x6c(%rbp),%edi
movsd  0x8e0(%rip),%xmm0
call   1060 <pow@plt>
movsd  -0x20(%rbp),%xmm2
subsd  -0x80(%rbp),%xmm2
divsd  -0x88(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    1756 <cell_parameters+0x606>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    156c <cell_parameters+0x41c>
movsd  -0x60(%rbp),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x18(%rbp),%xmm1
divsd  -0x8(%rbp),%xmm1
movsd  0x878(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
ucomisd -0x98(%rbp),%xmm0
ff
jbe    1829 <cell_parameters+0x6d9>
movsd  -0x20(%rbp),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
ucomisd -0x18(%rbp),%xmm0
jb     1824 <cell_parameters+0x6d4>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0x825(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x54(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x54(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
movsd  0x7fe(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x58(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x58(%rbp)
jmp    1829 <cell_parameters+0x6d9>
movsd  -0x20(%rbp),%xmm0
ucomisd -0x50(%rbp),%xmm0
jbe    1842 <cell_parameters+0x6f2>
mov    -0x58(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x58(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,0x2811(%rip)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,0x280c(%rip)
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,0x2804(%rip)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,0x27ff(%rip)
cvtsi2sdl -0x58(%rbp),%xmm0
movsd  %xmm0,0x27fa(%rip)
cmpl   $0x8,-0x54(%rbp)
jle    189c <cell_parameters+0x74c>
lea    0x79c(%rip),%rdi
call   1030 <printf@plt>
cvtsi2sdl -0x54(%rbp),%xmm0
movsd  %xmm0,0x27df(%rip)
lea    0x27b0(%rip),%rax
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cell_parameters>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x80,%rsp
movsd  %xmm3,0x40(%rsp)
movsd  %xmm2,0x38(%rsp)
movsd  %xmm1,0x8(%rsp)
movapd %xmm0,%xmm1
movapd %xmm0,0x20(%rsp)
movapd %xmm2,%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x78(%rsp)
call   1070 <floor@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
addsd  0x38(%rsp),%xmm0
movsd  %xmm0,0x60(%rsp)
divsd  0x20(%rsp),%xmm0
call   1070 <floor@plt>
movsd  %xmm0,(%rsp)
movsd  0x40(%rsp),%xmm0
movapd 0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm0
addsd  0x60(%rsp),%xmm0
divsd  %xmm1,%xmm0
addsd  0xe28(%rip),%xmm0
cvttsd2si %xmm0,%edi
movsd  0xe24(%rip),%xmm0
call   1060 <pow@plt>
movsd  %xmm0,0x48(%rsp)
movsd  0xe19(%rip),%xmm0
addsd  (%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
subsd  0x38(%rsp),%xmm0
movsd  %xmm0,0x68(%rsp)
cvttsd2si 0x10(%rsp),%ebx
movsd  0xde6(%rip),%xmm0
mov    %ebx,%edi
call   1060 <pow@plt>
movsd  %xmm0,0x58(%rsp)
cvttsd2si (%rsp),%r14d
movsd  0xdcb(%rip),%xmm0
mov    %r14d,%edi
call   1060 <pow@plt>
movsd  %xmm0,0x70(%rsp)
movsd  0xdb5(%rip),%xmm0
mov    %r14d,%edi
call   1060 <pow@plt>
addsd  0xd9d(%rip),%xmm0
movsd  %xmm0,(%rsp)
movapd 0x20(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movapd %xmm0,0x10(%rsp)
movsd  0xd86(%rip),%xmm0
mov    %r14d,%edi
call   1060 <pow@plt>
movsd  %xmm0,0x50(%rsp)
movsd  0x60(%rsp),%xmm0
movaps 0x20(%rsp),%xmm1
call   1040 <fmod@plt>
mulsd  0x50(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  (%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movsd  0xd40(%rip),%xmm0
mov    %ebx,%edi
call   1060 <pow@plt>
addsd  0xd29(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movsd  0xd15(%rip),%xmm0
mov    %ebx,%edi
call   1060 <pow@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x38(%rsp),%xmm0
movapd 0x20(%rsp),%xmm1
call   1040 <fmod@plt>
divsd  0x8(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
lea    0x8(,%r14,8),%edi
call   1050 <malloc@plt>
movapd 0x20(%rsp),%xmm4
mov    %rax,%r15
movslq %r14d,%rax
movsd  0x68(%rsp),%xmm0
movsd  %xmm0,(%r15,%rax,8)
test   %eax,%eax
jle    137e <cell_parameters+0x22e>
mov    %r14d,%esi
cmp    $0x4,%r14d
jae    1564 <cell_parameters+0x414>
mov    %rsi,%rax
add    $0x1,%rax
lea    -0x2(%rax),%ecx
movsd  -0x8(%r15,%rax,8),%xmm0
subsd  %xmm4,%xmm0
movsd  %xmm0,(%r15,%rcx,8)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
ja     1360 <cell_parameters+0x210>
cvttsd2si 0x58(%rsp),%r12d
movsd  (%rsp),%xmm0
subsd  0x10(%rsp),%xmm0
movsd  %xmm0,(%rsp)
xorpd  %xmm2,%xmm2
test   %r14d,%r14d
movsd  0x40(%rsp),%xmm3
js     155b <cell_parameters+0x40b>
lea    0x1(%r14),%ebp
xor    %eax,%eax
xorpd  %xmm0,%xmm0
movsd  0x8(%rsp),%xmm5
jmp    13ed <cell_parameters+0x29d>
nopw   0x0(%rax,%rax,1)
ucomisd %xmm0,%xmm1
setae  %cl
ucomisd %xmm1,%xmm3
seta   %dl
and    %cl,%dl
movapd %xmm3,%xmm2
subsd  %xmm1,%xmm2
ucomisd %xmm5,%xmm2
setae  %cl
and    %dl,%cl
shl    %cl,%r12d
add    $0x1,%rax
cmp    %rax,%rbp
je     141e <cell_parameters+0x2ce>
movsd  (%r15,%rax,8),%xmm1
ucomisd %xmm1,%xmm0
jbe    13c0 <cell_parameters+0x270>
movapd %xmm1,%xmm2
addsd  %xmm5,%xmm2
ucomisd %xmm0,%xmm2
jbe    13c0 <cell_parameters+0x270>
movapd %xmm5,%xmm1
subsd  %xmm2,%xmm1
addsd  %xmm3,%xmm1
ucomisd %xmm5,%xmm1
jb     13e4 <cell_parameters+0x294>
add    %r12d,%r12d
jmp    13e4 <cell_parameters+0x294>
test   %r14d,%r14d
js     165b <cell_parameters+0x50b>
xor    %ebx,%ebx
lea    0xc23(%rip),%r14
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
jmp    145d <cell_parameters+0x30d>
mov    %r14,%rdi
call   1030 <puts@plt>
movsd  0x8(%rsp),%xmm5
movsd  0x40(%rsp),%xmm3
add    $0x1,%rbx
cmp    %rbx,%rbp
je     1546 <cell_parameters+0x3f6>
movsd  (%r15,%rbx,8),%xmm0
ucomisd %xmm3,%xmm0
ja     1450 <cell_parameters+0x300>
xorpd  %xmm2,%xmm2
maxsd  %xmm0,%xmm2
ucomisd %xmm0,%xmm3
addsd  %xmm5,%xmm0
jb     14e0 <cell_parameters+0x390>
ucomisd %xmm3,%xmm0
movapd %xmm5,%xmm1
jbe    14e0 <cell_parameters+0x390>
ucomisd 0xb93(%rip),%xmm1
jbe    1450 <cell_parameters+0x300>
movsd  0xb71(%rip),%xmm0
mov    %ebx,%edi
movsd  %xmm2,0x50(%rsp)
movsd  %xmm1,0x58(%rsp)
call   1060 <pow@plt>
movsd  0x8(%rsp),%xmm5
movsd  0x40(%rsp),%xmm3
movapd %xmm3,%xmm1
subsd  0x50(%rsp),%xmm1
divsd  0x58(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x10(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rsp)
jmp    1450 <cell_parameters+0x300>
nop
ucomisd %xmm0,%xmm3
jb     143c <cell_parameters+0x2ec>
movsd  0x60(%rsp),%xmm1
ucomisd 0x20(%rsp),%xmm1
jae    1513 <cell_parameters+0x3c3>
movapd %xmm3,%xmm1
subsd  %xmm2,%xmm1
ucomisd 0xb18(%rip),%xmm1
jbe    1450 <cell_parameters+0x300>
jmp    148f <cell_parameters+0x33f>
ucomisd 0xb05(%rip),%xmm0
jne    1523 <cell_parameters+0x3d3>
jnp    1450 <cell_parameters+0x300>
movapd %xmm3,%xmm1
subsd  %xmm2,%xmm1
mulsd  %xmm5,%xmm1
divsd  %xmm0,%xmm1
ucomisd 0xae5(%rip),%xmm1
jbe    1450 <cell_parameters+0x300>
jmp    148f <cell_parameters+0x33f>
movapd 0x20(%rsp),%xmm4
xorpd  %xmm2,%xmm2
movsd  0x10(%rsp),%xmm5
jmp    1663 <cell_parameters+0x513>
xorpd  %xmm5,%xmm5
jmp    1663 <cell_parameters+0x513>
lea    -0x1(%rsi),%rbx
lea    -0x1(%r14),%edi
mov    $0x8,%edx
mov    %rbx,%rax
mul    %rdx
seto   %dl
cmp    %ebx,%edi
jb     1359 <cell_parameters+0x209>
mov    %rbx,%rcx
shr    $0x20,%rcx
jne    1359 <cell_parameters+0x209>
lea    (%r15,%rdi,8),%rbp
mov    %rbp,%rcx
sub    %rax,%rcx
cmp    %rbp,%rcx
ja     1359 <cell_parameters+0x209>
test   %dl,%dl
jne    1359 <cell_parameters+0x209>
lea    (%r15,%rsi,8),%rbp
mov    %rbp,%rcx
sub    %rax,%rcx
cmp    %rbp,%rcx
ja     1359 <cell_parameters+0x209>
test   %dl,%dl
jne    1359 <cell_parameters+0x209>
lea    0x1(%rdi),%rax
sub    %rsi,%rax
lea    (%r15,%rax,8),%rax
lea    (%r15,%rsi,8),%rcx
add    $0x8,%rcx
cmp    %rcx,%rax
jae    15f2 <cell_parameters+0x4a2>
lea    (%r15,%rdi,8),%rax
add    $0x8,%rax
lea    0x8(%r15),%rcx
cmp    %rax,%rcx
jb     1359 <cell_parameters+0x209>
mov    %esi,%r8d
and    $0xfffffffc,%r8d
mov    %esi,%eax
and    $0x3,%eax
movapd %xmm4,%xmm0
unpcklpd %xmm4,%xmm0
mov    %r8,%rdi
neg    %rdi
mov    $0xffffffff,%ebp
add    %rsi,%rbp
lea    (%r15,%rbx,8),%rcx
xor    %ebx,%ebx
shufpd $0x1,%xmm0,%xmm0
nop
lea    (%rbx,%rbp,1),%edx
movupd -0x10(%rcx,%rbx,8),%xmm1
movupd (%rcx,%rbx,8),%xmm2
subpd  %xmm0,%xmm2
movupd %xmm2,-0x8(%r15,%rdx,8)
subpd  %xmm0,%xmm1
movupd %xmm1,-0x18(%r15,%rdx,8)
add    $0xfffffffffffffffc,%rbx
cmp    %rbx,%rdi
jne    1620 <cell_parameters+0x4d0>
cmp    %rsi,%r8
jne    135c <cell_parameters+0x20c>
jmp    137e <cell_parameters+0x22e>
xorpd  %xmm5,%xmm5
xorpd  %xmm2,%xmm2
cvttsd2si 0x70(%rsp),%eax
addsd  (%rsp),%xmm5
movsd  0x99a(%rip),%xmm0
subsd  0x78(%rsp),%xmm0
mulsd  %xmm4,%xmm0
ucomisd %xmm0,%xmm3
jbe    169a <cell_parameters+0x54a>
movapd %xmm3,%xmm1
subsd  %xmm0,%xmm1
ucomisd 0x38(%rsp),%xmm1
jae    16a2 <cell_parameters+0x552>
movapd %xmm1,%xmm2
movsd  0x48(%rsp),%xmm1
jmp    16d1 <cell_parameters+0x581>
movsd  0x96e(%rip),%xmm0
movsd  0x48(%rsp),%xmm1
mulsd  %xmm0,%xmm1
mov    %r12d,%ecx
shr    $0x1f,%ecx
add    %r12d,%ecx
sar    %ecx
mulsd  %xmm0,%xmm5
mov    %eax,%edx
shr    $0x1f,%edx
add    %eax,%edx
sar    %edx
mov    %edx,%eax
mov    %ecx,%r12d
ucomisd 0x68(%rsp),%xmm3
seta   %cl
shl    %cl,%eax
movsd  %xmm1,0x297c(%rip)
movsd  (%rsp),%xmm0
movsd  %xmm0,0x2977(%rip)
movsd  %xmm5,0x2977(%rip)
movsd  %xmm2,0x2977(%rip)
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x2970(%rip)
cmp    $0x9,%r12d
jl     1722 <cell_parameters+0x5d2>
lea    0x90b(%rip),%rdi
call   1030 <puts@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %r12d,%xmm0
movsd  %xmm0,0x2956(%rip)
lea    0x2927(%rip),%rax
add    $0x80,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@cell_parameters.ret = internal global [6 x double] zeroinitializer
@str = [43 x i8] c"ERROR: Cannot have more than 8 chromosomes\00"
@str.2 = [34 x i8] c"ERROR: Stupid calculation problem\00"
define double* @cell_parameters(double %0, double %1, double %2, double %3, double %4) {
%6 = fdiv double %2, %0
%7 = tail call double @llvm.floor.f64(double %6)
%8 = fadd double %1, %2
%9 = fdiv double %8, %0
%10 = tail call double @llvm.floor.f64(double %9)
%11 = tail call double @llvm.fmuladd.f64(double %3, double %0, double %8)
%12 = fdiv double %11, %0
%13 = fadd double %12, -1.000000e+00
%14 = fptosi double %13 to i32
%15 = tail call double @pow(double 2.000000e+00, i32 %14)
%16 = fadd double %10, 1.000000e+00
%17 = fneg double %1
%18 = tail call double @llvm.fmuladd.f64(double %0, double %16, double %17)
%19 = fsub double %18, %2
%20 = fptosi double %7 to i32
%21 = tail call double @pow(double 2.000000e+00, i32 %20)
%22 = fptosi double %21 to i32
%23 = fptosi double %10 to i32
%24 = tail call double @pow(double 2.000000e+00, i32 %23)
%25 = fptosi double %24 to i32
%26 = tail call double @pow(double 2.000000e+00, i32 %23)
%27 = fadd double %26, -1.000000e+00
%28 = fdiv double %0, %1
%29 = tail call double @pow(double 2.000000e+00, i32 %23)
%30 = tail call double @fmod(double %8, double %0)
%31 = fmul double %29, %30
%32 = fdiv double %31, %1
%33 = tail call double @llvm.fmuladd.f64(double %27, double %28, double %32)
%34 = tail call double @pow(double 2.000000e+00, i32 %20)
%35 = fadd double %34, -1.000000e+00
%36 = fneg double %35
%37 = tail call double @llvm.fmuladd.f64(double %36, double %28, double %33)
%38 = tail call double @pow(double 2.000000e+00, i32 %20)
%39 = tail call double @fmod(double %2, double %0)
%40 = fdiv double %39, %1
%41 = fneg double %38
%42 = tail call double @llvm.fmuladd.f64(double %41, double %40, double %37)
%43 = shl i32 %23, 3
%44 = add i32 %43, 8
%45 = tail call i64 @malloc(i32 %44)
%46 = inttoptr i64 %45 to double*
%47 = sext i32 %23 to i64
%48 = getelementptr inbounds double, double* %46, i64 %47
store double %19, double* %48
%49 = icmp sgt i32 %23, 0
br i1 %49, label %50, label %133
50: ; preds = %5
%51 = zext i32 %23 to i64
%52 = icmp ult i32 %23, 4
br i1 %52, label %131, label %53
53: ; preds = %50
%54 = add nsw i64 %51, -1
%55 = add i32 %23, -1
%56 = trunc i64 %54 to i32
%57 = icmp ult i32 %55, %56
%58 = icmp ugt i64 %54, 4294967295
%59 = or i1 %57, %58
%60 = zext i32 %55 to i64
%61 = getelementptr double, double* %46, i64 %60
%62 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %54, i64 8)
%63 = extractvalue { i64, i1 } %62, 0
%64 = extractvalue { i64, i1 } %62, 1
%65 = bitcast double* %61 to i8*
%66 = sub i64 0, %63
%67 = getelementptr i8, i8* %65, i64 %66
%68 = icmp ugt i8* %67, %65
%69 = or i1 %68, %64
%70 = getelementptr double, double* %46, i64 %51
%71 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %54, i64 8)
%72 = extractvalue { i64, i1 } %71, 0
%73 = extractvalue { i64, i1 } %71, 1
%74 = bitcast double* %70 to i8*
%75 = sub i64 0, %72
%76 = getelementptr i8, i8* %74, i64 %75
%77 = icmp ugt i8* %76, %74
%78 = or i1 %77, %73
%79 = or i1 %59, %69
%80 = or i1 %79, %78
br i1 %80, label %131, label %81
81: ; preds = %53
%82 = add i32 %23, -1
%83 = zext i32 %82 to i64
%84 = add nuw nsw i64 %83, 1
%85 = sub nsw i64 %84, %51
%86 = getelementptr double, double* %46, i64 %85
%87 = add nuw nsw i64 %83, 1
%88 = getelementptr double, double* %46, i64 %87
%89 = getelementptr double, double* %46, i64 1
%90 = add nuw nsw i64 %51, 1
%91 = getelementptr double, double* %46, i64 %90
%92 = icmp ult double* %86, %91
%93 = icmp ult double* %89, %88
%94 = and i1 %92, %93
br i1 %94, label %131, label %95
95: ; preds = %81
%96 = and i64 %51, 4294967292
%97 = and i64 %51, 3
%98 = insertelement <2 x double> poison, double %0, i64 0
%99 = shufflevector <2 x double> %98, <2 x double> poison, <2 x i32> zeroinitializer
%100 = insertelement <2 x double> poison, double %0, i64 0
%101 = shufflevector <2 x double> %100, <2 x double> poison, <2 x i32> zeroinitializer
br label %102
102: ; preds = %102, %95
%103 = phi i64 [ 0, %95 ], [ %127, %102 ]
%104 = sub i64 %51, %103
%105 = add i64 %104, 4294967295
%106 = getelementptr inbounds double, double* %46, i64 %104
%107 = getelementptr inbounds double, double* %106, i64 -1
%108 = bitcast double* %107 to <2 x double>*
%109 = load <2 x double>, <2 x double>* %108
%110 = shufflevector <2 x double> %109, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%111 = getelementptr inbounds double, double* %106, i64 -2
%112 = getelementptr inbounds double, double* %111, i64 -1
%113 = bitcast double* %112 to <2 x double>*
%114 = load <2 x double>, <2 x double>* %113
%115 = shufflevector <2 x double> %114, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%116 = fsub <2 x double> %110, %99
%117 = fsub <2 x double> %115, %101
%118 = and i64 %105, 4294967295
%119 = getelementptr inbounds double, double* %46, i64 %118
%120 = shufflevector <2 x double> %116, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%121 = getelementptr inbounds double, double* %119, i64 -1
%122 = bitcast double* %121 to <2 x double>*
store <2 x double> %120, <2 x double>* %122
%123 = shufflevector <2 x double> %117, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%124 = getelementptr inbounds double, double* %119, i64 -2
%125 = getelementptr inbounds double, double* %124, i64 -1
%126 = bitcast double* %125 to <2 x double>*
store <2 x double> %123, <2 x double>* %126
%127 = add nuw i64 %103, 4
%128 = icmp eq i64 %127, %96
br i1 %128, label %129, label %102
129: ; preds = %102
%130 = icmp eq i64 %96, %51
br i1 %130, label %133, label %131
131: ; preds = %81, %53, %50, %129
%132 = phi i64 [ %51, %81 ], [ %51, %53 ], [ %51, %50 ], [ %97, %129 ]
br label %138
133: ; preds = %138, %129, %5
%134 = icmp slt i32 %23, 0
br i1 %134, label %220, label %135
135: ; preds = %133
%136 = add nuw i32 %23, 1
%137 = zext i32 %136 to i64
br label %152
138: ; preds = %131, %138
%139 = phi i64 [ %140, %138 ], [ %132, %131 ]
%140 = add nsw i64 %139, -1
%141 = getelementptr inbounds double, double* %46, i64 %139
%142 = load double, double* %141
%143 = fsub double %142, %0
%144 = and i64 %140, 4294967295
%145 = getelementptr inbounds double, double* %46, i64 %144
store double %143, double* %145
%146 = icmp ugt i64 %139, 1
br i1 %146, label %138, label %133
147: ; preds = %177
br i1 %134, label %220, label %148
148: ; preds = %147
%149 = fcmp ult double %8, %0
%150 = add nuw i32 %23, 1
%151 = zext i32 %150 to i64
br label %181
152: ; preds = %135, %177
%153 = phi i64 [ 0, %135 ], [ %179, %177 ]
%154 = phi i32 [ %22, %135 ], [ %178, %177 ]
%155 = getelementptr inbounds double, double* %46, i64 %153
%156 = load double, double* %155
%157 = fcmp olt double %156, 0.000000e+00
br i1 %157, label %158, label %167
158: ; preds = %152
%159 = fadd double %156, %1
%160 = fcmp ogt double %159, 0.000000e+00
br i1 %160, label %161, label %167
161: ; preds = %158
%162 = fsub double %1, %159
%163 = fadd double %162, %3
%164 = fcmp ult double %163, %1
br i1 %164, label %177, label %165
165: ; preds = %161
%166 = shl nsw i32 %154, 1
br label %177
167: ; preds = %158, %152
%168 = fcmp ult double %156, 0.000000e+00
%169 = fcmp uge double %156, %3
%170 = or i1 %168, %169
%171 = fsub double %3, %156
%172 = fcmp ult double %171, %1
%173 = or i1 %170, %172
%174 = xor i1 %173, true
%175 = zext i1 %174 to i32
%176 = shl nsw i32 %154, %175
br label %177
177: ; preds = %167, %165, %161
%178 = phi i32 [ %166, %165 ], [ %154, %161 ], [ %176, %167 ]
%179 = add nuw nsw i64 %153, 1
%180 = icmp eq i64 %179, %137
br i1 %180, label %147, label %152
181: ; preds = %148, %216
%182 = phi i64 [ 0, %148 ], [ %218, %216 ]
%183 = phi double [ 0.000000e+00, %148 ], [ %217, %216 ]
%184 = getelementptr inbounds double, double* %46, i64 %182
%185 = load double, double* %184
%186 = fcmp olt double %185, 0.000000e+00
%187 = select i1 %186, double 0.000000e+00, double %185
%188 = fcmp ogt double %185, %3
br i1 %188, label %216, label %189
189: ; preds = %181
%190 = fadd double %185, %1
%191 = fcmp ule double %190, %3
%192 = fcmp ugt double %185, %3
%193 = or i1 %192, %191
br i1 %193, label %194, label %207
194: ; preds = %189
%195 = fcmp ugt double %190, %3
br i1 %195, label %205, label %196
196: ; preds = %194
br i1 %149, label %203, label %197
197: ; preds = %196
%198 = fcmp oeq double %190, 0.000000e+00
br i1 %198, label %216, label %199
199: ; preds = %197
%200 = fsub double %3, %187
%201 = fmul double %200, %1
%202 = fdiv double %201, %190
br label %207
203: ; preds = %196
%204 = fsub double %3, %187
br label %207
205: ; preds = %194
%206 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.2, i64 0, i64 0))
br label %216
207: ; preds = %189, %203, %199
%208 = phi double [ %202, %199 ], [ %204, %203 ], [ %1, %189 ]
%209 = fcmp ogt double %208, 0.000000e+00
br i1 %209, label %210, label %216
210: ; preds = %207
%211 = trunc i64 %182 to i32
%212 = tail call double @pow(double 2.000000e+00, i32 %211)
%213 = fsub double %3, %187
%214 = fdiv double %213, %208
%215 = tail call double @llvm.fmuladd.f64(double %212, double %214, double %183)
br label %216
216: ; preds = %197, %181, %205, %210, %207
%217 = phi double [ %215, %210 ], [ %183, %207 ], [ %183, %205 ], [ %183, %181 ], [ %183, %197 ]
%218 = add nuw nsw i64 %182, 1
%219 = icmp eq i64 %218, %151
br i1 %219, label %220, label %181
220: ; preds = %216, %133, %147
%221 = phi i32 [ %178, %147 ], [ %22, %133 ], [ %178, %216 ]
%222 = phi double [ 0.000000e+00, %147 ], [ 0.000000e+00, %133 ], [ %217, %216 ]
%223 = fadd double %42, %222
%224 = fsub double 1.000000e+00, %6
%225 = fmul double %224, %0
%226 = fcmp olt double %225, %3
br i1 %226, label %227, label %235
227: ; preds = %220
%228 = fsub double %3, %225
%229 = fcmp ult double %228, %2
br i1 %229, label %235, label %230
230: ; preds = %227
%231 = fmul double %15, 5.000000e-01
%232 = sdiv i32 %221, 2
%233 = fmul double %223, 5.000000e-01
%234 = sdiv i32 %25, 2
br label %235
235: ; preds = %227, %230, %220
%236 = phi i32 [ %234, %230 ], [ %25, %227 ], [ %25, %220 ]
%237 = phi i32 [ %232, %230 ], [ %221, %227 ], [ %221, %220 ]
%238 = phi double [ %231, %230 ], [ %15, %227 ], [ %15, %220 ]
%239 = phi double [ %233, %230 ], [ %223, %227 ], [ %223, %220 ]
%240 = phi double [ 0.000000e+00, %230 ], [ %228, %227 ], [ 0.000000e+00, %220 ]
%241 = fcmp olt double %19, %3
%242 = zext i1 %241 to i32
%243 = shl nsw i32 %236, %242
store double %238, double* getelementptr inbounds ([6 x double], [6 x double]* @cell_parameters.ret, i64 0, i64 0)
store double %42, double* getelementptr inbounds ([6 x double], [6 x double]* @cell_parameters.ret, i64 0, i64 1)
store double %239, double* getelementptr inbounds ([6 x double], [6 x double]* @cell_parameters.ret, i64 0, i64 2)
store double %240, double* getelementptr inbounds ([6 x double], [6 x double]* @cell_parameters.ret, i64 0, i64 3)
%244 = sitofp i32 %243 to double
store double %244, double* getelementptr inbounds ([6 x double], [6 x double]* @cell_parameters.ret, i64 0, i64 4)
%245 = icmp sgt i32 %237, 8
br i1 %245, label %246, label %248
246: ; preds = %235
%247 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str, i64 0, i64 0))
br label %248
248: ; preds = %246, %235
%249 = sitofp i32 %237 to double
store double %249, double* getelementptr inbounds ([6 x double], [6 x double]* @cell_parameters.ret, i64 0, i64 5)
ret double* getelementptr inbounds ([6 x double], [6 x double]* @cell_parameters.ret, i64 0, i64 0)
}