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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int exp(double);
double log(double);
double pow(double, int);
double rq_pricing_cumul_bivar_norm_dist(double, double, int);
int rq_pricing_cumul_norm_dist(double);
int sqrt(double);
double rq_pricing_lookback_partial_time_floating_strike(
    short call, double S, double SMin, double SMax, double t1, double T2,
    double r, double b, double v, double lambda) {
  double d1;
  double d2;
  double e1;
  double e2;
  double f1;
  double f2;
  double g1;
  double g2;
  double m;
  double part1;
  double part2;
  double part3;
  if (call)
    m = SMin;
  else
    m = SMax;
  d1 = (log(S / m) + (b + (v * v) / 2) * T2) / (v * sqrt(T2));
  d2 = d1 - v * sqrt(T2);
  e1 = (b + (v * v) / 2) * (T2 - t1) / (v * sqrt(T2 - t1));
  e2 = e1 - v * sqrt(T2 - t1);
  f1 = (log(S / m) + (b + (v * v) / 2) * t1) / (v * sqrt(t1));
  f2 = f1 - v * sqrt(t1);
  g1 = log(lambda) / (v * sqrt(T2));
  g2 = log(lambda) / (v * sqrt(T2 - t1));
  if (call) {
    part1 = S * exp((b - r) * T2) * rq_pricing_cumul_norm_dist(d1 - g1) -
            lambda * m * exp(-r * T2) * rq_pricing_cumul_norm_dist(d2 - g1);
    part2 = exp(-r * T2) * (v * v) / (2 * b) * lambda * S *
                (pow((S / m), (-2 * b / (v * v))) *
                     rq_pricing_cumul_bivar_norm_dist(
                         -f1 + 2 * b * sqrt(t1) / v,
                         -d1 + 2 * b * sqrt(T2) / v - g1, sqrt(t1 / T2)) -
                 exp(b * T2) * pow(lambda, (2 * b / (v * v))) *
                     rq_pricing_cumul_bivar_norm_dist(-d1 - g1, e1 + g2,
                                                      -sqrt(1 - t1 / T2))) +
            S * exp((b - r) * T2) *
                rq_pricing_cumul_bivar_norm_dist(-d1 + g1, e1 - g2,
                                                 -sqrt(1 - t1 / T2));
    part3 = exp(-r * T2) * lambda * m *
                rq_pricing_cumul_bivar_norm_dist(-f2, d2 - g1, -sqrt(t1 / T2)) -
            exp(-b * (T2 - t1)) * exp((b - r) * T2) * (1 + (v * v) / (2 * b)) *
                lambda * S * rq_pricing_cumul_norm_dist(e2 - g2) *
                rq_pricing_cumul_norm_dist(-f1);
  } else {
    part1 = lambda * m * exp(-r * T2) * rq_pricing_cumul_norm_dist(-d2 + g1) -
            S * exp((b - r) * T2) * rq_pricing_cumul_norm_dist(-d1 + g1);
    part2 = -exp(-r * T2) * (v * v) / (2 * b) * lambda * S *
                (pow((S / m), (-2 * b / (v * v))) *
                     rq_pricing_cumul_bivar_norm_dist(
                         f1 - 2 * b * sqrt(t1) / v,
                         d1 - 2 * b * sqrt(T2) / v + g1, sqrt(t1 / T2)) -
                 exp(b * T2) * pow(lambda, (2 * b / (v * v))) *
                     rq_pricing_cumul_bivar_norm_dist(d1 + g1, -e1 - g2,
                                                      -sqrt(1 - t1 / T2))) -
            S * exp((b - r) * T2) *
                rq_pricing_cumul_bivar_norm_dist(d1 - g1, -e1 + g2,
                                                 -sqrt(1 - t1 / T2));
    part3 = -exp(-r * T2) * lambda * m *
                rq_pricing_cumul_bivar_norm_dist(f2, -d2 + g1, -sqrt(t1 / T2)) +
            exp(-b * (T2 - t1)) * exp((b - r) * T2) * (1 + (v * v) / (2 * b)) *
                lambda * S * rq_pricing_cumul_norm_dist(-e2 + g2) *
                rq_pricing_cumul_norm_dist(f1);
  }
  return part1 + part2 + part3;
}


