double OptionsOnTheMaxMin(const char *TypeFlag, double S1, double S2, double X,
                          double T, double r, double b1, double b2, double v1,
                          double v2, double Rho) {
  double sT, v, rho1, rho2, d, _y1, y2, result;
  assert(((S1) == (S1)) && (S1) >= 0.000001 && (S1) <= 1000000000000.0);
  assert(((S2) == (S2)) && (S2) >= 0.000001 && (S2) <= 1000000000000.0);
  assert(((X) == (X)) && (X) >= 0.000001 && (X) <= 1000000000000.0);
  assert(((T) == (T)) && (T) >= (1.0 / (253.0 * 24.0)) && (T) <= (20.0));
  assert(((r) == (r)) && (r) >= 0.0 && (r) <= 1000.0);
  assert(((b1) == (b1)) && (b1) >= -1000.0 && (b1) <= 1000.0);
  assert(((b2) == (b2)) && (b2) >= -1000.0 && (b2) <= 1000.0);
  assert(((v1) == (v1)) && (v1) >= 0.0000001 && v1 <= 100.99999);
  assert(((v2) == (v2)) && (v2) >= 0.0000001 && v2 <= 100.99999);
  sT = sqrt(T);
  v = sqrt(((v1) * (v1)) + ((v2) * (v2)) - 2.0 * Rho * v1 * v2);
  rho1 = (v1 - Rho * v2) / v;
  rho2 = (v2 - Rho * v1) / v;
  d = (log(S1 / S2) + (b1 - b2 + ((v) * (v)) / 2.0) * T) / (v * sT);
  _y1 = (log(S1 / X) + (b1 + ((v1) * (v1)) / 2.0) * T) / (v1 * sT);
  y2 = (log(S2 / X) + (b2 + ((v2) * (v2)) / 2.0) * T) / (v2 * sT);
  if (!strcmp(TypeFlag, "cmin")) {
    result = S1 * exp((b1 - r) * T) * cbnd(_y1, -d, -rho1) +
             S2 * exp((b2 - r) * T) * cbnd(y2, d - v * sT, -rho2) -
             X * exp(-r * T) * cbnd(_y1 - v1 * sT, y2 - v2 * sT, Rho);
  } else if (!strcmp(TypeFlag, "cmax")) {
    result = S1 * exp((b1 - r) * T) * cbnd(_y1, d, rho1) +
             S2 * exp((b2 - r) * T) * cbnd(y2, -d + v * sT, rho2) -
             X * exp(-r * T) * (1.0 - cbnd(-_y1 + v1 * sT, -y2 + v2 * sT, Rho));
  } else if (!strcmp(TypeFlag, "pmin")) {
    result =
        X * exp(-r * T) - S1 * exp((b1 - r) * T) +
        EuropeanExchangeOption(S1, S2, 1.0, 1.0, T, r, b1, b2, v1, v2, Rho) +
        OptionsOnTheMaxMin("cmin", S1, S2, X, T, r, b1, b2, v1, v2, Rho);
  } else if (!strcmp(TypeFlag, "pmax")) {
    result =
        X * exp(-r * T) - S2 * exp((b2 - r) * T) -
        EuropeanExchangeOption(S1, S2, 1.0, 1.0, T, r, b1, b2, v1, v2, Rho) +
        OptionsOnTheMaxMin("cmax", S1, S2, X, T, r, b1, b2, v1, v2, Rho);
  } else
    abort();
  assert(((result) == (result)));
  return result;
}


