double PartialTimeTwoAssetBarrier(int typeflag, double S1, double S2, double X,
                                  double H, double t1, double T2, double r,
                                  double b1, double b2, double v1, double v2,
                                  double Rho) {
  int eta = -1, phi = 1;
  double st1, sT2, logHS2, vv2, st1T2, mu1, mu2, d1, d2, d3, d4, e1, e2, e3, e4,
      w;
  assert(((S1) == (S1)) && S1 != 0.0);
  assert(((S2) == (S2)) && S2 != 0.0);
  assert(((X) == (X)) && X != 0.0);
  assert(((H) == (H)) && H != 0.0);
  assert(((t1) == (t1)) && t1 != 0.0);
  assert(((T2) == (T2)) && T2 != 0.0);
  assert(((r) == (r)));
  assert(((b1) == (b1)));
  assert(((b2) == (b2)));
  assert(((v1) == (v1)) && v1 != 0.0);
  assert(((v2) == (v2)) && v2 != 0.0);
  assert(((Rho) == (Rho)) && Rho != 0.0);
  switch (typeflag) {
  case 2:
  case 6:
  case 1:
  case 5:
    phi = -1;
    break;
  }
  switch (typeflag) {
  case 2:
  case 4:
  case 1:
  case 3:
    eta = 1;
    break;
  }
  st1 = sqrt(t1);
  sT2 = sqrt(T2);
  logHS2 = log(H / S2);
  vv2 = v2 * v2;
  st1T2 = sqrt(t1 / T2);
  mu1 = b1 - ((v1) * (v1)) / 2.0;
  mu2 = b2 - vv2 / 2.0;
  d1 = (log(S1 / X) + (mu1 + ((v1) * (v1))) * T2) / (v1 * sT2);
  d2 = d1 - v1 * sT2;
  d3 = d1 + 2.0 * Rho * logHS2 / (v2 * sT2);
  d4 = d2 + 2.0 * Rho * logHS2 / (v2 * sT2);
  e1 = (logHS2 - (mu2 + Rho * v1 * v2) * t1) / (v2 * st1);
  e2 = e1 + Rho * v1 * st1;
  e3 = e1 - 2.0 * logHS2 / (v2 * st1);
  e4 = e2 - 2.0 * logHS2 / (v2 * st1);
  assert(((mu1) == (mu1)));
  assert(((mu2) == (mu2)));
  assert(((d1) == (d1)));
  assert(((d2) == (d2)));
  assert(((d3) == (d3)));
  assert(((d4) == (d4)));
  assert(((e1) == (e1)));
  assert(((e2) == (e2)));
  assert(((e3) == (e3)));
  assert(((e4) == (e4)));
  w = eta * S1 * exp((b1 - r) * T2) *
          (cbnd(eta * d1, phi * e1, -eta * phi * Rho * st1T2) -
           exp(2.0 * logHS2 * (mu2 + Rho * v1 * v2) / vv2) *
               cbnd(eta * d3, phi * e3, -eta * phi * Rho * st1T2)) -
      eta * exp(-r * T2) * X *
          (cbnd(eta * d2, phi * e2, -eta * phi * Rho * st1T2) -
           exp(2.0 * logHS2 * mu2 / vv2) *
               cbnd(eta * d4, phi * e4, -eta * phi * Rho * st1T2));
  switch (typeflag) {
  case 4:
  case 2:
  case 8:
  case 6:
    return w;
  case 3:
  case 1:
    return gbs_call(S1, X, T2, r, b1, v1) - w;
  case 7:
  case 5:
    return gbs_put(S1, X, T2, r, b1, v1) - w;
  default:
    abort();
  }
}