x86 assembly (clang, -O0):
<rq_pricing_lookback_partial_time_floating_strike>:
push   %rbp
mov    %rsp,%rbp
sub    $0x310,%rsp
mov    %di,%ax
movsd  0x10(%rbp),%xmm8
mov    %ax,-0x2(%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)
cmpw   $0x0,-0x2(%rbp)
je     11bd <rq_pricing_lookback_partial_time_floating_strike+0x5d>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    11ca <rq_pricing_lookback_partial_time_floating_strike+0x6a>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
divsd  -0x90(%rbp),%xmm0
ff
call   1060 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
movsd  0x1e0a(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm0
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x128(%rbp),%xmm1
ff
movsd  -0x120(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x118(%rbp),%xmm0
ff
movsd  -0x110(%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,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
movsd  0x1d42(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x108(%rbp),%xmm1
ff
movsd  -0x100(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0xf0(%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,-0x68(%rbp)
movsd  -0x10(%rbp),%xmm0
divsd  -0x90(%rbp),%xmm0
ff
call   1060 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
movsd  0x1c5a(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm0
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xd0(%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,-0x78(%rbp)
movsd  0x10(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0x10(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
cmpw   $0x0,-0x2(%rbp)
je     1b58 <rq_pricing_lookback_partial_time_floating_strike+0x9f8>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x218(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
movsd  -0x218(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x200(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x1f8(%rbp)
ff
movsd  0x10(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x210(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
movsd  -0x210(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x208(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  -0x208(%rbp),%xmm1
ff
movsd  -0x200(%rbp),%xmm0
ff
movsd  -0x1f8(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
cvtsi2sd %eax,%xmm0
movsd  -0x48(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x19c5(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
divsd  -0x90(%rbp),%xmm0
ff
movsd  0x19a5(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
divsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   1070 <pow@plt>
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x1e8(%rbp)
ff
movsd  0x1945(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x1f0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x1f0(%rbp),%xmm1
ff
movsd  -0x1e8(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  -0x48(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x1d8(%rbp)
ff
movsd  0x18d9(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x1e0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x1e0(%rbp),%xmm1
ff
movsd  -0x1d8(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  -0x48(%rbp),%xmm1
addsd  %xmm1,%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x1d0(%rbp),%xmm0
ff
movsd  -0x1c8(%rbp),%xmm1
ff
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  0x10(%rbp),%xmm0
movsd  0x183e(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
divsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   1070 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x28(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
movsd  0x17c3(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1080 <sqrt@plt>
movsd  -0x1b8(%rbp),%xmm0
ff
movsd  -0x1b0(%rbp),%xmm1
ff
xor    %edi,%edi
sub    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  -0x1a8(%rbp),%xmm1
ff
movsd  -0x1a0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x198(%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,-0x170(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
movsd  -0x190(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x28(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
movsd  0x16d2(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1080 <sqrt@plt>
movsd  -0x188(%rbp),%xmm0
ff
movsd  -0x180(%rbp),%xmm1
ff
xor    %edi,%edi
sub    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  -0x178(%rbp),%xmm1
ff
movsd  -0x170(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x168(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
cvtsi2sd %eax,%xmm0
mulsd  0x10(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x160(%rbp),%xmm0
ff
movsd  -0x158(%rbp),%xmm1
ff
xor    %edi,%edi
sub    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x30(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
call   1050 <exp@plt>
mov    %eax,-0x14c(%rbp)
movsd  -0x40(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
mov    %eax,%ecx
mov    -0x14c(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
movsd  0x156a(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm2
movsd  0x1561(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mulsd  0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  -0x148(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  -0x140(%rbp),%xmm1
ff
movsd  -0x138(%rbp),%xmm0
ff
movsd  -0x130(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
jmp    21b9 <rq_pricing_lookback_partial_time_floating_strike+0x1059>
movsd  0x10(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x308(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
movsd  -0x308(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x2f0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0x80(%rbp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x2e8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x300(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
movsd  -0x300(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x2f8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0x80(%rbp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  -0x2f8(%rbp),%xmm1
ff
movsd  -0x2f0(%rbp),%xmm0
ff
movsd  -0x2e8(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  -0x48(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x1337(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x258(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
divsd  -0x90(%rbp),%xmm0
ff
movsd  0x1317(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
divsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   1070 <pow@plt>
movsd  %xmm0,-0x288(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x2d8(%rbp)
ff
movsd  0x12ce(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x2e0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x2e0(%rbp),%xmm1
ff
movsd  -0x2d8(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  -0x48(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x2c0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x2c8(%rbp)
ff
movsd  0x1279(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x2d0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x2d0(%rbp),%xmm1
ff
movsd  -0x2c8(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  -0x48(%rbp),%xmm1
subsd  %xmm1,%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x2b8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x2c0(%rbp),%xmm0
ff
movsd  -0x2b8(%rbp),%xmm1
ff
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  %xmm0,-0x290(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x2b0(%rbp)
ff
movsd  0x10(%rbp),%xmm0
movsd  0x11de(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
divsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   1070 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x2b0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x298(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x2a8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x2a0(%rbp)
ff
movsd  -0x28(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
movsd  0x1163(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1080 <sqrt@plt>
movsd  -0x2a8(%rbp),%xmm0
ff
movsd  -0x2a0(%rbp),%xmm1
ff
xor    %edi,%edi
sub    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  -0x298(%rbp),%xmm1
ff
movsd  -0x290(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x288(%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,-0x260(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x280(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
movsd  -0x280(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x268(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x278(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x270(%rbp)
ff
movsd  -0x28(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
movsd  0x1072(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1080 <sqrt@plt>
movsd  -0x278(%rbp),%xmm0
ff
movsd  -0x270(%rbp),%xmm1
ff
xor    %edi,%edi
sub    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  -0x268(%rbp),%xmm1
ff
movsd  -0x260(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x258(%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,-0xa0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
mulsd  0x10(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x228(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x250(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x248(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
call   1080 <sqrt@plt>
movsd  -0x250(%rbp),%xmm0
ff
movsd  -0x248(%rbp),%xmm1
ff
xor    %edi,%edi
sub    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  %xmm0,-0x220(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x30(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
call   1050 <exp@plt>
mov    %eax,-0x23c(%rbp)
movsd  -0x40(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
mov    %eax,%ecx
mov    -0x23c(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
movsd  0xeed(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  %xmm1,%xmm2
movsd  0xee4(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mulsd  0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x238(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0x88(%rbp),%xmm0
ff
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  -0x238(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x230(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  -0x230(%rbp),%xmm1
ff
movsd  -0x228(%rbp),%xmm0
ff
movsd  -0x220(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0xa0(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
add    $0x310,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rq_pricing_lookback_partial_time_floating_strike>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1a8,%rsp
movsd  %xmm7,0x30(%rsp)
movaps %xmm6,0xb0(%rsp)
movaps %xmm5,0x40(%rsp)
movsd  %xmm4,0x8(%rsp)
movsd  %xmm3,0x18(%rsp)
mov    %edi,0x70(%rsp)
test   %di,%di
je     119d <rq_pricing_lookback_partial_time_floating_strike+0x3d>
movapd %xmm1,%xmm2
movapd %xmm0,%xmm1
movapd %xmm2,0x160(%rsp)
divsd  %xmm2,%xmm1
movapd %xmm1,0xd0(%rsp)
movapd %xmm0,0x120(%rsp)
movapd %xmm1,%xmm0
call   1060 <log@plt>
movsd  %xmm0,0x50(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <sqrt@plt>
mov    %eax,0xa0(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <sqrt@plt>
mov    %eax,%r13d
movsd  0x8(%rsp),%xmm0
subsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x68(%rsp)
call   1080 <sqrt@plt>
mov    %eax,%r15d
movsd  0x68(%rsp),%xmm0
call   1080 <sqrt@plt>
mov    %eax,%r12d
movaps 0xd0(%rsp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,0x110(%rsp)
movsd  0x18(%rsp),%xmm0
call   1080 <sqrt@plt>
mov    %eax,%ebx
movsd  0x18(%rsp),%xmm0
call   1080 <sqrt@plt>
mov    %eax,%r14d
movsd  0x1e0(%rsp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <sqrt@plt>
mov    %eax,%ebp
movsd  0x1e0(%rsp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0x68(%rsp),%xmm0
call   1080 <sqrt@plt>
movsd  0x30(%rsp),%xmm3
movapd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
movsd  0xd62(%rip),%xmm2
movsd  %xmm0,0x20(%rsp)
mulsd  %xmm0,%xmm2
movapd 0xb0(%rsp),%xmm4
addsd  %xmm4,%xmm2
movapd %xmm2,%xmm1
movsd  0x8(%rsp),%xmm5
mulsd  %xmm5,%xmm1
addsd  0x50(%rsp),%xmm1
xorps  %xmm0,%xmm0
cvtsi2sdl 0xa0(%rsp),%xmm0
mulsd  %xmm3,%xmm0
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %r13d,%xmm0
mulsd  %xmm3,%xmm0
movapd %xmm1,0x50(%rsp)
subsd  %xmm0,%xmm1
movapd %xmm1,0xe0(%rsp)
movsd  0x68(%rsp),%xmm1
mulsd  %xmm2,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %r15d,%xmm0
mulsd  %xmm3,%xmm0
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %r12d,%xmm0
mulsd  %xmm3,%xmm0
movapd %xmm1,0xa0(%rsp)
subsd  %xmm0,%xmm1
movapd %xmm1,0x180(%rsp)
mulsd  0x18(%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
addsd  0x110(%rsp),%xmm2
mulsd  %xmm3,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r14d,%xmm1
divsd  %xmm0,%xmm2
mulsd  %xmm3,%xmm1
movapd %xmm2,0x80(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
subsd  %xmm1,%xmm2
movapd %xmm2,0x110(%rsp)
mulsd  %xmm3,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0x10(%rsp),%xmm2
divsd  %xmm0,%xmm2
movsd  %xmm2,0x10(%rsp)
mulsd  %xmm3,%xmm1
movsd  0x28(%rsp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x28(%rsp)
cmpw   $0x0,0x70(%rsp)
movapd %xmm5,%xmm2
je     18ba <rq_pricing_lookback_partial_time_floating_strike+0x75a>
movapd %xmm4,%xmm0
subsd  0x40(%rsp),%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm0,0x150(%rsp)
call   1050 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,0xc0(%rsp)
movapd 0x50(%rsp),%xmm0
subsd  0x10(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,0x100(%rsp)
movapd 0x40(%rsp),%xmm0
xorpd  0xc07(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
movapd %xmm0,0x40(%rsp)
call   1050 <exp@plt>
mov    %eax,%ebx
movapd 0xe0(%rsp),%xmm0
subsd  0x10(%rsp),%xmm0
movapd %xmm0,0xe0(%rsp)
call   1030 <rq_pricing_cumul_norm_dist@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,0x70(%rsp)
movapd 0x160(%rsp),%xmm1
xorpd  0xbb9(%rip),%xmm1
movsd  0x1e0(%rsp),%xmm0
mulsd  %xmm0,%xmm1
movapd %xmm1,0x140(%rsp)
movaps 0x40(%rsp),%xmm0
call   1050 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movapd %xmm1,%xmm3
movapd 0xb0(%rsp),%xmm2
movapd %xmm2,%xmm1
addsd  %xmm2,%xmm1
movapd %xmm1,0x90(%rsp)
divsd  %xmm1,%xmm0
movsd  0x1e0(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movapd 0xc0(%rsp),%xmm1
unpcklpd %xmm0,%xmm1
movapd 0x120(%rsp),%xmm0
unpcklpd %xmm0,%xmm0
mulpd  %xmm1,%xmm0
movapd %xmm0,0xc0(%rsp)
movsd  0xb12(%rip),%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm3,%xmm0
cvttsd2si %xmm0,%edi
movaps 0xd0(%rsp),%xmm0
call   1070 <pow@plt>
movsd  %xmm0,0xf8(%rsp)
movaps 0x80(%rsp),%xmm0
xorps  0xaf9(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movsd  0x18(%rsp),%xmm0
call   1080 <sqrt@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x90(%rsp),%xmm0
divsd  0x30(%rsp),%xmm0
subsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x130(%rsp)
movaps 0x50(%rsp),%xmm0
xorps  0xab2(%rip),%xmm0
movaps %xmm0,0x80(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <sqrt@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x90(%rsp),%xmm0
divsd  0x30(%rsp),%xmm0
subsd  0x50(%rsp),%xmm0
subsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0x18(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
call   1080 <sqrt@plt>
movsd  0x130(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movaps %xmm0,0x30(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xb0(%rsp),%xmm0
call   1050 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x130(%rsp)
movapd 0x90(%rsp),%xmm0
divsd  0x20(%rsp),%xmm0
cvttsd2si %xmm0,%edi
movsd  0x1e0(%rsp),%xmm0
call   1070 <pow@plt>
movsd  %xmm0,0x170(%rsp)
movapd 0x80(%rsp),%xmm0
subsd  0x10(%rsp),%xmm0
movapd %xmm0,0x80(%rsp)
movapd 0xa0(%rsp),%xmm0
addsd  0x28(%rsp),%xmm0
movapd %xmm0,0x190(%rsp)
movsd  0x9af(%rip),%xmm0
subsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1080 <sqrt@plt>
neg    %eax
movapd 0x80(%rsp),%xmm0
movaps 0x190(%rsp),%xmm1
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  0x170(%rsp),%xmm1
mulsd  0x130(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd 0x30(%rsp),%xmm0
mulsd  0xf8(%rsp),%xmm0
subsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
movapd 0x100(%rsp),%xmm0
unpcklpd %xmm1,%xmm0
mulpd  0xc0(%rsp),%xmm0
movapd %xmm0,0x100(%rsp)
movaps 0x150(%rsp),%xmm0
call   1050 <exp@plt>
movd   %ebx,%xmm0
movd   %eax,%xmm1
punpckldq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
movapd 0x140(%rsp),%xmm1
unpcklpd 0x120(%rsp),%xmm1
mulpd  %xmm0,%xmm1
movapd %xmm1,0x140(%rsp)
movsd  0x10(%rsp),%xmm0
subsd  0x50(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movapd 0xa0(%rsp),%xmm0
subsd  0x28(%rsp),%xmm0
movapd %xmm0,0xa0(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <sqrt@plt>
neg    %eax
movsd  0x10(%rsp),%xmm0
movaps 0xa0(%rsp),%xmm1
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movapd 0x70(%rsp),%xmm1
unpcklpd %xmm0,%xmm1
mulpd  0x140(%rsp),%xmm1
addpd  0x100(%rsp),%xmm1
movapd %xmm1,0x70(%rsp)
movaps 0x40(%rsp),%xmm0
call   1050 <exp@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0x1e0(%rsp),%xmm0
mulsd  %xmm0,%xmm1
mulsd  0x160(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
movaps 0x110(%rsp),%xmm0
xorps  0x862(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movsd  0x18(%rsp),%xmm0
call   1080 <sqrt@plt>
neg    %eax
movaps 0x110(%rsp),%xmm0
movaps 0xe0(%rsp),%xmm1
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  %xmm0,0x18(%rsp)
movapd 0xb0(%rsp),%xmm1
xorpd  0x81f(%rip),%xmm1
movsd  0x68(%rsp),%xmm0
mulsd  %xmm1,%xmm0
call   1050 <exp@plt>
mov    %eax,%ebx
movaps 0x150(%rsp),%xmm0
call   1050 <exp@plt>
imul   %ebx,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x20(%rsp),%xmm1
divsd  0x90(%rsp),%xmm1
addsd  0x7d0(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rsp)
movapd 0x180(%rsp),%xmm0
subsd  0x28(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x10(%rsp)
movaps 0xd0(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x20(%rsp),%xmm1
movsd  0x1e0(%rsp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x18(%rsp),%xmm2
mulsd  0x120(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
mulsd  %xmm0,%xmm1
mulsd  0x8(%rsp),%xmm2
subsd  %xmm1,%xmm2
jmp    1d49 <rq_pricing_lookback_partial_time_floating_strike+0xbe9>
movapd 0x40(%rsp),%xmm0
xorpd  0x758(%rip),%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm0,0x100(%rsp)
call   1050 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,0x90(%rsp)
movsd  0x10(%rsp),%xmm0
subsd  0xe0(%rsp),%xmm0
movsd  %xmm0,0x140(%rsp)
call   1030 <rq_pricing_cumul_norm_dist@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,0x70(%rsp)
movapd 0xb0(%rsp),%xmm0
subsd  0x40(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
movapd %xmm0,0xe0(%rsp)
call   1050 <exp@plt>
mov    %eax,%ebx
movsd  0x10(%rsp),%xmm0
subsd  0x50(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,0x150(%rsp)
movaps 0x100(%rsp),%xmm0
call   1050 <exp@plt>
neg    %eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movapd %xmm1,%xmm3
movapd 0xb0(%rsp),%xmm2
movapd %xmm2,%xmm1
addsd  %xmm2,%xmm1
movapd %xmm1,0x40(%rsp)
divsd  %xmm1,%xmm0
movapd 0x160(%rsp),%xmm1
unpcklpd %xmm0,%xmm1
movsd  0x1e0(%rsp),%xmm0
unpcklpd %xmm0,%xmm0
mulpd  %xmm1,%xmm0
movapd 0x90(%rsp),%xmm1
unpcklpd 0x120(%rsp),%xmm1
mulpd  %xmm0,%xmm1
movapd %xmm1,0x90(%rsp)
movsd  0x62a(%rip),%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm3,%xmm0
cvttsd2si %xmm0,%edi
movaps 0xd0(%rsp),%xmm0
call   1070 <pow@plt>
movsd  %xmm0,0xd0(%rsp)
movsd  0x18(%rsp),%xmm0
call   1080 <sqrt@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x40(%rsp),%xmm0
divsd  0x30(%rsp),%xmm0
movapd 0x80(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,0xc0(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <sqrt@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x40(%rsp),%xmm0
divsd  0x30(%rsp),%xmm0
movapd 0x50(%rsp),%xmm1
subsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
movapd %xmm1,0x30(%rsp)
movsd  0x18(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
call   1080 <sqrt@plt>
movaps 0xc0(%rsp),%xmm0
movaps 0x30(%rsp),%xmm1
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movaps %xmm0,0x30(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xb0(%rsp),%xmm0
call   1050 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0xc0(%rsp)
movapd 0x40(%rsp),%xmm0
divsd  0x20(%rsp),%xmm0
cvttsd2si %xmm0,%edi
movsd  0x1e0(%rsp),%xmm0
call   1070 <pow@plt>
movsd  %xmm0,0xf8(%rsp)
movapd 0x50(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
movapd %xmm0,0x130(%rsp)
movapd 0xa0(%rsp),%xmm0
xorpd  0x517(%rip),%xmm0
subsd  0x28(%rsp),%xmm0
movapd %xmm0,0x170(%rsp)
movsd  0x4f0(%rip),%xmm0
subsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1080 <sqrt@plt>
neg    %eax
movapd 0x130(%rsp),%xmm0
movaps 0x170(%rsp),%xmm1
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  0xf8(%rsp),%xmm1
mulsd  0xc0(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd 0x30(%rsp),%xmm0
mulsd  0xd0(%rsp),%xmm0
subsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
movapd 0x70(%rsp),%xmm0
unpcklpd %xmm1,%xmm0
mulpd  0x90(%rsp),%xmm0
movapd %xmm0,0x70(%rsp)
movaps 0xe0(%rsp),%xmm0
call   1050 <exp@plt>
movd   %ebx,%xmm0
movd   %eax,%xmm1
punpckldq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
movaps %xmm0,0x30(%rsp)
movapd 0x50(%rsp),%xmm0
subsd  0x10(%rsp),%xmm0
movapd %xmm0,0x50(%rsp)
movsd  0x28(%rsp),%xmm0
subsd  0xa0(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <sqrt@plt>
neg    %eax
movapd 0x50(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movapd 0x120(%rsp),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  0x30(%rsp),%xmm1
movapd 0x150(%rsp),%xmm2
unpcklpd %xmm0,%xmm2
mulpd  %xmm1,%xmm2
movapd 0x70(%rsp),%xmm0
subpd  %xmm2,%xmm0
movapd %xmm0,0x70(%rsp)
movaps 0x100(%rsp),%xmm0
call   1050 <exp@plt>
neg    %eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0x1e0(%rsp),%xmm0
mulsd  %xmm0,%xmm1
mulsd  0x160(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0x18(%rsp),%xmm0
call   1080 <sqrt@plt>
neg    %eax
movaps 0x110(%rsp),%xmm0
movsd  0x140(%rsp),%xmm1
mov    %eax,%edi
call   1040 <rq_pricing_cumul_bivar_norm_dist@plt>
movsd  %xmm0,0x18(%rsp)
movapd 0xb0(%rsp),%xmm1
xorpd  0x384(%rip),%xmm1
movsd  0x68(%rsp),%xmm0
mulsd  %xmm1,%xmm0
call   1050 <exp@plt>
mov    %eax,%ebx
movaps 0xe0(%rsp),%xmm0
call   1050 <exp@plt>
imul   %ebx,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x20(%rsp),%xmm1
divsd  0x40(%rsp),%xmm1
addsd  0x338(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x1e0(%rsp),%xmm0
mulsd  %xmm0,%xmm1
mulsd  0x120(%rsp),%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x28(%rsp),%xmm0
subsd  0x180(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movaps 0x80(%rsp),%xmm0
call   1030 <rq_pricing_cumul_norm_dist@plt>
movsd  0x18(%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm2
addsd  %xmm0,%xmm2
movapd 0x70(%rsp),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
addsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
add    $0x1a8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define double @rq_pricing_lookback_partial_time_floating_strike(i16 signext %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9) {
%11 = alloca i16
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
store i16 %0, i16* %11
store double %1, double* %12
store double %2, double* %13
store double %3, double* %14
store double %4, double* %15
store double %5, double* %16
store double %6, double* %17
store double %7, double* %18
store double %8, double* %19
store double %9, double* %20
%33 = load i16, i16* %11
%34 = icmp ne i16 %33, 0
br i1 %34, label %35, label %37
35: ; preds = %10
%36 = load double, double* %13
store double %36, double* %29
br label %39
37: ; preds = %10
%38 = load double, double* %14
store double %38, double* %29
br label %39
39: ; preds = %37, %35
%40 = load double, double* %12
%41 = load double, double* %29
%42 = fdiv double %40, %41
%43 = call double @log(double %42)
%44 = load double, double* %18
%45 = load double, double* %19
%46 = load double, double* %19
%47 = fmul double %45, %46
%48 = fdiv double %47, 2.000000e+00
%49 = fadd double %44, %48
%50 = load double, double* %16
%51 = call double @llvm.fmuladd.f64(double %49, double %50, double %43)
%52 = load double, double* %19
%53 = load double, double* %16
%54 = call i32 @sqrt(double %53)
%55 = sitofp i32 %54 to double
%56 = fmul double %52, %55
%57 = fdiv double %51, %56
store double %57, double* %21
%58 = load double, double* %21
%59 = load double, double* %19
%60 = load double, double* %16
%61 = call i32 @sqrt(double %60)
%62 = sitofp i32 %61 to double
%63 = fneg double %59
%64 = call double @llvm.fmuladd.f64(double %63, double %62, double %58)
store double %64, double* %22
%65 = load double, double* %18
%66 = load double, double* %19
%67 = load double, double* %19
%68 = fmul double %66, %67
%69 = fdiv double %68, 2.000000e+00
%70 = fadd double %65, %69
%71 = load double, double* %16
%72 = load double, double* %15
%73 = fsub double %71, %72
%74 = fmul double %70, %73
%75 = load double, double* %19
%76 = load double, double* %16
%77 = load double, double* %15
%78 = fsub double %76, %77
%79 = call i32 @sqrt(double %78)
%80 = sitofp i32 %79 to double
%81 = fmul double %75, %80
%82 = fdiv double %74, %81
store double %82, double* %23
%83 = load double, double* %23
%84 = load double, double* %19
%85 = load double, double* %16
%86 = load double, double* %15
%87 = fsub double %85, %86
%88 = call i32 @sqrt(double %87)
%89 = sitofp i32 %88 to double
%90 = fneg double %84
%91 = call double @llvm.fmuladd.f64(double %90, double %89, double %83)
store double %91, double* %24
%92 = load double, double* %12
%93 = load double, double* %29
%94 = fdiv double %92, %93
%95 = call double @log(double %94)
%96 = load double, double* %18
%97 = load double, double* %19
%98 = load double, double* %19
%99 = fmul double %97, %98
%100 = fdiv double %99, 2.000000e+00
%101 = fadd double %96, %100
%102 = load double, double* %15
%103 = call double @llvm.fmuladd.f64(double %101, double %102, double %95)
%104 = load double, double* %19
%105 = load double, double* %15
%106 = call i32 @sqrt(double %105)
%107 = sitofp i32 %106 to double
%108 = fmul double %104, %107
%109 = fdiv double %103, %108
store double %109, double* %25
%110 = load double, double* %25
%111 = load double, double* %19
%112 = load double, double* %15
%113 = call i32 @sqrt(double %112)
%114 = sitofp i32 %113 to double
%115 = fneg double %111
%116 = call double @llvm.fmuladd.f64(double %115, double %114, double %110)
store double %116, double* %26
%117 = load double, double* %20
%118 = call double @log(double %117)
%119 = load double, double* %19
%120 = load double, double* %16
%121 = call i32 @sqrt(double %120)
%122 = sitofp i32 %121 to double
%123 = fmul double %119, %122
%124 = fdiv double %118, %123
store double %124, double* %27
%125 = load double, double* %20
%126 = call double @log(double %125)
%127 = load double, double* %19
%128 = load double, double* %16
%129 = load double, double* %15
%130 = fsub double %128, %129
%131 = call i32 @sqrt(double %130)
%132 = sitofp i32 %131 to double
%133 = fmul double %127, %132
%134 = fdiv double %126, %133
store double %134, double* %28
%135 = load i16, i16* %11
%136 = icmp ne i16 %135, 0
br i1 %136, label %137, label %345
137: ; preds = %39
%138 = load double, double* %12
%139 = load double, double* %18
%140 = load double, double* %17
%141 = fsub double %139, %140
%142 = load double, double* %16
%143 = fmul double %141, %142
%144 = call i32 @exp(double %143)
%145 = sitofp i32 %144 to double
%146 = fmul double %138, %145
%147 = load double, double* %21
%148 = load double, double* %27
%149 = fsub double %147, %148
%150 = call i32 @rq_pricing_cumul_norm_dist(double %149)
%151 = sitofp i32 %150 to double
%152 = load double, double* %20
%153 = load double, double* %29
%154 = fmul double %152, %153
%155 = load double, double* %17
%156 = fneg double %155
%157 = load double, double* %16
%158 = fmul double %156, %157
%159 = call i32 @exp(double %158)
%160 = sitofp i32 %159 to double
%161 = fmul double %154, %160
%162 = load double, double* %22
%163 = load double, double* %27
%164 = fsub double %162, %163
%165 = call i32 @rq_pricing_cumul_norm_dist(double %164)
%166 = sitofp i32 %165 to double
%167 = fmul double %161, %166
%168 = fneg double %167
%169 = call double @llvm.fmuladd.f64(double %146, double %151, double %168)
store double %169, double* %30
%170 = load double, double* %17
%171 = fneg double %170
%172 = load double, double* %16
%173 = fmul double %171, %172
%174 = call i32 @exp(double %173)
%175 = sitofp i32 %174 to double
%176 = load double, double* %19
%177 = load double, double* %19
%178 = fmul double %176, %177
%179 = fmul double %175, %178
%180 = load double, double* %18
%181 = fmul double 2.000000e+00, %180
%182 = fdiv double %179, %181
%183 = load double, double* %20
%184 = fmul double %182, %183
%185 = load double, double* %12
%186 = fmul double %184, %185
%187 = load double, double* %12
%188 = load double, double* %29
%189 = fdiv double %187, %188
%190 = load double, double* %18
%191 = fmul double -2.000000e+00, %190
%192 = load double, double* %19
%193 = load double, double* %19
%194 = fmul double %192, %193
%195 = fdiv double %191, %194
%196 = fptosi double %195 to i32
%197 = call double @pow(double %189, i32 %196)
%198 = load double, double* %25
%199 = fneg double %198
%200 = load double, double* %18
%201 = fmul double 2.000000e+00, %200
%202 = load double, double* %15
%203 = call i32 @sqrt(double %202)
%204 = sitofp i32 %203 to double
%205 = fmul double %201, %204
%206 = load double, double* %19
%207 = fdiv double %205, %206
%208 = fadd double %199, %207
%209 = load double, double* %21
%210 = fneg double %209
%211 = load double, double* %18
%212 = fmul double 2.000000e+00, %211
%213 = load double, double* %16
%214 = call i32 @sqrt(double %213)
%215 = sitofp i32 %214 to double
%216 = fmul double %212, %215
%217 = load double, double* %19
%218 = fdiv double %216, %217
%219 = fadd double %210, %218
%220 = load double, double* %27
%221 = fsub double %219, %220
%222 = load double, double* %15
%223 = load double, double* %16
%224 = fdiv double %222, %223
%225 = call i32 @sqrt(double %224)
%226 = call double @rq_pricing_cumul_bivar_norm_dist(double %208, double %221, i32 %225)
%227 = load double, double* %18
%228 = load double, double* %16
%229 = fmul double %227, %228
%230 = call i32 @exp(double %229)
%231 = sitofp i32 %230 to double
%232 = load double, double* %20
%233 = load double, double* %18
%234 = fmul double 2.000000e+00, %233
%235 = load double, double* %19
%236 = load double, double* %19
%237 = fmul double %235, %236
%238 = fdiv double %234, %237
%239 = fptosi double %238 to i32
%240 = call double @pow(double %232, i32 %239)
%241 = fmul double %231, %240
%242 = load double, double* %21
%243 = fneg double %242
%244 = load double, double* %27
%245 = fsub double %243, %244
%246 = load double, double* %23
%247 = load double, double* %28
%248 = fadd double %246, %247
%249 = load double, double* %15
%250 = load double, double* %16
%251 = fdiv double %249, %250
%252 = fsub double 1.000000e+00, %251
%253 = call i32 @sqrt(double %252)
%254 = sub nsw i32 0, %253
%255 = call double @rq_pricing_cumul_bivar_norm_dist(double %245, double %248, i32 %254)
%256 = fmul double %241, %255
%257 = fneg double %256
%258 = call double @llvm.fmuladd.f64(double %197, double %226, double %257)
%259 = load double, double* %12
%260 = load double, double* %18
%261 = load double, double* %17
%262 = fsub double %260, %261
%263 = load double, double* %16
%264 = fmul double %262, %263
%265 = call i32 @exp(double %264)
%266 = sitofp i32 %265 to double
%267 = fmul double %259, %266
%268 = load double, double* %21
%269 = fneg double %268
%270 = load double, double* %27
%271 = fadd double %269, %270
%272 = load double, double* %23
%273 = load double, double* %28
%274 = fsub double %272, %273
%275 = load double, double* %15
%276 = load double, double* %16
%277 = fdiv double %275, %276
%278 = fsub double 1.000000e+00, %277
%279 = call i32 @sqrt(double %278)
%280 = sub nsw i32 0, %279
%281 = call double @rq_pricing_cumul_bivar_norm_dist(double %271, double %274, i32 %280)
%282 = fmul double %267, %281
%283 = call double @llvm.fmuladd.f64(double %186, double %258, double %282)
store double %283, double* %31
%284 = load double, double* %17
%285 = fneg double %284
%286 = load double, double* %16
%287 = fmul double %285, %286
%288 = call i32 @exp(double %287)
%289 = sitofp i32 %288 to double
%290 = load double, double* %20
%291 = fmul double %289, %290
%292 = load double, double* %29
%293 = fmul double %291, %292
%294 = load double, double* %26
%295 = fneg double %294
%296 = load double, double* %22
%297 = load double, double* %27
%298 = fsub double %296, %297
%299 = load double, double* %15
%300 = load double, double* %16
%301 = fdiv double %299, %300
%302 = call i32 @sqrt(double %301)
%303 = sub nsw i32 0, %302
%304 = call double @rq_pricing_cumul_bivar_norm_dist(double %295, double %298, i32 %303)
%305 = load double, double* %18
%306 = fneg double %305
%307 = load double, double* %16
%308 = load double, double* %15
%309 = fsub double %307, %308
%310 = fmul double %306, %309
%311 = call i32 @exp(double %310)
%312 = load double, double* %18
%313 = load double, double* %17
%314 = fsub double %312, %313
%315 = load double, double* %16
%316 = fmul double %314, %315
%317 = call i32 @exp(double %316)
%318 = mul nsw i32 %311, %317
%319 = sitofp i32 %318 to double
%320 = load double, double* %19
%321 = load double, double* %19
%322 = fmul double %320, %321
%323 = load double, double* %18
%324 = fmul double 2.000000e+00, %323
%325 = fdiv double %322, %324
%326 = fadd double 1.000000e+00, %325
%327 = fmul double %319, %326
%328 = load double, double* %20
%329 = fmul double %327, %328
%330 = load double, double* %12
%331 = fmul double %329, %330
%332 = load double, double* %24
%333 = load double, double* %28
%334 = fsub double %332, %333
%335 = call i32 @rq_pricing_cumul_norm_dist(double %334)
%336 = sitofp i32 %335 to double
%337 = fmul double %331, %336
%338 = load double, double* %25
%339 = fneg double %338
%340 = call i32 @rq_pricing_cumul_norm_dist(double %339)
%341 = sitofp i32 %340 to double
%342 = fmul double %337, %341
%343 = fneg double %342
%344 = call double @llvm.fmuladd.f64(double %293, double %304, double %343)
store double %344, double* %32
br label %555
345: ; preds = %39
%346 = load double, double* %20
%347 = load double, double* %29
%348 = fmul double %346, %347
%349 = load double, double* %17
%350 = fneg double %349
%351 = load double, double* %16
%352 = fmul double %350, %351
%353 = call i32 @exp(double %352)
%354 = sitofp i32 %353 to double
%355 = fmul double %348, %354
%356 = load double, double* %22
%357 = fneg double %356
%358 = load double, double* %27
%359 = fadd double %357, %358
%360 = call i32 @rq_pricing_cumul_norm_dist(double %359)
%361 = sitofp i32 %360 to double
%362 = load double, double* %12
%363 = load double, double* %18
%364 = load double, double* %17
%365 = fsub double %363, %364
%366 = load double, double* %16
%367 = fmul double %365, %366
%368 = call i32 @exp(double %367)
%369 = sitofp i32 %368 to double
%370 = fmul double %362, %369
%371 = load double, double* %21
%372 = fneg double %371
%373 = load double, double* %27
%374 = fadd double %372, %373
%375 = call i32 @rq_pricing_cumul_norm_dist(double %374)
%376 = sitofp i32 %375 to double
%377 = fmul double %370, %376
%378 = fneg double %377
%379 = call double @llvm.fmuladd.f64(double %355, double %361, double %378)
store double %379, double* %30
%380 = load double, double* %17
%381 = fneg double %380
%382 = load double, double* %16
%383 = fmul double %381, %382
%384 = call i32 @exp(double %383)
%385 = sub nsw i32 0, %384
%386 = sitofp i32 %385 to double
%387 = load double, double* %19
%388 = load double, double* %19
%389 = fmul double %387, %388
%390 = fmul double %386, %389
%391 = load double, double* %18
%392 = fmul double 2.000000e+00, %391
%393 = fdiv double %390, %392
%394 = load double, double* %20
%395 = fmul double %393, %394
%396 = load double, double* %12
%397 = fmul double %395, %396
%398 = load double, double* %12
%399 = load double, double* %29
%400 = fdiv double %398, %399
%401 = load double, double* %18
%402 = fmul double -2.000000e+00, %401
%403 = load double, double* %19
%404 = load double, double* %19
%405 = fmul double %403, %404
%406 = fdiv double %402, %405
%407 = fptosi double %406 to i32
%408 = call double @pow(double %400, i32 %407)
%409 = load double, double* %25
%410 = load double, double* %18
%411 = fmul double 2.000000e+00, %410
%412 = load double, double* %15
%413 = call i32 @sqrt(double %412)
%414 = sitofp i32 %413 to double
%415 = fmul double %411, %414
%416 = load double, double* %19
%417 = fdiv double %415, %416
%418 = fsub double %409, %417
%419 = load double, double* %21
%420 = load double, double* %18
%421 = fmul double 2.000000e+00, %420
%422 = load double, double* %16
%423 = call i32 @sqrt(double %422)
%424 = sitofp i32 %423 to double
%425 = fmul double %421, %424
%426 = load double, double* %19
%427 = fdiv double %425, %426
%428 = fsub double %419, %427
%429 = load double, double* %27
%430 = fadd double %428, %429
%431 = load double, double* %15
%432 = load double, double* %16
%433 = fdiv double %431, %432
%434 = call i32 @sqrt(double %433)
%435 = call double @rq_pricing_cumul_bivar_norm_dist(double %418, double %430, i32 %434)
%436 = load double, double* %18
%437 = load double, double* %16
%438 = fmul double %436, %437
%439 = call i32 @exp(double %438)
%440 = sitofp i32 %439 to double
%441 = load double, double* %20
%442 = load double, double* %18
%443 = fmul double 2.000000e+00, %442
%444 = load double, double* %19
%445 = load double, double* %19
%446 = fmul double %444, %445
%447 = fdiv double %443, %446
%448 = fptosi double %447 to i32
%449 = call double @pow(double %441, i32 %448)
%450 = fmul double %440, %449
%451 = load double, double* %21
%452 = load double, double* %27
%453 = fadd double %451, %452
%454 = load double, double* %23
%455 = fneg double %454
%456 = load double, double* %28
%457 = fsub double %455, %456
%458 = load double, double* %15
%459 = load double, double* %16
%460 = fdiv double %458, %459
%461 = fsub double 1.000000e+00, %460
%462 = call i32 @sqrt(double %461)
%463 = sub nsw i32 0, %462
%464 = call double @rq_pricing_cumul_bivar_norm_dist(double %453, double %457, i32 %463)
%465 = fmul double %450, %464
%466 = fneg double %465
%467 = call double @llvm.fmuladd.f64(double %408, double %435, double %466)
%468 = load double, double* %12
%469 = load double, double* %18
%470 = load double, double* %17
%471 = fsub double %469, %470
%472 = load double, double* %16
%473 = fmul double %471, %472
%474 = call i32 @exp(double %473)
%475 = sitofp i32 %474 to double
%476 = fmul double %468, %475
%477 = load double, double* %21
%478 = load double, double* %27
%479 = fsub double %477, %478
%480 = load double, double* %23
%481 = fneg double %480
%482 = load double, double* %28
%483 = fadd double %481, %482
%484 = load double, double* %15
%485 = load double, double* %16
%486 = fdiv double %484, %485
%487 = fsub double 1.000000e+00, %486
%488 = call i32 @sqrt(double %487)
%489 = sub nsw i32 0, %488
%490 = call double @rq_pricing_cumul_bivar_norm_dist(double %479, double %483, i32 %489)
%491 = fmul double %476, %490
%492 = fneg double %491
%493 = call double @llvm.fmuladd.f64(double %397, double %467, double %492)
store double %493, double* %31
%494 = load double, double* %17
%495 = fneg double %494
%496 = load double, double* %16
%497 = fmul double %495, %496
%498 = call i32 @exp(double %497)
%499 = sub nsw i32 0, %498
%500 = sitofp i32 %499 to double
%501 = load double, double* %20
%502 = fmul double %500, %501
%503 = load double, double* %29
%504 = fmul double %502, %503
%505 = load double, double* %26
%506 = load double, double* %22
%507 = fneg double %506
%508 = load double, double* %27
%509 = fadd double %507, %508
%510 = load double, double* %15
%511 = load double, double* %16
%512 = fdiv double %510, %511
%513 = call i32 @sqrt(double %512)
%514 = sub nsw i32 0, %513
%515 = call double @rq_pricing_cumul_bivar_norm_dist(double %505, double %509, i32 %514)
%516 = load double, double* %18
%517 = fneg double %516
%518 = load double, double* %16
%519 = load double, double* %15
%520 = fsub double %518, %519
%521 = fmul double %517, %520
%522 = call i32 @exp(double %521)
%523 = load double, double* %18
%524 = load double, double* %17
%525 = fsub double %523, %524
%526 = load double, double* %16
%527 = fmul double %525, %526
%528 = call i32 @exp(double %527)
%529 = mul nsw i32 %522, %528
%530 = sitofp i32 %529 to double
%531 = load double, double* %19
%532 = load double, double* %19
%533 = fmul double %531, %532
%534 = load double, double* %18
%535 = fmul double 2.000000e+00, %534
%536 = fdiv double %533, %535
%537 = fadd double 1.000000e+00, %536
%538 = fmul double %530, %537
%539 = load double, double* %20
%540 = fmul double %538, %539
%541 = load double, double* %12
%542 = fmul double %540, %541
%543 = load double, double* %24
%544 = fneg double %543
%545 = load double, double* %28
%546 = fadd double %544, %545
%547 = call i32 @rq_pricing_cumul_norm_dist(double %546)
%548 = sitofp i32 %547 to double
%549 = fmul double %542, %548
%550 = load double, double* %25
%551 = call i32 @rq_pricing_cumul_norm_dist(double %550)
%552 = sitofp i32 %551 to double
%553 = fmul double %549, %552
%554 = call double @llvm.fmuladd.f64(double %504, double %515, double %553)
store double %554, double* %32
br label %555
555: ; preds = %345, %137
%556 = load double, double* %30
%557 = load double, double* %31
%558 = fadd double %556, %557
%559 = load double, double* %32
%560 = fadd double %558, %559
ret double %560
}

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