void binlensd4(double x1, double x2, double d, double m1, double *y11111,
               double *y11112, double *y11122, double *y11222, double *y12222,
               double *y22222) {
  double m2;
  double del11, del12, x2sq, n1, n2, n1sq, n2sq;
  double n1cb, n2cb, n1q4, n2q4, n1q5, n2q5;
  double sum1, sum2, sum111, sum112, sum122, sum222;
  double sum11111, sum11112, sum11122, sum11222, sum12222, sum22222;
  double del11sq, del12sq;
  double del11cb, del11q4, del11q5, del12cb, del12q4, del12q5;
  double x2cb, x2q4, x2q5;
  m2 = 1.0 - m1;
  if (m2 < 0.0) {
    m2 = 0.0;
    m1 = 1.0;
  }
  del11 = x1 + m2 * d;
  del12 = x1 - m1 * d;
  del11sq = del11 * del11;
  del12sq = del12 * del12;
  del11cb = del11sq * del11;
  del12cb = del12sq * del12;
  del11q4 = del11sq * del11sq;
  del12q4 = del12sq * del12sq;
  del11q5 = del11q4 * del11;
  del12q5 = del12q4 * del12;
  x2sq = x2 * x2;
  x2cb = x2sq * x2;
  x2q4 = x2sq * x2sq;
  x2q5 = x2q4 * x2;
  n1 = del11 * del11 + x2sq;
  n2 = del12 * del12 + x2sq;
  n1sq = n1 * n1;
  n2sq = n2 * n2;
  n1cb = n1sq * n1;
  n2cb = n2sq * n2;
  n1q4 = n1sq * n1sq;
  n2q4 = n2sq * n2sq;
  n1q5 = n1q4 * n1;
  n2q5 = n2q4 * n2;
  sum1 = m1 / n1cb * del11 + m2 / n2cb * del12;
  sum2 = m1 / n1cb * x2 + m2 / n2cb * x2;
  sum111 = m1 / n1q4 * del11cb + m2 / n2q4 * del12cb;
  sum112 = m1 / n1q4 * del11sq * x2 + m2 / n2q4 * del12sq * x2;
  sum122 = m1 / n1q4 * del11 * x2sq + m2 / n2q4 * del12 * x2sq;
  sum222 = m1 / n1q4 * x2cb + m2 / n2q4 * x2cb;
  sum11111 = m1 / n1q5 * del11q5 + m2 / n2q5 * del12q5;
  sum11112 = m1 / n1q5 * del11q4 * x2 + m2 / n2q5 * del12q4 * x2;
  sum11122 = m1 / n1q5 * del11cb * x2sq + m2 / n2q5 * del12cb * x2sq;
  sum11222 = m1 / n1q5 * del11sq * x2cb + m2 / n2q5 * del12sq * x2cb;
  sum12222 = m1 / n1q5 * del11 * x2q4 + m2 / n2q5 * del12 * x2q4;
  sum22222 = m1 / n1q5 * x2q5 + m2 / n2q5 * x2q5;
  *y11111 = -120.0 * sum1 + 480.0 * sum111 - 384.0 * sum11111;
  *y11112 = -24.0 * sum2 + 288.0 * sum112 - 384.0 * sum11112;
  *y11122 = -24.0 * sum1 + 48.0 * sum111 + 144.0 * sum122 - 384.0 * sum11122;
  *y11222 = -24.0 * sum2 + 48.0 * sum222 + 144.0 * sum112 - 384.0 * sum11222;
  *y12222 = -24.0 * sum1 + 288.0 * sum122 - 384.0 * sum12222;
  *y22222 = -120.0 * sum2 + 480.0 * sum222 - 384.0 * sum22222;
}