x86 assembly (clang, -O0):
<OptionsOnTheMaxMin>:
push   %rbp
mov    %rsp,%rbp
sub    $0x180,%rsp
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
movsd  -0x10(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x10(%rbp),%xmm0
mov    %al,-0x89(%rbp)
jne    1226 <OptionsOnTheMaxMin+0x96>
jp     1226 <OptionsOnTheMaxMin+0x96>
movsd  -0x10(%rbp),%xmm0
xor    %eax,%eax
movsd  0xe00(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x89(%rbp)
jb     1226 <OptionsOnTheMaxMin+0x96>
movsd  0xdf0(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
setae  %al
mov    %al,-0x89(%rbp)
mov    -0x89(%rbp),%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,-0x8a(%rbp)
jne    128b <OptionsOnTheMaxMin+0xfb>
jp     128b <OptionsOnTheMaxMin+0xfb>
movsd  -0x18(%rbp),%xmm0
xor    %eax,%eax
movsd  0xd9b(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x8a(%rbp)
jb     128b <OptionsOnTheMaxMin+0xfb>
movsd  0xd8b(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
setae  %al
mov    %al,-0x8a(%rbp)
mov    -0x8a(%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,-0x8b(%rbp)
jne    12f0 <OptionsOnTheMaxMin+0x160>
jp     12f0 <OptionsOnTheMaxMin+0x160>
movsd  -0x20(%rbp),%xmm0
xor    %eax,%eax
movsd  0xd36(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x8b(%rbp)
jb     12f0 <OptionsOnTheMaxMin+0x160>
movsd  0xd26(%rip),%xmm0
ucomisd -0x20(%rbp),%xmm0
setae  %al
mov    %al,-0x8b(%rbp)
mov    -0x8b(%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,-0x8c(%rbp)
jne    1355 <OptionsOnTheMaxMin+0x1c5>
jp     1355 <OptionsOnTheMaxMin+0x1c5>
movsd  -0x28(%rbp),%xmm0
xor    %eax,%eax
movsd  0xce1(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x8c(%rbp)
jb     1355 <OptionsOnTheMaxMin+0x1c5>
movsd  0xcd1(%rip),%xmm0
ucomisd -0x28(%rbp),%xmm0
setae  %al
mov    %al,-0x8c(%rbp)
mov    -0x8c(%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,-0x8d(%rbp)
jne    13b5 <OptionsOnTheMaxMin+0x225>
jp     13b5 <OptionsOnTheMaxMin+0x225>
movsd  -0x30(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x8d(%rbp)
jb     13b5 <OptionsOnTheMaxMin+0x225>
movsd  0xc79(%rip),%xmm0
ucomisd -0x30(%rbp),%xmm0
setae  %al
mov    %al,-0x8d(%rbp)
mov    -0x8d(%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,-0x8e(%rbp)
jne    141a <OptionsOnTheMaxMin+0x28a>
jp     141a <OptionsOnTheMaxMin+0x28a>
movsd  -0x38(%rbp),%xmm0
xor    %eax,%eax
movsd  0xc34(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x8e(%rbp)
jb     141a <OptionsOnTheMaxMin+0x28a>
movsd  0xc14(%rip),%xmm0
ucomisd -0x38(%rbp),%xmm0
setae  %al
mov    %al,-0x8e(%rbp)
mov    -0x8e(%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,-0x8f(%rbp)
jne    147f <OptionsOnTheMaxMin+0x2ef>
jp     147f <OptionsOnTheMaxMin+0x2ef>
movsd  -0x40(%rbp),%xmm0
xor    %eax,%eax
movsd  0xbcf(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x8f(%rbp)
jb     147f <OptionsOnTheMaxMin+0x2ef>
movsd  0xbaf(%rip),%xmm0
ucomisd -0x40(%rbp),%xmm0
setae  %al
mov    %al,-0x8f(%rbp)
mov    -0x8f(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x48(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x48(%rbp),%xmm0
mov    %al,-0x90(%rbp)
jne    14e4 <OptionsOnTheMaxMin+0x354>
jp     14e4 <OptionsOnTheMaxMin+0x354>
movsd  -0x48(%rbp),%xmm0
xor    %eax,%eax
movsd  0xb72(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x90(%rbp)
jb     14e4 <OptionsOnTheMaxMin+0x354>
movsd  0xb62(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
setae  %al
mov    %al,-0x90(%rbp)
mov    -0x90(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  0x10(%rbp),%xmm0
xor    %eax,%eax
ucomisd 0x10(%rbp),%xmm0
mov    %al,-0x91(%rbp)
jne    1549 <OptionsOnTheMaxMin+0x3b9>
jp     1549 <OptionsOnTheMaxMin+0x3b9>
movsd  0x10(%rbp),%xmm0
xor    %eax,%eax
movsd  0xb0d(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x91(%rbp)
jb     1549 <OptionsOnTheMaxMin+0x3b9>
movsd  0xafd(%rip),%xmm0
ucomisd 0x10(%rbp),%xmm0
setae  %al
mov    %al,-0x91(%rbp)
mov    -0x91(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x28(%rbp),%xmm0
call   10a0 <sqrt@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm2
movsd  0x10(%rbp),%xmm0
mulsd  0x10(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xab2(%rip),%xmm0
mulsd  0x18(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  0x10(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   10a0 <sqrt@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  0x18(%rbp),%xmm0
movsd  0x10(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0x10(%rbp),%xmm1
movsd  0x18(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x10(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
call   1090 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
mulsd  -0x58(%rbp),%xmm2
movsd  0x9dc(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm0
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x58(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x10(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1090 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
movsd  0x98b(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm0
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x18(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1090 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  0x10(%rbp),%xmm2
mulsd  0x10(%rbp),%xmm2
movsd  0x93a(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm0
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x10(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x8(%rbp),%rdi
lea    0x917(%rip),%rsi
call   1060 <strcmp@plt>
cmp    $0x0,%eax
jne    197f <OptionsOnTheMaxMin+0x7ef>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x60(%rbp),%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x68(%rbp),%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x78(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  0x10(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x18(%rbp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1ecf <OptionsOnTheMaxMin+0xd3f>
mov    -0x8(%rbp),%rdi
lea    0x6cb(%rip),%rsi
call   1060 <strcmp@plt>
cmp    $0x0,%eax
jne    1b97 <OptionsOnTheMaxMin+0xa07>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x118(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x110(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x58(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x68(%rbp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
movsd  -0x108(%rbp),%xmm1
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0xf8(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x80(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  0x10(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x18(%rbp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm1
ff
cvtsi2sd %eax,%xmm3
movsd  0x4e1(%rip),%xmm2
subsd  %xmm3,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1eca <OptionsOnTheMaxMin+0xd3a>
mov    -0x8(%rbp),%rdi
lea    0x4b8(%rip),%rsi
call   1060 <strcmp@plt>
cmp    $0x0,%eax
jne    1d29 <OptionsOnTheMaxMin+0xb99>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movsd  -0x140(%rbp),%xmm1
ff
movsd  -0x138(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x130(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm4
movsd  -0x30(%rbp),%xmm5
movsd  -0x38(%rbp),%xmm6
movsd  -0x40(%rbp),%xmm7
movsd  -0x48(%rbp),%xmm10
movsd  0x10(%rbp),%xmm9
movsd  0x18(%rbp),%xmm8
movsd  0x3be(%rip),%xmm3
movaps %xmm3,%xmm2
movsd  %xmm10,(%rsp)
movsd  %xmm9,0x8(%rsp)
movsd  %xmm8,0x10(%rsp)
mov    $0x8,%al
call   10b0 <EuropeanExchangeOption@plt>
movsd  -0x128(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
movsd  -0x30(%rbp),%xmm4
movsd  -0x38(%rbp),%xmm5
movsd  -0x40(%rbp),%xmm6
movsd  -0x48(%rbp),%xmm7
movsd  0x10(%rbp),%xmm9
movsd  0x18(%rbp),%xmm8
lea    0x355(%rip),%rdi
movsd  %xmm9,(%rsp)
movsd  %xmm8,0x8(%rsp)
call   1040 <OptionsOnTheMaxMin@plt>
movaps %xmm0,%xmm1
movsd  -0x120(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1ec5 <OptionsOnTheMaxMin+0xd35>
mov    -0x8(%rbp),%rdi
lea    0x32b(%rip),%rsi
call   1060 <strcmp@plt>
cmp    $0x0,%eax
jne    1ebb <OptionsOnTheMaxMin+0xd2b>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1080 <exp@plt>
movsd  -0x168(%rbp),%xmm1
ff
movsd  -0x160(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x158(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm4
movsd  -0x30(%rbp),%xmm5
movsd  -0x38(%rbp),%xmm6
movsd  -0x40(%rbp),%xmm7
movsd  -0x48(%rbp),%xmm10
movsd  0x10(%rbp),%xmm9
movsd  0x18(%rbp),%xmm8
movsd  0x22c(%rip),%xmm3
movaps %xmm3,%xmm2
movsd  %xmm10,(%rsp)
movsd  %xmm9,0x8(%rsp)
movsd  %xmm8,0x10(%rsp)
mov    $0x8,%al
call   10b0 <EuropeanExchangeOption@plt>
movsd  -0x150(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
movsd  -0x30(%rbp),%xmm4
movsd  -0x38(%rbp),%xmm5
movsd  -0x40(%rbp),%xmm6
movsd  -0x48(%rbp),%xmm7
movsd  0x10(%rbp),%xmm9
movsd  0x18(%rbp),%xmm8
lea    0x1c8(%rip),%rdi
movsd  %xmm9,(%rsp)
movsd  %xmm8,0x8(%rsp)
call   1040 <OptionsOnTheMaxMin@plt>
movaps %xmm0,%xmm1
movsd  -0x148(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1ec0 <OptionsOnTheMaxMin+0xd30>
call   1030 <abort@plt>
jmp    1ec5 <OptionsOnTheMaxMin+0xd35>
jmp    1eca <OptionsOnTheMaxMin+0xd3a>
jmp    1ecf <OptionsOnTheMaxMin+0xd3f>
movsd  -0x88(%rbp),%xmm0
ff
ucomisd -0x88(%rbp),%xmm0
ff
sete   %al
setnp  %cl
and    %cl,%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1070 <assert@plt>
movsd  -0x88(%rbp),%xmm0
ff
add    $0x180,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<OptionsOnTheMaxMin>:
push   %rbx
sub    $0xc0,%rsp
movsd  %xmm7,0x28(%rsp)
movsd  %xmm6,0x38(%rsp)
movsd  %xmm5,0x48(%rsp)
movaps %xmm4,0x60(%rsp)
movsd  %xmm3,0x20(%rsp)
movsd  %xmm2,0x58(%rsp)
movsd  %xmm1,0x40(%rsp)
mov    %rdi,%rbx
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xe2d(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xe28(%rip),%xmm1
movsd  %xmm0,0x50(%rsp)
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0x40(%rsp),%xmm1
ucomisd %xmm1,%xmm1
setnp  %al
ucomisd 0xdf2(%rip),%xmm1
setae  %cl
and    %al,%cl
movsd  0xded(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0x58(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xdbd(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xdb8(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0x20(%rsp),%xmm1
ucomisd %xmm1,%xmm1
setnp  %al
ucomisd 0xd98(%rip),%xmm1
setae  %cl
and    %al,%cl
movsd  0xd93(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1070 <assert@plt>
xorpd  %xmm1,%xmm1
movapd 0x60(%rsp),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
movsd  0xd6f(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %cl
and    %al,%cl
movzbl %cl,%edi
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0x48(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xd4f(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xd3a(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0x38(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xd1a(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xd05(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0x28(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xced(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xce8(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0xd0(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xcb5(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xcb0(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0x20(%rsp),%xmm0
ucomisd 0xcaf(%rip),%xmm0
jb     13b1 <OptionsOnTheMaxMin+0x221>
sqrtsd %xmm0,%xmm0
jmp    13b6 <OptionsOnTheMaxMin+0x226>
call   10a0 <sqrt@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0xd0(%rsp),%xmm4
movapd %xmm4,%xmm0
mulsd  %xmm4,%xmm0
movsd  0x28(%rsp),%xmm3
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
movsd  %xmm1,0x70(%rsp)
movsd  %xmm0,0x78(%rsp)
addsd  %xmm0,%xmm1
movsd  0xc4d(%rip),%xmm0
movsd  0xd8(%rsp),%xmm2
mulsd  %xmm2,%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm4,%xmm0
addsd  %xmm1,%xmm0
ucomisd 0xc44(%rip),%xmm0
jb     141c <OptionsOnTheMaxMin+0x28c>
sqrtsd %xmm0,%xmm0
jmp    142a <OptionsOnTheMaxMin+0x29a>
call   10a0 <sqrt@plt>
movsd  0xd8(%rsp),%xmm2
movsd  0x40(%rsp),%xmm1
movsd  0x50(%rsp),%xmm3
movapd %xmm0,0x80(%rsp)
movapd %xmm2,%xmm5
movsd  0xd0(%rsp),%xmm6
mulsd  %xmm6,%xmm5
movsd  0x28(%rsp),%xmm7
movapd %xmm7,%xmm4
subsd  %xmm5,%xmm4
divsd  %xmm0,%xmm4
movapd %xmm4,0xa0(%rsp)
movapd %xmm2,%xmm4
mulsd  %xmm7,%xmm4
movapd %xmm6,%xmm2
subsd  %xmm4,%xmm2
divsd  %xmm0,%xmm2
movapd %xmm2,0xb0(%rsp)
movapd %xmm3,%xmm0
divsd  %xmm1,%xmm0
call   1090 <log@plt>
movsd  0x48(%rsp),%xmm1
subsd  0x38(%rsp),%xmm1
movsd  0x30(%rsp),%xmm2
movapd 0x80(%rsp),%xmm3
mulsd  %xmm3,%xmm2
mulsd  %xmm3,%xmm3
mulsd  0xb88(%rip),%xmm3
addsd  %xmm1,%xmm3
mulsd  0x20(%rsp),%xmm3
addsd  %xmm0,%xmm3
movsd  %xmm2,0x90(%rsp)
divsd  %xmm2,%xmm3
movapd %xmm3,0x80(%rsp)
movsd  0x50(%rsp),%xmm0
divsd  0x58(%rsp),%xmm0
call   1090 <log@plt>
movsd  0x70(%rsp),%xmm1
mulsd  0xb45(%rip),%xmm1
addsd  0x48(%rsp),%xmm1
mulsd  0x20(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  0x30(%rsp),%xmm0
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x98(%rsp)
divsd  %xmm0,%xmm1
movsd  %xmm1,0x70(%rsp)
movsd  0x40(%rsp),%xmm0
divsd  0x58(%rsp),%xmm0
call   1090 <log@plt>
movsd  0x78(%rsp),%xmm1
mulsd  0xaf7(%rip),%xmm1
addsd  0x38(%rsp),%xmm1
mulsd  0x20(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  0x30(%rsp),%xmm0
mulsd  0xd0(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
divsd  %xmm0,%xmm1
movsd  %xmm1,0x78(%rsp)
lea    0xae9(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcmp@plt>
test   %eax,%eax
je     16ca <OptionsOnTheMaxMin+0x53a>
lea    0xad7(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcmp@plt>
test   %eax,%eax
je     1804 <OptionsOnTheMaxMin+0x674>
lea    0xac5(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcmp@plt>
test   %eax,%eax
je     1936 <OptionsOnTheMaxMin+0x7a6>
lea    0xab3(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcmp@plt>
test   %eax,%eax
jne    1a80 <OptionsOnTheMaxMin+0x8f0>
movapd 0xa7c(%rip),%xmm0
xorpd  0x60(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0x38(%rsp),%xmm0
subsd  0x60(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
movsd  0x40(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x30(%rsp),%xmm3
mulsd  0x58(%rsp),%xmm3
subsd  %xmm0,%xmm3
movsd  %xmm3,0x30(%rsp)
movsd  0xd8(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0xd0(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x28(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x9ed(%rip),%xmm2
movsd  0x50(%rsp),%xmm0
movaps %xmm2,%xmm3
movsd  0x20(%rsp),%xmm4
movaps 0x60(%rsp),%xmm5
movsd  0x48(%rsp),%xmm6
movsd  0x38(%rsp),%xmm7
mov    $0x8,%al
call   10b0 <EuropeanExchangeOption@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x30(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0xd8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0xd0(%rsp),%xmm0
movsd  %xmm0,(%rsp)
lea    0x9b0(%rip),%rdi
jmp    1a1f <OptionsOnTheMaxMin+0x88f>
movsd  0x48(%rsp),%xmm0
subsd  0x60(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
mulsd  0x50(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movaps 0x96c(%rip),%xmm0
movaps 0x80(%rsp),%xmm1
xorps  %xmm0,%xmm1
movaps 0xa0(%rsp),%xmm2
xorps  %xmm0,%xmm2
movsd  0x70(%rsp),%xmm0
mov    $0x3,%al
call   1050 <cbnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x38(%rsp),%xmm0
subsd  0x60(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
mulsd  0x40(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movapd 0x80(%rsp),%xmm1
subsd  0x90(%rsp),%xmm1
movaps 0xb0(%rsp),%xmm2
xorps  0x8f2(%rip),%xmm2
movsd  0x78(%rsp),%xmm0
mov    $0x3,%al
call   1050 <cbnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x38(%rsp),%xmm0
addsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movapd 0x60(%rsp),%xmm0
xorpd  0x8be(%rip),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0x70(%rsp),%xmm0
subsd  0x98(%rsp),%xmm0
movsd  0x78(%rsp),%xmm1
subsd  0x30(%rsp),%xmm1
movsd  0xd8(%rsp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x20(%rsp),%xmm1
mulsd  0x58(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x28(%rsp),%xmm0
subsd  %xmm1,%xmm0
jmp    1a5a <OptionsOnTheMaxMin+0x8ca>
movsd  0x48(%rsp),%xmm0
subsd  0x60(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
mulsd  0x50(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x70(%rsp),%xmm0
movaps 0x80(%rsp),%xmm1
movaps 0xa0(%rsp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x38(%rsp),%xmm0
subsd  0x60(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
mulsd  0x40(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x90(%rsp),%xmm1
subsd  0x80(%rsp),%xmm1
movsd  0x78(%rsp),%xmm0
movaps 0xb0(%rsp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x38(%rsp),%xmm0
addsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movapd 0x60(%rsp),%xmm0
xorpd  0x798(%rip),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0x98(%rsp),%xmm0
subsd  0x70(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
subsd  0x78(%rsp),%xmm1
movsd  0xd8(%rsp),%xmm2
mov    $0x3,%al
call   1050 <cbnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x73d(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0x28(%rsp),%xmm0
movsd  0x20(%rsp),%xmm2
mulsd  0x58(%rsp),%xmm2
mulsd  %xmm1,%xmm2
subsd  %xmm2,%xmm0
jmp    1a5a <OptionsOnTheMaxMin+0x8ca>
movapd 0x722(%rip),%xmm0
xorpd  0x60(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0x48(%rsp),%xmm0
subsd  0x60(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1080 <exp@plt>
movsd  0x50(%rsp),%xmm3
mulsd  %xmm3,%xmm0
movsd  0x30(%rsp),%xmm1
mulsd  0x58(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0xd8(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0xd0(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x28(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x693(%rip),%xmm2
movapd %xmm3,%xmm0
movsd  0x40(%rsp),%xmm1
movaps %xmm2,%xmm3
movsd  0x20(%rsp),%xmm4
movaps 0x60(%rsp),%xmm5
movsd  0x48(%rsp),%xmm6
movsd  0x38(%rsp),%xmm7
mov    $0x8,%al
call   10b0 <EuropeanExchangeOption@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0xd8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0xd0(%rsp),%xmm0
movsd  %xmm0,(%rsp)
lea    0x651(%rip),%rdi
movsd  0x50(%rsp),%xmm0
movsd  0x40(%rsp),%xmm1
movsd  0x58(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
movapd 0x60(%rsp),%xmm4
movsd  0x48(%rsp),%xmm5
movsd  0x38(%rsp),%xmm6
movsd  0x28(%rsp),%xmm7
call   1040 <OptionsOnTheMaxMin@plt>
addsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
xor    %edi,%edi
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1070 <assert@plt>
movsd  0x28(%rsp),%xmm0
add    $0xc0,%rsp
pop    %rbx
ret
call   1030 <abort@plt>

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

LLVM IR (-O2):
@.str = [5 x i8] c"cmin\00"
@.str.1 = [5 x i8] c"cmax\00"
@.str.2 = [5 x i8] c"pmin\00"
@.str.3 = [5 x i8] c"pmax\00"
define double @OptionsOnTheMaxMin(i8* nocapture %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10) {
%12 = fcmp ord double %1, 0.000000e+00
%13 = fcmp oge double %1, 0x3EB0C6F7A0B5ED8D
%14 = and i1 %12, %13
%15 = fcmp ole double %1, 1.000000e+12
%16 = and i1 %15, %14
%17 = zext i1 %16 to i32
%18 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %17)
%19 = fcmp ord double %2, 0.000000e+00
%20 = fcmp oge double %2, 0x3EB0C6F7A0B5ED8D
%21 = and i1 %19, %20
%22 = fcmp ole double %2, 1.000000e+12
%23 = and i1 %22, %21
%24 = zext i1 %23 to i32
%25 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %24)
%26 = fcmp ord double %3, 0.000000e+00
%27 = fcmp oge double %3, 0x3EB0C6F7A0B5ED8D
%28 = and i1 %26, %27
%29 = fcmp ole double %3, 1.000000e+12
%30 = and i1 %29, %28
%31 = zext i1 %30 to i32
%32 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %31)
%33 = fcmp ord double %4, 0.000000e+00
%34 = fcmp oge double %4, 0x3F2596179C29D2CE
%35 = and i1 %33, %34
%36 = fcmp ole double %4, 2.000000e+01
%37 = and i1 %36, %35
%38 = zext i1 %37 to i32
%39 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %38)
%40 = fcmp oge double %5, 0.000000e+00
%41 = fcmp ole double %5, 1.000000e+03
%42 = and i1 %40, %41
%43 = zext i1 %42 to i32
%44 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %43)
%45 = fcmp ord double %6, 0.000000e+00
%46 = fcmp oge double %6, -1.000000e+03
%47 = and i1 %45, %46
%48 = fcmp ole double %6, 1.000000e+03
%49 = and i1 %48, %47
%50 = zext i1 %49 to i32
%51 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %50)
%52 = fcmp ord double %7, 0.000000e+00
%53 = fcmp oge double %7, -1.000000e+03
%54 = and i1 %52, %53
%55 = fcmp ole double %7, 1.000000e+03
%56 = and i1 %55, %54
%57 = zext i1 %56 to i32
%58 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %57)
%59 = fcmp ord double %8, 0.000000e+00
%60 = fcmp oge double %8, 0x3E7AD7F29ABCAF48
%61 = and i1 %59, %60
%62 = fcmp ole double %8, 0x40593FFFD60E94EE
%63 = and i1 %62, %61
%64 = zext i1 %63 to i32
%65 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %64)
%66 = fcmp ord double %9, 0.000000e+00
%67 = fcmp oge double %9, 0x3E7AD7F29ABCAF48
%68 = and i1 %66, %67
%69 = fcmp ole double %9, 0x40593FFFD60E94EE
%70 = and i1 %69, %68
%71 = zext i1 %70 to i32
%72 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %71)
%73 = tail call double @sqrt(double %4)
%74 = fmul double %9, %9
%75 = tail call double @llvm.fmuladd.f64(double %8, double %8, double %74)
%76 = fmul double %10, -2.000000e+00
%77 = fmul double %76, %8
%78 = tail call double @llvm.fmuladd.f64(double %77, double %9, double %75)
%79 = tail call double @sqrt(double %78)
%80 = fneg double %10
%81 = tail call double @llvm.fmuladd.f64(double %80, double %9, double %8)
%82 = fdiv double %81, %79
%83 = tail call double @llvm.fmuladd.f64(double %80, double %8, double %9)
%84 = fdiv double %83, %79
%85 = fdiv double %1, %2
%86 = tail call double @log(double %85)
%87 = fsub double %6, %7
%88 = fmul double %79, %79
%89 = fmul double %88, 5.000000e-01
%90 = fadd double %87, %89
%91 = tail call double @llvm.fmuladd.f64(double %90, double %4, double %86)
%92 = fmul double %73, %79
%93 = fdiv double %91, %92
%94 = fdiv double %1, %3
%95 = tail call double @log(double %94)
%96 = fmul double %8, %8
%97 = fmul double %96, 5.000000e-01
%98 = fadd double %97, %6
%99 = tail call double @llvm.fmuladd.f64(double %98, double %4, double %95)
%100 = fmul double %73, %8
%101 = fdiv double %99, %100
%102 = fdiv double %2, %3
%103 = tail call double @log(double %102)
%104 = fmul double %74, 5.000000e-01
%105 = fadd double %104, %7
%106 = tail call double @llvm.fmuladd.f64(double %105, double %4, double %103)
%107 = fmul double %73, %9
%108 = fdiv double %106, %107
%109 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%110 = icmp eq i32 %109, 0
br i1 %110, label %111, label %143
111: ; preds = %11
%112 = fsub double %6, %5
%113 = fmul double %112, %4
%114 = tail call double @exp(double %113)
%115 = fmul double %114, %1
%116 = fneg double %93
%117 = fneg double %82
%118 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %101, double %116, double %117)
%119 = sitofp i32 %118 to double
%120 = fsub double %7, %5
%121 = fmul double %120, %4
%122 = tail call double @exp(double %121)
%123 = fmul double %122, %2
%124 = fneg double %79
%125 = tail call double @llvm.fmuladd.f64(double %124, double %73, double %93)
%126 = fneg double %84
%127 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %108, double %125, double %126)
%128 = sitofp i32 %127 to double
%129 = fmul double %123, %128
%130 = tail call double @llvm.fmuladd.f64(double %115, double %119, double %129)
%131 = fneg double %5
%132 = fmul double %131, %4
%133 = tail call double @exp(double %132)
%134 = fneg double %8
%135 = tail call double @llvm.fmuladd.f64(double %134, double %73, double %101)
%136 = fneg double %9
%137 = tail call double @llvm.fmuladd.f64(double %136, double %73, double %108)
%138 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %135, double %137, double %10)
%139 = sitofp i32 %138 to double
%140 = fneg double %133
%141 = fmul double %140, %3
%142 = tail call double @llvm.fmuladd.f64(double %141, double %139, double %130)
br label %213
143: ; preds = %11
%144 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%145 = icmp eq i32 %144, 0
br i1 %145, label %146, label %176
146: ; preds = %143
%147 = fsub double %6, %5
%148 = fmul double %147, %4
%149 = tail call double @exp(double %148)
%150 = fmul double %149, %1
%151 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %101, double %93, double %82)
%152 = sitofp i32 %151 to double
%153 = fsub double %7, %5
%154 = fmul double %153, %4
%155 = tail call double @exp(double %154)
%156 = fmul double %155, %2
%157 = fneg double %93
%158 = tail call double @llvm.fmuladd.f64(double %79, double %73, double %157)
%159 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %108, double %158, double %84)
%160 = sitofp i32 %159 to double
%161 = fmul double %156, %160
%162 = tail call double @llvm.fmuladd.f64(double %150, double %152, double %161)
%163 = fneg double %5
%164 = fmul double %163, %4
%165 = tail call double @exp(double %164)
%166 = fneg double %101
%167 = tail call double @llvm.fmuladd.f64(double %8, double %73, double %166)
%168 = fneg double %108
%169 = tail call double @llvm.fmuladd.f64(double %9, double %73, double %168)
%170 = tail call i32 (double, double, double, ...) bitcast (i32 (...)* @cbnd to i32 (double, double, double, ...)*)(double %167, double %169, double %10)
%171 = sitofp i32 %170 to double
%172 = fsub double 1.000000e+00, %171
%173 = fneg double %165
%174 = fmul double %173, %3
%175 = tail call double @llvm.fmuladd.f64(double %174, double %172, double %162)
br label %213
176: ; preds = %143
%177 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
%178 = icmp eq i32 %177, 0
br i1 %178, label %179, label %194
179: ; preds = %176
%180 = fneg double %5
%181 = fmul double %180, %4
%182 = tail call double @exp(double %181)
%183 = fsub double %6, %5
%184 = fmul double %183, %4
%185 = tail call double @exp(double %184)
%186 = fneg double %185
%187 = fmul double %186, %1
%188 = tail call double @llvm.fmuladd.f64(double %3, double %182, double %187)
%189 = tail call i32 (double, double, double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @EuropeanExchangeOption to i32 (double, double, double, double, double, double, double, double, double, double, double, ...)*)(double %1, double %2, double 1.000000e+00, double 1.000000e+00, double %4, double %5, double %6, double %7, double %8, double %9, double %10)
%190 = sitofp i32 %189 to double
%191 = fadd double %188, %190
%192 = tail call double @OptionsOnTheMaxMin(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10)
%193 = fadd double %192, %191
br label %213
194: ; preds = %176
%195 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%196 = icmp eq i32 %195, 0
br i1 %196, label %197, label %212
197: ; preds = %194
%198 = fneg double %5
%199 = fmul double %198, %4
%200 = tail call double @exp(double %199)
%201 = fsub double %7, %5
%202 = fmul double %201, %4
%203 = tail call double @exp(double %202)
%204 = fneg double %203
%205 = fmul double %204, %2
%206 = tail call double @llvm.fmuladd.f64(double %3, double %200, double %205)
%207 = tail call i32 (double, double, double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @EuropeanExchangeOption to i32 (double, double, double, double, double, double, double, double, double, double, double, ...)*)(double %1, double %2, double 1.000000e+00, double 1.000000e+00, double %4, double %5, double %6, double %7, double %8, double %9, double %10)
%208 = sitofp i32 %207 to double
%209 = fsub double %206, %208
%210 = tail call double @OptionsOnTheMaxMin(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10)
%211 = fadd double %210, %209
br label %213
212: ; preds = %194
tail call void @abort()
unreachable
213: ; preds = %146, %197, %179, %111
%214 = phi double [ %211, %197 ], [ %193, %179 ], [ %175, %146 ], [ %142, %111 ]
%215 = fcmp ord double %214, 0.000000e+00
%216 = zext i1 %215 to i32
%217 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %216)
ret double %214
}