x86 assembly (clang, -O0):
<PartialTimeTwoAssetBarrier>:
push   %rbp
mov    %rsp,%rbp
sub    $0x150,%rsp
movsd  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
mov    %edi,-0xc(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
movl   $0xffffffff,-0x54(%rbp)
movl   $0x1,-0x58(%rbp)
movsd  -0x18(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x18(%rbp),%xmm0
mov    %al,-0xd9(%rbp)
jne    1214 <PartialTimeTwoAssetBarrier+0x94>
jp     1214 <PartialTimeTwoAssetBarrier+0x94>
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xd9(%rbp)
mov    -0xd9(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x20(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x20(%rbp),%xmm0
mov    %al,-0xda(%rbp)
jne    125e <PartialTimeTwoAssetBarrier+0xde>
jp     125e <PartialTimeTwoAssetBarrier+0xde>
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xda(%rbp)
mov    -0xda(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x28(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x28(%rbp),%xmm0
mov    %al,-0xdb(%rbp)
jne    12a8 <PartialTimeTwoAssetBarrier+0x128>
jp     12a8 <PartialTimeTwoAssetBarrier+0x128>
movsd  -0x28(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xdb(%rbp)
mov    -0xdb(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x30(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x30(%rbp),%xmm0
mov    %al,-0xdc(%rbp)
jne    12f2 <PartialTimeTwoAssetBarrier+0x172>
jp     12f2 <PartialTimeTwoAssetBarrier+0x172>
movsd  -0x30(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xdc(%rbp)
mov    -0xdc(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x38(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x38(%rbp),%xmm0
mov    %al,-0xdd(%rbp)
jne    133c <PartialTimeTwoAssetBarrier+0x1bc>
jp     133c <PartialTimeTwoAssetBarrier+0x1bc>
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xdd(%rbp)
mov    -0xdd(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x40(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x40(%rbp),%xmm0
mov    %al,-0xde(%rbp)
jne    1386 <PartialTimeTwoAssetBarrier+0x206>
jp     1386 <PartialTimeTwoAssetBarrier+0x206>
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xde(%rbp)
mov    -0xde(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x48(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
sete   %al
setnp  %cl
and    %cl,%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x50(%rbp),%xmm0
ucomisd -0x50(%rbp),%xmm0
sete   %al
setnp  %cl
and    %cl,%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  0x10(%rbp),%xmm0
ucomisd 0x10(%rbp),%xmm0
sete   %al
setnp  %cl
and    %cl,%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  0x18(%rbp),%xmm0
xor    %eax,%eax
ucomisd 0x18(%rbp),%xmm0
mov    %al,-0xdf(%rbp)
jne    142a <PartialTimeTwoAssetBarrier+0x2aa>
jp     142a <PartialTimeTwoAssetBarrier+0x2aa>
movsd  0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xdf(%rbp)
mov    -0xdf(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  0x20(%rbp),%xmm0
xor    %eax,%eax
ucomisd 0x20(%rbp),%xmm0
mov    %al,-0xe0(%rbp)
jne    1474 <PartialTimeTwoAssetBarrier+0x2f4>
jp     1474 <PartialTimeTwoAssetBarrier+0x2f4>
movsd  0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xe0(%rbp)
mov    -0xe0(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  0x28(%rbp),%xmm0
xor    %eax,%eax
ucomisd 0x28(%rbp),%xmm0
mov    %al,-0xe1(%rbp)
jne    14be <PartialTimeTwoAssetBarrier+0x33e>
jp     14be <PartialTimeTwoAssetBarrier+0x33e>
movsd  0x28(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xe1(%rbp)
mov    -0xe1(%rbp),%al
movzbl %al,%edi
and    $0x1,%edi
xor    %eax,%eax
call   1070 <assert@plt>
mov    -0xc(%rbp),%eax
mov    %eax,-0xe8(%rbp)
add    $0xffffffff,%eax
sub    $0x2,%eax
jb     1502 <PartialTimeTwoAssetBarrier+0x382>
jmp    14eb <PartialTimeTwoAssetBarrier+0x36b>
mov    -0xe8(%rbp),%eax
add    $0xfffffffb,%eax
sub    $0x1,%eax
ja     1509 <PartialTimeTwoAssetBarrier+0x389>
jmp    1502 <PartialTimeTwoAssetBarrier+0x382>
movl   $0xffffffff,-0x58(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
sub    $0x3,%eax
ja     1524 <PartialTimeTwoAssetBarrier+0x3a4>
jmp    151d <PartialTimeTwoAssetBarrier+0x39d>
movl   $0x1,-0x54(%rbp)
movsd  -0x38(%rbp),%xmm0
call   10a0 <sqrt@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
call   10a0 <sqrt@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1090 <log@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  0x20(%rbp),%xmm0
mulsd  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   10a0 <sqrt@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm1
movsd  0xa6a(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0x10(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1090 <log@plt>
movaps %xmm0,%xmm2
movsd  -0x88(%rbp),%xmm3
ff
movsd  0x18(%rbp),%xmm1
movaps %xmm1,%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm3,%xmm0
movsd  -0x40(%rbp),%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  0x18(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  0x28(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x20(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  0x28(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x20(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm3
ff
movsd  0x28(%rbp),%xmm2
movsd  0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm2
movsd  0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm2
addsd  %xmm3,%xmm2
movsd  -0x38(%rbp),%xmm3
mulsd  %xmm3,%xmm2
subsd  %xmm2,%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  0x28(%rbp),%xmm0
movsd  0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x20(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x20(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %al
movzbl %al,%edi
xor    %eax,%eax
mov    %al,-0x141(%rbp)
call   1070 <assert@plt>
mov    -0x141(%rbp),%al
movsd  -0x90(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %cl
movzbl %cl,%edi
call   1070 <assert@plt>
mov    -0x141(%rbp),%al
movsd  -0x98(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %cl
movzbl %cl,%edi
call   1070 <assert@plt>
mov    -0x141(%rbp),%al
movsd  -0xa0(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %cl
movzbl %cl,%edi
call   1070 <assert@plt>
mov    -0x141(%rbp),%al
movsd  -0xa8(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %cl
movzbl %cl,%edi
call   1070 <assert@plt>
mov    -0x141(%rbp),%al
movsd  -0xb0(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %cl
movzbl %cl,%edi
call   1070 <assert@plt>
mov    -0x141(%rbp),%al
movsd  -0xb8(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %cl
movzbl %cl,%edi
call   1070 <assert@plt>
mov    -0x141(%rbp),%al
movsd  -0xc0(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %cl
movzbl %cl,%edi
call   1070 <assert@plt>
mov    -0x141(%rbp),%al
movsd  -0xc8(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %cl
movzbl %cl,%edi
call   1070 <assert@plt>
mov    -0x141(%rbp),%al
movsd  -0xd0(%rbp),%xmm0
ff
ucomisd %xmm0,%xmm0
setnp  %cl
movzbl %cl,%edi
call   1070 <assert@plt>
cvtsi2sdl -0x54(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm1,%xmm0
call   1080 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x140(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x54(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
mov    -0x58(%rbp),%ecx
cvtsi2sd %ecx,%xmm1
movsd  -0xb8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
neg    %eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm2
movsd  0x28(%rbp),%xmm3
mulsd  %xmm3,%xmm2
movsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm2
mov    $0x3,%al
mov    %al,-0x119(%rbp)
call   1050 <cbnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  -0x90(%rbp),%xmm2
ff
movsd  0x28(%rbp),%xmm1
movsd  0x18(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movsd  0x20(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x78(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1080 <exp@plt>
mov    -0x119(%rbp),%al
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x54(%rbp),%ecx
cvtsi2sd %ecx,%xmm0
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
mov    -0x58(%rbp),%edx
cvtsi2sd %edx,%xmm1
movsd  -0xc8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
neg    %ecx
imul   %edx,%ecx
cvtsi2sd %ecx,%xmm2
movsd  0x28(%rbp),%xmm3
mulsd  %xmm3,%xmm2
movsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm2
call   1050 <cbnd@plt>
movsd  -0x138(%rbp),%xmm1
ff
movsd  -0x130(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
cvtsi2sdl -0x54(%rbp),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movaps 0x60a(%rip),%xmm1
movsd  -0x48(%rbp),%xmm0
pxor   %xmm1,%xmm0
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm1,%xmm0
call   1080 <exp@plt>
mov    -0x119(%rbp),%al
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x54(%rbp),%ecx
cvtsi2sd %ecx,%xmm0
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
mov    -0x58(%rbp),%edx
cvtsi2sd %edx,%xmm1
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
neg    %ecx
imul   %edx,%ecx
cvtsi2sd %ecx,%xmm2
movsd  0x28(%rbp),%xmm3
mulsd  %xmm3,%xmm2
movsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm2
call   1050 <cbnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  -0x78(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1080 <exp@plt>
mov    -0x119(%rbp),%al
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x54(%rbp),%ecx
cvtsi2sd %ecx,%xmm0
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
mov    -0x58(%rbp),%edx
cvtsi2sd %edx,%xmm1
movsd  -0xd0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
neg    %ecx
imul   %edx,%ecx
cvtsi2sd %ecx,%xmm2
movsd  0x28(%rbp),%xmm3
mulsd  %xmm3,%xmm2
movsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm2
call   1050 <cbnd@plt>
movsd  -0x118(%rbp),%xmm4
ff
movsd  -0x110(%rbp),%xmm3
ff
movsd  -0x108(%rbp),%xmm1
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0xf8(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm5
mulsd  %xmm5,%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0xc(%rbp),%eax
mov    %eax,-0xec(%rbp)
sub    $0x1,%eax
je     1c09 <PartialTimeTwoAssetBarrier+0xa89>
jmp    1b6b <PartialTimeTwoAssetBarrier+0x9eb>
mov    -0xec(%rbp),%eax
sub    $0x2,%eax
je     1bf7 <PartialTimeTwoAssetBarrier+0xa77>
jmp    1b7f <PartialTimeTwoAssetBarrier+0x9ff>
mov    -0xec(%rbp),%eax
sub    $0x3,%eax
je     1c09 <PartialTimeTwoAssetBarrier+0xa89>
jmp    1b93 <PartialTimeTwoAssetBarrier+0xa13>
mov    -0xec(%rbp),%eax
sub    $0x4,%eax
je     1bf7 <PartialTimeTwoAssetBarrier+0xa77>
jmp    1ba7 <PartialTimeTwoAssetBarrier+0xa27>
mov    -0xec(%rbp),%eax
sub    $0x5,%eax
je     1c44 <PartialTimeTwoAssetBarrier+0xac4>
jmp    1bbb <PartialTimeTwoAssetBarrier+0xa3b>
mov    -0xec(%rbp),%eax
sub    $0x6,%eax
je     1bf7 <PartialTimeTwoAssetBarrier+0xa77>
jmp    1bcf <PartialTimeTwoAssetBarrier+0xa4f>
mov    -0xec(%rbp),%eax
sub    $0x7,%eax
je     1c44 <PartialTimeTwoAssetBarrier+0xac4>
jmp    1be3 <PartialTimeTwoAssetBarrier+0xa63>
mov    -0xec(%rbp),%eax
sub    $0x8,%eax
jne    1c7f <PartialTimeTwoAssetBarrier+0xaff>
jmp    1bf7 <PartialTimeTwoAssetBarrier+0xa77>
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    1c84 <PartialTimeTwoAssetBarrier+0xb04>
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm3
movsd  -0x50(%rbp),%xmm4
movsd  0x18(%rbp),%xmm5
mov    $0x6,%al
call   1040 <gbs_call@plt>
cvtsi2sd %eax,%xmm0
subsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    1c84 <PartialTimeTwoAssetBarrier+0xb04>
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm3
movsd  -0x50(%rbp),%xmm4
movsd  0x18(%rbp),%xmm5
mov    $0x6,%al
call   1060 <gbs_put@plt>
cvtsi2sd %eax,%xmm0
subsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    1c84 <PartialTimeTwoAssetBarrier+0xb04>
call   1030 <abort@plt>
movsd  -0x8(%rbp),%xmm0
add    $0x150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<PartialTimeTwoAssetBarrier>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x120,%rsp
movsd  %xmm7,0x38(%rsp)
movaps %xmm6,0x70(%rsp)
movsd  %xmm5,0x10(%rsp)
movsd  %xmm4,0x8(%rsp)
movsd  %xmm3,0x20(%rsp)
movsd  %xmm2,0x58(%rsp)
movsd  %xmm1,0x18(%rsp)
mov    %edi,%r14d
xorpd  %xmm1,%xmm1
xor    %edi,%edi
movsd  %xmm0,0x68(%rsp)
ucomisd %xmm1,%xmm0
setne  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movsd  0x18(%rsp),%xmm0
ucomisd 0xe22(%rip),%xmm0
setne  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movsd  0x58(%rsp),%xmm0
ucomisd 0xe07(%rip),%xmm0
setne  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movsd  0x20(%rsp),%xmm0
ucomisd 0xdec(%rip),%xmm0
setne  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
ucomisd 0xdd1(%rip),%xmm0
setne  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movsd  0x10(%rsp),%xmm0
ucomisd 0xdb6(%rip),%xmm0
setne  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movapd 0x70(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movsd  0x38(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movsd  0x150(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
xorpd  %xmm0,%xmm0
movsd  0x158(%rsp),%xmm1
ucomisd %xmm1,%xmm0
setne  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
xorpd  %xmm0,%xmm0
movsd  0x160(%rsp),%xmm1
ucomisd %xmm1,%xmm0
setne  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
xorpd  %xmm0,%xmm0
ucomisd 0x168(%rsp),%xmm0
setne  %dil
xor    %eax,%eax
call   1070 <assert@plt>
lea    -0x1(%r14),%ebp
mov    $0x1,%r12d
cmp    $0x5,%ebp
ja     1318 <PartialTimeTwoAssetBarrier+0x198>
movslq %ebp,%rax
lea    0xd0c(%rip),%rcx
mov    (%rcx,%rax,4),%r12d
xor    %ebx,%ebx
cmp    $0x4,%ebp
setb   %bl
movsd  0x8(%rsp),%xmm0
ucomisd 0xcda(%rip),%xmm0
jb     1336 <PartialTimeTwoAssetBarrier+0x1b6>
sqrtsd %xmm0,%xmm0
jmp    133b <PartialTimeTwoAssetBarrier+0x1bb>
call   10a0 <sqrt@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0x10(%rsp),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1360 <PartialTimeTwoAssetBarrier+0x1e0>
xorps  %xmm1,%xmm1
sqrtsd %xmm0,%xmm1
movapd %xmm1,0x40(%rsp)
jmp    136b <PartialTimeTwoAssetBarrier+0x1eb>
call   10a0 <sqrt@plt>
movapd %xmm0,0x40(%rsp)
movsd  0x20(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
lea    (%rbx,%rbx,1),%r15d
add    $0xffffffff,%r15d
divsd  %xmm1,%xmm0
call   1090 <log@plt>
movapd %xmm0,0x20(%rsp)
movsd  0x160(%rsp),%xmm4
mulsd  %xmm4,%xmm4
movsd  0x8(%rsp),%xmm0
divsd  0x10(%rsp),%xmm0
ucomisd 0xc59(%rip),%xmm0
movapd %xmm4,0xc0(%rsp)
jb     13c0 <PartialTimeTwoAssetBarrier+0x240>
sqrtsd %xmm0,%xmm0
jmp    13ce <PartialTimeTwoAssetBarrier+0x24e>
call   10a0 <sqrt@plt>
movapd 0xc0(%rsp),%xmm4
movsd  %xmm0,0x88(%rsp)
movsd  0x58(%rsp),%xmm2
movsd  0x68(%rsp),%xmm3
movsd  0x158(%rsp),%xmm1
mulsd  %xmm1,%xmm1
movapd %xmm1,0xb0(%rsp)
movsd  0xbff(%rip),%xmm0
mulsd  %xmm0,%xmm1
movsd  0x38(%rsp),%xmm5
subsd  %xmm1,%xmm5
movsd  %xmm5,0x60(%rsp)
mulsd  %xmm4,%xmm0
movsd  0x150(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
movapd %xmm3,%xmm0
divsd  %xmm2,%xmm0
call   1090 <log@plt>
movsd  0x60(%rsp),%xmm7
movapd 0xb0(%rsp),%xmm1
addsd  %xmm7,%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  0x168(%rsp),%xmm0
movapd %xmm0,%xmm3
movapd %xmm0,%xmm8
addsd  %xmm0,%xmm3
movapd 0x20(%rsp),%xmm4
mulsd  %xmm4,%xmm3
unpcklpd %xmm1,%xmm3
movsd  0x158(%rsp),%xmm5
movapd %xmm5,%xmm0
movapd 0x40(%rsp),%xmm6
mulsd  %xmm6,%xmm0
unpcklpd %xmm6,%xmm6
movsd  0x160(%rsp),%xmm2
movapd %xmm2,%xmm1
unpcklpd %xmm5,%xmm1
mulpd  %xmm6,%xmm1
divpd  %xmm1,%xmm3
movapd %xmm3,%xmm6
unpckhpd %xmm3,%xmm6
movapd %xmm6,0x40(%rsp)
movapd %xmm6,%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,0x100(%rsp)
movapd %xmm3,%xmm0
addsd  %xmm6,%xmm0
movapd %xmm0,0xa0(%rsp)
addsd  %xmm1,%xmm3
movapd %xmm3,0xb0(%rsp)
movapd %xmm5,%xmm0
mulsd  %xmm8,%xmm0
movapd %xmm0,%xmm3
movapd %xmm0,%xmm1
mulsd  %xmm2,%xmm3
addsd  0x18(%rsp),%xmm3
movapd %xmm3,0x110(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  %xmm3,%xmm0
movapd %xmm4,%xmm3
subsd  %xmm0,%xmm3
movsd  0x30(%rsp),%xmm0
mulsd  %xmm0,%xmm2
addsd  %xmm4,%xmm4
movapd %xmm4,0x20(%rsp)
unpcklpd %xmm4,%xmm3
unpcklpd %xmm2,%xmm2
divpd  %xmm2,%xmm3
movapd %xmm3,0x90(%rsp)
mulsd  %xmm0,%xmm1
addsd  %xmm3,%xmm1
movapd %xmm1,0xe0(%rsp)
movapd %xmm3,%xmm0
unpckhpd %xmm3,%xmm0
movapd %xmm3,%xmm2
subsd  %xmm0,%xmm2
movapd %xmm2,0xd0(%rsp)
movapd %xmm1,%xmm2
subsd  %xmm0,%xmm2
movapd %xmm2,0xf0(%rsp)
xor    %edi,%edi
ucomisd %xmm7,%xmm7
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movsd  0x18(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movapd 0x40(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movapd 0x100(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movapd 0xa0(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movapd 0xb0(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movapd 0x90(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movapd 0xe0(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movapd 0xd0(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
xor    %edi,%edi
movapd 0xf0(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0x38(%rsp),%xmm0
subsd  0x70(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,0x60(%rsp)
mov    %r12d,%eax
neg    %eax
cmp    $0x4,%ebp
cvtsi2sd %r15d,%xmm1
movsd  %xmm1,0x8(%rsp)
cvtsi2sd %r12d,%xmm2
movsd  %xmm2,0x30(%rsp)
movapd 0x40(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movapd 0x90(%rsp),%xmm1
mulsd  %xmm2,%xmm1
cmovae %r12d,%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
mulsd  0x168(%rsp),%xmm2
mulsd  0x88(%rsp),%xmm2
movsd  %xmm2,0x40(%rsp)
mov    $0x3,%al
call   1050 <cbnd@plt>
mov    %eax,%r15d
movapd 0x110(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
divsd  0xc0(%rsp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,0x90(%rsp)
movapd 0xa0(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
movapd 0xd0(%rsp),%xmm1
mulsd  0x30(%rsp),%xmm1
movsd  0x40(%rsp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
mov    %eax,%ebx
movapd 0x8bc(%rip),%xmm0
xorpd  0x70(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,0xa0(%rsp)
movapd 0x100(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
movapd 0xe0(%rsp),%xmm1
mulsd  0x30(%rsp),%xmm1
movsd  0x40(%rsp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
mov    %eax,%ebp
movapd 0x20(%rsp),%xmm0
mulsd  0x18(%rsp),%xmm0
divsd  0xc0(%rsp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,0x20(%rsp)
movapd 0xb0(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
movapd 0xf0(%rsp),%xmm1
mulsd  0x30(%rsp),%xmm1
movsd  0x40(%rsp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
movsd  0x68(%rsp),%xmm0
movsd  0x58(%rsp),%xmm1
cmp    $0x8,%r14d
ja     18f4 <PartialTimeTwoAssetBarrier+0x774>
movsd  0x8(%rsp),%xmm4
movapd %xmm4,%xmm3
mulsd  %xmm0,%xmm3
cvtsi2sd %r15d,%xmm5
xorps  %xmm2,%xmm2
cvtsi2sd %ebx,%xmm2
mulsd  0x60(%rsp),%xmm3
movsd  0x90(%rsp),%xmm6
mulsd  %xmm2,%xmm6
subsd  %xmm6,%xmm5
mulsd  %xmm3,%xmm5
xorps  %xmm3,%xmm3
cvtsi2sd %ebp,%xmm3
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  0x20(%rsp),%xmm6
mulsd  %xmm2,%xmm6
subsd  %xmm6,%xmm3
movsd  0xa0(%rsp),%xmm2
mulsd  %xmm4,%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm3,%xmm2
subsd  %xmm2,%xmm5
mov    $0x154,%eax
bt     %r14d,%eax
jb     18e0 <PartialTimeTwoAssetBarrier+0x760>
mov    $0xa,%eax
bt     %r14d,%eax
movsd  %xmm5,0x20(%rsp)
jb     18b1 <PartialTimeTwoAssetBarrier+0x731>
mov    $0xa0,%eax
bt     %r14d,%eax
jae    18f4 <PartialTimeTwoAssetBarrier+0x774>
movsd  0x10(%rsp),%xmm2
movapd 0x70(%rsp),%xmm3
movsd  0x38(%rsp),%xmm4
movsd  0x158(%rsp),%xmm5
mov    $0x6,%al
call   1060 <gbs_put@plt>
jmp    18d3 <PartialTimeTwoAssetBarrier+0x753>
movsd  0x10(%rsp),%xmm2
movapd 0x70(%rsp),%xmm3
movsd  0x38(%rsp),%xmm4
movsd  0x158(%rsp),%xmm5
mov    $0x6,%al
call   1040 <gbs_call@plt>
xorps  %xmm5,%xmm5
cvtsi2sd %eax,%xmm5
subsd  0x20(%rsp),%xmm5
movapd %xmm5,%xmm0
add    $0x120,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
call   1030 <abort@plt>

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

LLVM IR (-O2):
@switch.table.PartialTimeTwoAssetBarrier = [6 x i32] [i32 -1, i32 -1, i32 1, i32 1, i32 -1, i32 -1]
define double @PartialTimeTwoAssetBarrier(i32 %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12) {
%14 = fcmp one double %1, 0.000000e+00
%15 = zext i1 %14 to i32
%16 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %15)
%17 = fcmp one double %2, 0.000000e+00
%18 = zext i1 %17 to i32
%19 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %18)
%20 = fcmp one double %3, 0.000000e+00
%21 = zext i1 %20 to i32
%22 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %21)
%23 = fcmp one double %4, 0.000000e+00
%24 = zext i1 %23 to i32
%25 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %24)
%26 = fcmp one double %5, 0.000000e+00
%27 = zext i1 %26 to i32
%28 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %27)
%29 = fcmp one double %6, 0.000000e+00
%30 = zext i1 %29 to i32
%31 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %30)
%32 = fcmp ord double %7, 0.000000e+00
%33 = zext i1 %32 to i32
%34 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %33)
%35 = fcmp ord double %8, 0.000000e+00
%36 = zext i1 %35 to i32
%37 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %36)
%38 = fcmp ord double %9, 0.000000e+00
%39 = zext i1 %38 to i32
%40 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %39)
%41 = fcmp one double %10, 0.000000e+00
%42 = zext i1 %41 to i32
%43 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %42)
%44 = fcmp one double %11, 0.000000e+00
%45 = zext i1 %44 to i32
%46 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %45)
%47 = fcmp one double %12, 0.000000e+00
%48 = zext i1 %47 to i32
%49 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %48)
%50 = add i32 %0, -1
%51 = icmp ult i32 %50, 6
br i1 %51, label %52, label %56
52: ; preds = %13
%53 = sext i32 %50 to i64
%54 = getelementptr inbounds [6 x i32], [6 x i32]* @switch.table.PartialTimeTwoAssetBarrier, i64 0, i64 %53
%55 = load i32, i32* %54
br label %56
56: ; preds = %52, %13
%57 = phi i32 [ 1, %13 ], [ %55, %52 ]
%58 = add i32 %0, -1
%59 = icmp ult i32 %58, 4
%60 = select i1 %59, i32 1, i32 -1
%61 = tail call double @sqrt(double %5)
%62 = tail call double @sqrt(double %6)
%63 = fdiv double %4, %2
%64 = tail call double @log(double %63)
%65 = fmul double %11, %11
%66 = fdiv double %5, %6
%67 = tail call double @sqrt(double %66)
%68 = fmul double %10, %10
%69 = fmul double %68, 5.000000e-01
%70 = fsub double %8, %69
%71 = fmul double %65, 5.000000e-01
%72 = fsub double %9, %71
%73 = fdiv double %1, %3
%74 = tail call double @log(double %73)
%75 = tail call double @llvm.fmuladd.f64(double %10, double %10, double %70)
%76 = tail call double @llvm.fmuladd.f64(double %75, double %6, double %74)
%77 = fneg double %10
%78 = fmul double %12, 2.000000e+00
%79 = fmul double %78, %64
%80 = insertelement <2 x double> poison, double %62, i64 0
%81 = shufflevector <2 x double> %80, <2 x double> poison, <2 x i32> zeroinitializer
%82 = insertelement <2 x double> poison, double %11, i64 0
%83 = insertelement <2 x double> %82, double %10, i64 1
%84 = fmul <2 x double> %81, %83
%85 = insertelement <2 x double> poison, double %79, i64 0
%86 = insertelement <2 x double> %85, double %76, i64 1
%87 = fdiv <2 x double> %86, %84
%88 = extractelement <2 x double> %87, i64 1
%89 = tail call double @llvm.fmuladd.f64(double %77, double %62, double %88)
%90 = extractelement <2 x double> %87, i64 0
%91 = fadd double %90, %88
%92 = fadd double %90, %89
%93 = fmul double %10, %12
%94 = tail call double @llvm.fmuladd.f64(double %93, double %11, double %72)
%95 = fneg double %94
%96 = tail call double @llvm.fmuladd.f64(double %95, double %5, double %64)
%97 = fmul double %61, %11
%98 = fmul double %64, 2.000000e+00
%99 = insertelement <2 x double> poison, double %96, i64 0
%100 = insertelement <2 x double> %99, double %98, i64 1
%101 = insertelement <2 x double> poison, double %97, i64 0
%102 = shufflevector <2 x double> %101, <2 x double> poison, <2 x i32> zeroinitializer
%103 = fdiv <2 x double> %100, %102
%104 = extractelement <2 x double> %103, i64 0
%105 = tail call double @llvm.fmuladd.f64(double %93, double %61, double %104)
%106 = extractelement <2 x double> %103, i64 1
%107 = fsub double %104, %106
%108 = fsub double %105, %106
%109 = fcmp ord double %70, 0.000000e+00
%110 = zext i1 %109 to i32
%111 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %110)
%112 = fcmp ord double %72, 0.000000e+00
%113 = zext i1 %112 to i32
%114 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %113)
%115 = fcmp ord double %88, 0.000000e+00
%116 = zext i1 %115 to i32
%117 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %116)
%118 = fcmp ord double %89, 0.000000e+00
%119 = zext i1 %118 to i32
%120 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %119)
%121 = fcmp ord double %91, 0.000000e+00
%122 = zext i1 %121 to i32
%123 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %122)
%124 = fcmp ord double %92, 0.000000e+00
%125 = zext i1 %124 to i32
%126 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %125)
%127 = fcmp ord double %104, 0.000000e+00
%128 = zext i1 %127 to i32
%129 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %128)
%130 = fcmp ord double %105, 0.000000e+00
%131 = zext i1 %130 to i32
%132 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %131)
%133 = fcmp ord double %107, 0.000000e+00
%134 = zext i1 %133 to i32
%135 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %134)
%136 = fcmp ord double %108, 0.000000e+00
%137 = zext i1 %136 to i32
%138 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %137)
%139 = sitofp i32 %60 to double
%140 = fmul double %139, %1
%141 = fsub double %8, %7
%142 = fmul double %141, %6
%143 = tail call double @exp(double %142)
%144 = fmul double %140, %143
%145 = fmul double %88, %139
%146 = sitofp i32 %57 to double
%147 = fmul double %104, %146
%148 = sub nsw i32 0, %57
%149 = select i1 %59, i32 %148, i32 %57
%150 = sitofp i32 %149 to double
%151 = fmul double %150, %12
%152 = fmul double %151, %67
%153 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %145, double %147, double %152)
%154 = sitofp i32 %153 to double
%155 = fmul double %94, %98
%156 = fdiv double %155, %65
%157 = tail call double @exp(double %156)
%158 = fmul double %91, %139
%159 = fmul double %107, %146
%160 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %158, double %159, double %152)
%161 = sitofp i32 %160 to double
%162 = fneg double %157
%163 = tail call double @llvm.fmuladd.f64(double %162, double %161, double %154)
%164 = fneg double %7
%165 = fmul double %164, %6
%166 = tail call double @exp(double %165)
%167 = fmul double %89, %139
%168 = fmul double %105, %146
%169 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %167, double %168, double %152)
%170 = sitofp i32 %169 to double
%171 = fmul double %72, %98
%172 = fdiv double %171, %65
%173 = tail call double @exp(double %172)
%174 = fmul double %92, %139
%175 = fmul double %108, %146
%176 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %174, double %175, double %152)
%177 = sitofp i32 %176 to double
%178 = fneg double %173
%179 = tail call double @llvm.fmuladd.f64(double %178, double %177, double %170)
%180 = fneg double %166
%181 = fmul double %139, %180
%182 = fmul double %181, %3
%183 = fmul double %182, %179
%184 = tail call double @llvm.fmuladd.f64(double %144, double %163, double %183)
switch i32 %0, label %193 [
i32 4, label %194
i32 2, label %194
i32 8, label %194
i32 6, label %194
i32 3, label %185
i32 1, label %185
i32 7, label %189
i32 5, label %189
]
185: ; preds = %56, %56
%186 = tail call i32 (double, double, double, double, double, double, ...) bitcast (i32 (...)* @gbs_call to i32 (double, double, double, double, double, double, ...)*)(double %1, double %3, double %6, double %7, double %8, double %10)
%187 = sitofp i32 %186 to double
%188 = fsub double %187, %184
br label %194
189: ; preds = %56, %56
%190 = tail call i32 (double, double, double, double, double, double, ...) bitcast (i32 (...)* @gbs_put to i32 (double, double, double, double, double, double, ...)*)(double %1, double %3, double %6, double %7, double %8, double %10)
%191 = sitofp i32 %190 to double
%192 = fsub double %191, %184
br label %194
193: ; preds = %56
tail call void @abort()
unreachable
194: ; preds = %56, %56, %56, %56, %189, %185
%195 = phi double [ %192, %189 ], [ %188, %185 ], [ %184, %56 ], [ %184, %56 ], [ %184, %56 ], [ %184, %56 ]
ret double %195
}