x86 assembly (clang, -O0):
<binlensd4>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf8,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
mov    %rdi,-0x28(%rbp)
mov    %rsi,-0x30(%rbp)
mov    %rdx,-0x38(%rbp)
mov    %rcx,-0x40(%rbp)
mov    %r8,-0x48(%rbp)
mov    %r9,-0x50(%rbp)
movsd  0xec1(%rip),%xmm0
subsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    116c <binlensd4+0x6c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe99(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x60(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
mulsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
mulsd  -0x130(%rbp),%xmm0
ff
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x78(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0x98(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
divsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0x98(%rbp),%xmm0
ff
movsd  -0x10(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
divsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x138(%rbp),%xmm2
ff
movsd  -0x58(%rbp),%xmm1
divsd  -0xb0(%rbp),%xmm1
ff
mulsd  -0x150(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x128(%rbp),%xmm0
ff
movsd  -0x10(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
divsd  -0xb0(%rbp),%xmm1
ff
mulsd  -0x130(%rbp),%xmm1
ff
mulsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
divsd  -0xb0(%rbp),%xmm1
ff
mulsd  -0x68(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x168(%rbp),%xmm2
ff
movsd  -0x58(%rbp),%xmm1
divsd  -0xb0(%rbp),%xmm1
ff
mulsd  -0x168(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
movsd  -0x148(%rbp),%xmm2
ff
movsd  -0x58(%rbp),%xmm1
divsd  -0xc0(%rbp),%xmm1
ff
mulsd  -0x160(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x140(%rbp),%xmm0
ff
movsd  -0x10(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
divsd  -0xc0(%rbp),%xmm1
ff
mulsd  -0x158(%rbp),%xmm1
ff
mulsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x138(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
divsd  -0xc0(%rbp),%xmm1
ff
mulsd  -0x150(%rbp),%xmm1
ff
mulsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x128(%rbp),%xmm0
ff
movsd  -0x168(%rbp),%xmm2
ff
movsd  -0x58(%rbp),%xmm1
divsd  -0xc0(%rbp),%xmm1
ff
mulsd  -0x130(%rbp),%xmm1
ff
mulsd  -0x168(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  -0x170(%rbp),%xmm2
ff
movsd  -0x58(%rbp),%xmm1
divsd  -0xc0(%rbp),%xmm1
ff
mulsd  -0x68(%rbp),%xmm1
mulsd  -0x170(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
movsd  -0x178(%rbp),%xmm2
ff
movsd  -0x58(%rbp),%xmm1
divsd  -0xc0(%rbp),%xmm1
ff
mulsd  -0x178(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
movsd  0x995(%rip),%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  0x97d(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
movsd  0x95d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd0(%rbp),%xmm1
ff
movsd  0x95d(%rip),%xmm0
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  0x945(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x100(%rbp),%xmm0
ff
movsd  0x915(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
movsd  0x925(%rip),%xmm1
mulsd  -0xd8(%rbp),%xmm1
ff
movsd  0x8fd(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe8(%rbp),%xmm1
ff
movsd  0x8f5(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x108(%rbp),%xmm0
ff
movsd  0x8b5(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
movsd  0x8c5(%rip),%xmm1
mulsd  -0xf0(%rbp),%xmm1
ff
movsd  0x89d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm1
ff
movsd  0x895(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x110(%rbp),%xmm0
ff
movsd  0x855(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xc8(%rbp),%xmm1
ff
movsd  0x855(%rip),%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  0x83d(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x118(%rbp),%xmm0
ff
movsd  0x80d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd0(%rbp),%xmm1
ff
movsd  0x7fd(%rip),%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  0x7e5(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x120(%rbp),%xmm0
ff
movsd  0x7c5(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0xf8,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<binlensd4>:
movapd %xmm1,%xmm11
movsd  0xef3(%rip),%xmm5
movapd %xmm5,%xmm4
subsd  %xmm3,%xmm4
xorpd  %xmm1,%xmm1
xorpd  %xmm10,%xmm10
maxsd  %xmm4,%xmm10
cmpltsd %xmm1,%xmm4
andpd  %xmm4,%xmm5
andnpd %xmm3,%xmm4
orpd   %xmm5,%xmm4
movapd %xmm10,%xmm15
mulsd  %xmm2,%xmm15
addsd  %xmm0,%xmm15
mulsd  %xmm4,%xmm2
subsd  %xmm2,%xmm0
movapd %xmm15,%xmm2
mulsd  %xmm15,%xmm2
movapd %xmm0,%xmm1
movapd %xmm0,%xmm5
mulsd  %xmm0,%xmm1
movapd %xmm1,%xmm14
movapd %xmm11,%xmm8
mulsd  %xmm11,%xmm8
movapd %xmm2,%xmm12
addsd  %xmm8,%xmm12
addsd  %xmm8,%xmm1
movapd %xmm12,%xmm13
mulsd  %xmm12,%xmm13
movapd %xmm1,%xmm6
mulsd  %xmm1,%xmm6
movapd %xmm12,%xmm3
mulsd  %xmm13,%xmm3
movapd %xmm1,%xmm9
mulsd  %xmm6,%xmm9
movapd %xmm4,%xmm0
divsd  %xmm3,%xmm0
movapd %xmm10,%xmm7
divsd  %xmm9,%xmm7
movapd %xmm5,%xmm9
movsd  %xmm5,-0x48(%rsp)
movapd %xmm5,%xmm3
mulsd  %xmm7,%xmm3
movapd %xmm0,%xmm5
mulsd  %xmm15,%xmm5
addsd  %xmm3,%xmm5
movapd %xmm5,-0x28(%rsp)
movapd %xmm15,%xmm3
mulsd  %xmm2,%xmm3
movsd  %xmm2,-0x38(%rsp)
mulsd  %xmm13,%xmm13
mulsd  %xmm6,%xmm6
mulsd  %xmm13,%xmm12
mulsd  %xmm6,%xmm1
movsd  %xmm11,-0x40(%rsp)
mulsd  %xmm11,%xmm7
mulsd  %xmm11,%xmm0
addsd  %xmm7,%xmm0
movapd %xmm0,-0x18(%rsp)
movapd %xmm4,%xmm11
divsd  %xmm13,%xmm11
movapd %xmm10,%xmm5
divsd  %xmm6,%xmm5
movapd %xmm9,%xmm7
movapd %xmm14,%xmm6
movsd  %xmm14,-0x30(%rsp)
mulsd  %xmm14,%xmm7
movapd %xmm7,%xmm0
mulsd  %xmm5,%xmm0
movapd %xmm11,%xmm13
mulsd  %xmm3,%xmm13
addsd  %xmm0,%xmm13
movapd %xmm2,%xmm14
mulsd  %xmm11,%xmm14
movapd %xmm6,%xmm0
mulsd  %xmm5,%xmm0
movsd  -0x40(%rsp),%xmm6
mulsd  %xmm6,%xmm0
mulsd  %xmm6,%xmm14
addsd  %xmm0,%xmm14
movapd %xmm15,%xmm9
mulsd  %xmm11,%xmm9
movsd  -0x48(%rsp),%xmm2
movapd %xmm2,%xmm0
mulsd  %xmm5,%xmm0
mulsd  %xmm8,%xmm0
mulsd  %xmm8,%xmm9
addsd  %xmm0,%xmm9
movapd %xmm8,%xmm0
mulsd  %xmm6,%xmm0
mulsd  %xmm0,%xmm5
mulsd  %xmm0,%xmm11
addsd  %xmm5,%xmm11
divsd  %xmm12,%xmm4
divsd  %xmm1,%xmm10
movsd  -0x38(%rsp),%xmm12
mulsd  %xmm12,%xmm12
movsd  -0x30(%rsp),%xmm1
mulsd  %xmm1,%xmm1
movapd %xmm15,%xmm6
mulsd  %xmm12,%xmm6
mulsd  %xmm1,%xmm2
mulsd  %xmm10,%xmm2
mulsd  %xmm4,%xmm6
addsd  %xmm2,%xmm6
mulsd  %xmm10,%xmm7
mulsd  %xmm8,%xmm7
mulsd  %xmm4,%xmm3
mulsd  %xmm8,%xmm3
mulsd  %xmm8,%xmm8
mulsd  %xmm4,%xmm15
movsd  -0x48(%rsp),%xmm5
mulsd  %xmm10,%xmm5
mulsd  %xmm8,%xmm5
mulsd  %xmm8,%xmm15
movapd %xmm8,%xmm2
movsd  -0x40(%rsp),%xmm8
mulsd  %xmm8,%xmm2
mulsd  %xmm4,%xmm12
mulsd  %xmm10,%xmm1
mulsd  %xmm8,%xmm1
mulsd  %xmm8,%xmm12
addsd  %xmm1,%xmm12
addsd  %xmm7,%xmm3
movsd  -0x38(%rsp),%xmm8
mulsd  %xmm4,%xmm8
movsd  -0x30(%rsp),%xmm1
mulsd  %xmm10,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm8
addsd  %xmm1,%xmm8
addsd  %xmm5,%xmm15
mulsd  %xmm2,%xmm10
mulsd  %xmm2,%xmm4
addsd  %xmm10,%xmm4
movapd %xmm13,%xmm0
mulsd  0xc6b(%rip),%xmm0
movapd -0x28(%rsp),%xmm2
movapd %xmm2,%xmm7
mulsd  0xc61(%rip),%xmm7
addsd  %xmm0,%xmm7
movsd  0xc5d(%rip),%xmm5
mulsd  %xmm5,%xmm6
addsd  %xmm7,%xmm6
movsd  %xmm6,(%rdi)
movsd  0xc50(%rip),%xmm10
movapd %xmm14,%xmm6
mulsd  %xmm10,%xmm6
movsd  0xc46(%rip),%xmm7
movapd -0x18(%rsp),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm7,%xmm1
addsd  %xmm1,%xmm6
mulsd  %xmm5,%xmm12
addsd  %xmm6,%xmm12
movsd  %xmm12,(%rsi)
movapd %xmm2,%xmm12
mulsd  %xmm7,%xmm12
movsd  0xc1b(%rip),%xmm6
mulsd  %xmm6,%xmm13
addsd  %xmm12,%xmm13
movsd  0xc11(%rip),%xmm2
movapd %xmm9,%xmm7
mulsd  %xmm2,%xmm7
addsd  %xmm13,%xmm7
mulsd  %xmm5,%xmm3
addsd  %xmm7,%xmm3
movsd  %xmm3,(%rdx)
mulsd  %xmm11,%xmm6
addsd  %xmm1,%xmm6
mulsd  %xmm2,%xmm14
addsd  %xmm6,%xmm14
mulsd  %xmm5,%xmm8
addsd  %xmm14,%xmm8
movsd  %xmm8,(%rcx)
mulsd  %xmm10,%xmm9
addsd  %xmm12,%xmm9
mulsd  %xmm5,%xmm15
addsd  %xmm9,%xmm15
movsd  %xmm15,(%r8)
mulsd  0xb83(%rip),%xmm11
mulsd  0xb83(%rip),%xmm0
addsd  %xmm11,%xmm0
mulsd  %xmm5,%xmm4
addsd  %xmm0,%xmm4
movsd  %xmm4,(%r9)
ret

LLVM IR (-O0):
define void @binlensd4(double %0, double %1, double %2, double %3, double* %4, double* %5, double* %6, double* %7, double* %8, double* %9) {
%11 = alloca double
%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
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
%46 = alloca double
%47 = alloca double
%48 = alloca double
%49 = alloca double
%50 = alloca double
%51 = alloca double
%52 = alloca double
%53 = alloca double
%54 = alloca double
%55 = alloca double
%56 = alloca double
%57 = alloca double
store double %0, double* %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
%58 = load double, double* %14
%59 = fsub double 1.000000e+00, %58
store double %59, double* %21
%60 = load double, double* %21
%61 = fcmp olt double %60, 0.000000e+00
br i1 %61, label %62, label %63
62: ; preds = %10
store double 0.000000e+00, double* %21
store double 1.000000e+00, double* %14
br label %63
63: ; preds = %62, %10
%64 = load double, double* %11
%65 = load double, double* %21
%66 = load double, double* %13
%67 = call double @llvm.fmuladd.f64(double %65, double %66, double %64)
store double %67, double* %22
%68 = load double, double* %11
%69 = load double, double* %14
%70 = load double, double* %13
%71 = fneg double %69
%72 = call double @llvm.fmuladd.f64(double %71, double %70, double %68)
store double %72, double* %23
%73 = load double, double* %22
%74 = load double, double* %22
%75 = fmul double %73, %74
store double %75, double* %47
%76 = load double, double* %23
%77 = load double, double* %23
%78 = fmul double %76, %77
store double %78, double* %48
%79 = load double, double* %47
%80 = load double, double* %22
%81 = fmul double %79, %80
store double %81, double* %49
%82 = load double, double* %48
%83 = load double, double* %23
%84 = fmul double %82, %83
store double %84, double* %52
%85 = load double, double* %47
%86 = load double, double* %47
%87 = fmul double %85, %86
store double %87, double* %50
%88 = load double, double* %48
%89 = load double, double* %48
%90 = fmul double %88, %89
store double %90, double* %53
%91 = load double, double* %50
%92 = load double, double* %22
%93 = fmul double %91, %92
store double %93, double* %51
%94 = load double, double* %53
%95 = load double, double* %23
%96 = fmul double %94, %95
store double %96, double* %54
%97 = load double, double* %12
%98 = load double, double* %12
%99 = fmul double %97, %98
store double %99, double* %24
%100 = load double, double* %24
%101 = load double, double* %12
%102 = fmul double %100, %101
store double %102, double* %55
%103 = load double, double* %24
%104 = load double, double* %24
%105 = fmul double %103, %104
store double %105, double* %56
%106 = load double, double* %56
%107 = load double, double* %12
%108 = fmul double %106, %107
store double %108, double* %57
%109 = load double, double* %22
%110 = load double, double* %22
%111 = load double, double* %24
%112 = call double @llvm.fmuladd.f64(double %109, double %110, double %111)
store double %112, double* %25
%113 = load double, double* %23
%114 = load double, double* %23
%115 = load double, double* %24
%116 = call double @llvm.fmuladd.f64(double %113, double %114, double %115)
store double %116, double* %26
%117 = load double, double* %25
%118 = load double, double* %25
%119 = fmul double %117, %118
store double %119, double* %27
%120 = load double, double* %26
%121 = load double, double* %26
%122 = fmul double %120, %121
store double %122, double* %28
%123 = load double, double* %27
%124 = load double, double* %25
%125 = fmul double %123, %124
store double %125, double* %29
%126 = load double, double* %28
%127 = load double, double* %26
%128 = fmul double %126, %127
store double %128, double* %30
%129 = load double, double* %27
%130 = load double, double* %27
%131 = fmul double %129, %130
store double %131, double* %31
%132 = load double, double* %28
%133 = load double, double* %28
%134 = fmul double %132, %133
store double %134, double* %32
%135 = load double, double* %31
%136 = load double, double* %25
%137 = fmul double %135, %136
store double %137, double* %33
%138 = load double, double* %32
%139 = load double, double* %26
%140 = fmul double %138, %139
store double %140, double* %34
%141 = load double, double* %14
%142 = load double, double* %29
%143 = fdiv double %141, %142
%144 = load double, double* %22
%145 = load double, double* %21
%146 = load double, double* %30
%147 = fdiv double %145, %146
%148 = load double, double* %23
%149 = fmul double %147, %148
%150 = call double @llvm.fmuladd.f64(double %143, double %144, double %149)
store double %150, double* %35
%151 = load double, double* %14
%152 = load double, double* %29
%153 = fdiv double %151, %152
%154 = load double, double* %12
%155 = load double, double* %21
%156 = load double, double* %30
%157 = fdiv double %155, %156
%158 = load double, double* %12
%159 = fmul double %157, %158
%160 = call double @llvm.fmuladd.f64(double %153, double %154, double %159)
store double %160, double* %36
%161 = load double, double* %14
%162 = load double, double* %31
%163 = fdiv double %161, %162
%164 = load double, double* %49
%165 = load double, double* %21
%166 = load double, double* %32
%167 = fdiv double %165, %166
%168 = load double, double* %52
%169 = fmul double %167, %168
%170 = call double @llvm.fmuladd.f64(double %163, double %164, double %169)
store double %170, double* %37
%171 = load double, double* %14
%172 = load double, double* %31
%173 = fdiv double %171, %172
%174 = load double, double* %47
%175 = fmul double %173, %174
%176 = load double, double* %12
%177 = load double, double* %21
%178 = load double, double* %32
%179 = fdiv double %177, %178
%180 = load double, double* %48
%181 = fmul double %179, %180
%182 = load double, double* %12
%183 = fmul double %181, %182
%184 = call double @llvm.fmuladd.f64(double %175, double %176, double %183)
store double %184, double* %38
%185 = load double, double* %14
%186 = load double, double* %31
%187 = fdiv double %185, %186
%188 = load double, double* %22
%189 = fmul double %187, %188
%190 = load double, double* %24
%191 = load double, double* %21
%192 = load double, double* %32
%193 = fdiv double %191, %192
%194 = load double, double* %23
%195 = fmul double %193, %194
%196 = load double, double* %24
%197 = fmul double %195, %196
%198 = call double @llvm.fmuladd.f64(double %189, double %190, double %197)
store double %198, double* %39
%199 = load double, double* %14
%200 = load double, double* %31
%201 = fdiv double %199, %200
%202 = load double, double* %55
%203 = load double, double* %21
%204 = load double, double* %32
%205 = fdiv double %203, %204
%206 = load double, double* %55
%207 = fmul double %205, %206
%208 = call double @llvm.fmuladd.f64(double %201, double %202, double %207)
store double %208, double* %40
%209 = load double, double* %14
%210 = load double, double* %33
%211 = fdiv double %209, %210
%212 = load double, double* %51
%213 = load double, double* %21
%214 = load double, double* %34
%215 = fdiv double %213, %214
%216 = load double, double* %54
%217 = fmul double %215, %216
%218 = call double @llvm.fmuladd.f64(double %211, double %212, double %217)
store double %218, double* %41
%219 = load double, double* %14
%220 = load double, double* %33
%221 = fdiv double %219, %220
%222 = load double, double* %50
%223 = fmul double %221, %222
%224 = load double, double* %12
%225 = load double, double* %21
%226 = load double, double* %34
%227 = fdiv double %225, %226
%228 = load double, double* %53
%229 = fmul double %227, %228
%230 = load double, double* %12
%231 = fmul double %229, %230
%232 = call double @llvm.fmuladd.f64(double %223, double %224, double %231)
store double %232, double* %42
%233 = load double, double* %14
%234 = load double, double* %33
%235 = fdiv double %233, %234
%236 = load double, double* %49
%237 = fmul double %235, %236
%238 = load double, double* %24
%239 = load double, double* %21
%240 = load double, double* %34
%241 = fdiv double %239, %240
%242 = load double, double* %52
%243 = fmul double %241, %242
%244 = load double, double* %24
%245 = fmul double %243, %244
%246 = call double @llvm.fmuladd.f64(double %237, double %238, double %245)
store double %246, double* %43
%247 = load double, double* %14
%248 = load double, double* %33
%249 = fdiv double %247, %248
%250 = load double, double* %47
%251 = fmul double %249, %250
%252 = load double, double* %55
%253 = load double, double* %21
%254 = load double, double* %34
%255 = fdiv double %253, %254
%256 = load double, double* %48
%257 = fmul double %255, %256
%258 = load double, double* %55
%259 = fmul double %257, %258
%260 = call double @llvm.fmuladd.f64(double %251, double %252, double %259)
store double %260, double* %44
%261 = load double, double* %14
%262 = load double, double* %33
%263 = fdiv double %261, %262
%264 = load double, double* %22
%265 = fmul double %263, %264
%266 = load double, double* %56
%267 = load double, double* %21
%268 = load double, double* %34
%269 = fdiv double %267, %268
%270 = load double, double* %23
%271 = fmul double %269, %270
%272 = load double, double* %56
%273 = fmul double %271, %272
%274 = call double @llvm.fmuladd.f64(double %265, double %266, double %273)
store double %274, double* %45
%275 = load double, double* %14
%276 = load double, double* %33
%277 = fdiv double %275, %276
%278 = load double, double* %57
%279 = load double, double* %21
%280 = load double, double* %34
%281 = fdiv double %279, %280
%282 = load double, double* %57
%283 = fmul double %281, %282
%284 = call double @llvm.fmuladd.f64(double %277, double %278, double %283)
store double %284, double* %46
%285 = load double, double* %35
%286 = load double, double* %37
%287 = fmul double 4.800000e+02, %286
%288 = call double @llvm.fmuladd.f64(double -1.200000e+02, double %285, double %287)
%289 = load double, double* %41
%290 = call double @llvm.fmuladd.f64(double -3.840000e+02, double %289, double %288)
%291 = load double*, double** %15
store double %290, double* %291
%292 = load double, double* %36
%293 = load double, double* %38
%294 = fmul double 2.880000e+02, %293
%295 = call double @llvm.fmuladd.f64(double -2.400000e+01, double %292, double %294)
%296 = load double, double* %42
%297 = call double @llvm.fmuladd.f64(double -3.840000e+02, double %296, double %295)
%298 = load double*, double** %16
store double %297, double* %298
%299 = load double, double* %35
%300 = load double, double* %37
%301 = fmul double 4.800000e+01, %300
%302 = call double @llvm.fmuladd.f64(double -2.400000e+01, double %299, double %301)
%303 = load double, double* %39
%304 = call double @llvm.fmuladd.f64(double 1.440000e+02, double %303, double %302)
%305 = load double, double* %43
%306 = call double @llvm.fmuladd.f64(double -3.840000e+02, double %305, double %304)
%307 = load double*, double** %17
store double %306, double* %307
%308 = load double, double* %36
%309 = load double, double* %40
%310 = fmul double 4.800000e+01, %309
%311 = call double @llvm.fmuladd.f64(double -2.400000e+01, double %308, double %310)
%312 = load double, double* %38
%313 = call double @llvm.fmuladd.f64(double 1.440000e+02, double %312, double %311)
%314 = load double, double* %44
%315 = call double @llvm.fmuladd.f64(double -3.840000e+02, double %314, double %313)
%316 = load double*, double** %18
store double %315, double* %316
%317 = load double, double* %35
%318 = load double, double* %39
%319 = fmul double 2.880000e+02, %318
%320 = call double @llvm.fmuladd.f64(double -2.400000e+01, double %317, double %319)
%321 = load double, double* %45
%322 = call double @llvm.fmuladd.f64(double -3.840000e+02, double %321, double %320)
%323 = load double*, double** %19
store double %322, double* %323
%324 = load double, double* %36
%325 = load double, double* %40
%326 = fmul double 4.800000e+02, %325
%327 = call double @llvm.fmuladd.f64(double -1.200000e+02, double %324, double %326)
%328 = load double, double* %46
%329 = call double @llvm.fmuladd.f64(double -3.840000e+02, double %328, double %327)
%330 = load double*, double** %20
store double %329, double* %330
ret void
}

LLVM IR (-O2):
define void @binlensd4(double %0, double %1, double %2, double %3, double* nocapture writeonly %4, double* nocapture writeonly %5, double* nocapture writeonly %6, double* nocapture writeonly %7, double* nocapture writeonly %8, double* nocapture writeonly %9) {
%11 = fsub double 1.000000e+00, %3
%12 = fcmp olt double %11, 0.000000e+00
%13 = select i1 %12, double 0.000000e+00, double %11
%14 = select i1 %12, double 1.000000e+00, double %3
%15 = tail call double @llvm.fmuladd.f64(double %13, double %2, double %0)
%16 = fneg double %14
%17 = tail call double @llvm.fmuladd.f64(double %16, double %2, double %0)
%18 = fmul double %15, %15
%19 = fmul double %17, %17
%20 = fmul double %15, %18
%21 = fmul double %17, %19
%22 = fmul double %18, %18
%23 = fmul double %19, %19
%24 = fmul double %15, %22
%25 = fmul double %17, %23
%26 = fmul double %1, %1
%27 = fmul double %26, %1
%28 = fmul double %26, %26
%29 = fmul double %28, %1
%30 = tail call double @llvm.fmuladd.f64(double %15, double %15, double %26)
%31 = tail call double @llvm.fmuladd.f64(double %17, double %17, double %26)
%32 = fmul double %30, %30
%33 = fmul double %31, %31
%34 = fmul double %30, %32
%35 = fmul double %31, %33
%36 = fmul double %32, %32
%37 = fmul double %33, %33
%38 = fmul double %30, %36
%39 = fmul double %31, %37
%40 = fdiv double %14, %34
%41 = fdiv double %13, %35
%42 = fmul double %17, %41
%43 = tail call double @llvm.fmuladd.f64(double %40, double %15, double %42)
%44 = fmul double %41, %1
%45 = tail call double @llvm.fmuladd.f64(double %40, double %1, double %44)
%46 = fdiv double %14, %36
%47 = fdiv double %13, %37
%48 = fmul double %21, %47
%49 = tail call double @llvm.fmuladd.f64(double %46, double %20, double %48)
%50 = fmul double %18, %46
%51 = fmul double %19, %47
%52 = fmul double %51, %1
%53 = tail call double @llvm.fmuladd.f64(double %50, double %1, double %52)
%54 = fmul double %15, %46
%55 = fmul double %17, %47
%56 = fmul double %26, %55
%57 = tail call double @llvm.fmuladd.f64(double %54, double %26, double %56)
%58 = fmul double %27, %47
%59 = tail call double @llvm.fmuladd.f64(double %46, double %27, double %58)
%60 = fdiv double %14, %38
%61 = fdiv double %13, %39
%62 = fmul double %25, %61
%63 = tail call double @llvm.fmuladd.f64(double %60, double %24, double %62)
%64 = fmul double %22, %60
%65 = fmul double %23, %61
%66 = fmul double %65, %1
%67 = tail call double @llvm.fmuladd.f64(double %64, double %1, double %66)
%68 = fmul double %20, %60
%69 = fmul double %21, %61
%70 = fmul double %26, %69
%71 = tail call double @llvm.fmuladd.f64(double %68, double %26, double %70)
%72 = fmul double %18, %60
%73 = fmul double %19, %61
%74 = fmul double %27, %73
%75 = tail call double @llvm.fmuladd.f64(double %72, double %27, double %74)
%76 = fmul double %15, %60
%77 = fmul double %17, %61
%78 = fmul double %28, %77
%79 = tail call double @llvm.fmuladd.f64(double %76, double %28, double %78)
%80 = fmul double %29, %61
%81 = tail call double @llvm.fmuladd.f64(double %60, double %29, double %80)
%82 = fmul double %49, 4.800000e+02
%83 = tail call double @llvm.fmuladd.f64(double %43, double -1.200000e+02, double %82)
%84 = tail call double @llvm.fmuladd.f64(double %63, double -3.840000e+02, double %83)
store double %84, double* %4
%85 = fmul double %53, 2.880000e+02
%86 = tail call double @llvm.fmuladd.f64(double %45, double -2.400000e+01, double %85)
%87 = tail call double @llvm.fmuladd.f64(double %67, double -3.840000e+02, double %86)
store double %87, double* %5
%88 = fmul double %49, 4.800000e+01
%89 = tail call double @llvm.fmuladd.f64(double %43, double -2.400000e+01, double %88)
%90 = tail call double @llvm.fmuladd.f64(double %57, double 1.440000e+02, double %89)
%91 = tail call double @llvm.fmuladd.f64(double %71, double -3.840000e+02, double %90)
store double %91, double* %6
%92 = fmul double %59, 4.800000e+01
%93 = tail call double @llvm.fmuladd.f64(double %45, double -2.400000e+01, double %92)
%94 = tail call double @llvm.fmuladd.f64(double %53, double 1.440000e+02, double %93)
%95 = tail call double @llvm.fmuladd.f64(double %75, double -3.840000e+02, double %94)
store double %95, double* %7
%96 = fmul double %57, 2.880000e+02
%97 = tail call double @llvm.fmuladd.f64(double %43, double -2.400000e+01, double %96)
%98 = tail call double @llvm.fmuladd.f64(double %79, double -3.840000e+02, double %97)
store double %98, double* %8
%99 = fmul double %59, 4.800000e+02
%100 = tail call double @llvm.fmuladd.f64(double %45, double -1.200000e+02, double %99)
%101 = tail call double @llvm.fmuladd.f64(double %81, double -3.840000e+02, double %100)
store double %101, double* %9
ret void
}