void cdflib_cumnor(const double *arg, double *cum, double *ccum) {
  static const double a[5] = {
      2.2352520354606839287e00, 1.6102823106855587881e02,
      1.0676894854603709582e03, 1.8154981253343561249e04,
      6.5682337918207449113e-2};
  static const double b[4] = {
      4.7202581904688241870e01, 9.7609855173777669322e02,
      1.0260932208618978205e04, 4.5507789335026729956e04};
  static const double c[9] = {
      3.9894151208813466764e-1, 8.8831497943883759412e00,
      9.3506656132177855979e01, 5.9727027639480026226e02,
      2.4945375852903726711e03, 6.8481904505362823326e03,
      1.1602651437647350124e04, 9.8427148383839780218e03,
      1.0765576773720192317e-8};
  static const double d[8] = {
      2.2266688044328115691e01, 2.3538790178262499861e02,
      1.5193775994075548050e03, 6.4855582982667607550e03,
      1.8615571640885098091e04, 3.4900952721145977266e04,
      3.8912003286093271411e04, 1.9685429676859990727e04};
  static const double half = 0.5e0;
  static const double p[6] = {2.1589853405795699e-1, 1.274011611602473639e-1,
                              2.2235277870649807e-2, 1.421619193227893466e-3,
                              2.9112874951168792e-5, 2.307344176494017303e-2};
  static const double one = 1.0e0;
  static const double q[5] = {1.28426009614491121e00, 4.68238212480865118e-1,
                              6.59881378689285515e-2, 3.78239633202758244e-3,
                              7.29751555083966205e-5};
  static const double sixten = 1.60e0;
  static const double sqrpi = 3.9894228040143267794e-1;
  static const double thrsh = 0.66291e0;
  static const double root32 = 5.656854248e0;
  static const double zero = 0.0e0;
  static const int K1 = 1;
  static const int K2 = 2;
  int i;
  double del, eps, temp, x, xden, xnum, y, xsq, min;
  eps = dpmpar(K1) * 0.5e0;
  min = dpmpar(K2);
  x = *arg;
  y = fabs(x);
  if (y <= thrsh) {
    xsq = zero;
    if (y > eps) {
      xsq = x * x;
    }
    xnum = a[4] * xsq;
    xden = xsq;
    for (i = 0; i < 3; i++) {
      xnum = (xnum + a[i]) * xsq;
      xden = (xden + b[i]) * xsq;
    }
    *cum = x * (xnum + a[3]) / (xden + b[3]);
    temp = *cum;
    *cum = half + temp;
    *ccum = half - temp;
  } else if (y <= root32) {
    xnum = c[8] * y;
    xden = y;
    for (i = 0; i < 7; i++) {
      xnum = (xnum + c[i]) * y;
      xden = (xden + d[i]) * y;
    }
    *cum = (xnum + c[7]) / (xden + d[7]);
    xsq = cdflib_fifdint(y * sixten) / sixten;
    del = (y - xsq) * (y + xsq);
    *cum = exp(-(xsq * xsq * half)) * exp(-(del * half)) * *cum;
    *ccum = one - *cum;
    if (x > zero) {
      temp = *cum;
      *cum = *ccum;
      *ccum = temp;
    }
  } else {
    *cum = zero;
    xsq = one / (x * x);
    xnum = p[5] * xsq;
    xden = xsq;
    for (i = 0; i < 4; i++) {
      xnum = (xnum + p[i]) * xsq;
      xden = (xden + q[i]) * xsq;
    }
    *cum = xsq * (xnum + p[4]) / (xden + q[4]);
    *cum = (sqrpi - *cum) / y;
    xsq = cdflib_fifdint(x * sixten) / sixten;
    del = (x - xsq) * (x + xsq);
    *cum = exp(-(xsq * xsq * half)) * exp(-(del * half)) * *cum;
    *ccum = one - *cum;
    if (x > zero) {
      temp = *cum;
      *cum = *ccum;
      *ccum = temp;
    }
  }
  if (*cum < min) {
    *cum = 0.0e0;
  }
  if (*ccum < min) {
    *ccum = 0.0e0;
  }
}


x86 assembly (clang, -O0):
<cdflib_cumnor>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    $0x1,%edi
mov    $0x0,%al
call   1030 <dpmpar@plt>
cvtsi2sd %eax,%xmm0
movsd  0xea9(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    $0x2,%edi
mov    $0x0,%al
call   1030 <dpmpar@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movaps 0xe9a(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe59(%rip),%xmm0
ucomisd -0x58(%rbp),%xmm0
jb     12bd <cdflib_cumnor+0x18d>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
ucomisd -0x30(%rbp),%xmm0
jbe    11d9 <cdflib_cumnor+0xa9>
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xe7f(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x3,-0x1c(%rbp)
jge    1252 <cdflib_cumnor+0x122>
movsd  -0x50(%rbp),%xmm0
movslq -0x1c(%rbp),%rcx
lea    0xe2a(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
movslq -0x1c(%rbp),%rcx
lea    0xe3b(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11fc <cdflib_cumnor+0xcc>
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
addsd  0xdf4(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
addsd  0xe13(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xd72(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0xd5d(%rip),%xmm0
subsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1695 <cdflib_cumnor+0x565>
movsd  0xd4b(%rip),%xmm0
ucomisd -0x58(%rbp),%xmm0
jb     148a <cdflib_cumnor+0x35a>
movsd  0xdf8(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x7,-0x1c(%rbp)
jge    1349 <cdflib_cumnor+0x219>
movsd  -0x50(%rbp),%xmm0
movslq -0x1c(%rbp),%rcx
lea    0xd83(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
movslq -0x1c(%rbp),%rcx
lea    0xdb4(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    12f3 <cdflib_cumnor+0x1c3>
movsd  -0x50(%rbp),%xmm0
addsd  0xd72(%rip),%xmm0
movsd  -0x48(%rbp),%xmm1
addsd  0xdb5(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0xca9(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
mov    $0x1,%al
call   1050 <cdflib_fifdint@plt>
cvtsi2sd %eax,%xmm0
movsd  0xc91(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x60(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0xc41(%rip),%xmm1
mulsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  0xc14(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xbdb(%rip),%xmm0
subsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1485 <cdflib_cumnor+0x355>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1690 <cdflib_cumnor+0x560>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x40(%rbp),%xmm1
mulsd  -0x40(%rbp),%xmm1
movsd  0xb71(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xca0(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x4,-0x1c(%rbp)
jge    1529 <cdflib_cumnor+0x3f9>
movsd  -0x50(%rbp),%xmm0
movslq -0x1c(%rbp),%rcx
lea    0xc43(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
movslq -0x1c(%rbp),%rcx
lea    0xc64(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    14d3 <cdflib_cumnor+0x3a3>
movsd  -0x60(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
addsd  0xc15(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
addsd  0xc44(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0xac4(%rip),%xmm0
subsd  (%rax),%xmm0
divsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0xaa3(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mov    $0x1,%al
call   1050 <cdflib_fifdint@plt>
cvtsi2sd %eax,%xmm0
movsd  0xa8b(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x60(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0xa3b(%rip),%xmm1
mulsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0x78(%rbp)
movsd  0xa0e(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x9d5(%rip),%xmm0
subsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    168b <cdflib_cumnor+0x55b>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1690 <cdflib_cumnor+0x560>
jmp    1695 <cdflib_cumnor+0x565>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x68(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    16b7 <cdflib_cumnor+0x587>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x68(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    16d9 <cdflib_cumnor+0x5a9>
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cdflib_cumnor>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x48,%rsp
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
mov    $0x1,%edi
xor    %eax,%eax
call   1030 <dpmpar@plt>
mov    %eax,%ebp
mov    $0x2,%edi
xor    %eax,%eax
call   1030 <dpmpar@plt>
cvtsi2sd %eax,%xmm2
movsd  (%rbx),%xmm3
movapd 0xe93(%rip),%xmm5
andpd  %xmm3,%xmm5
movsd  0xec7(%rip),%xmm0
ucomisd %xmm5,%xmm0
jae    12dd <cdflib_cumnor+0x1ad>
movsd  0xedd(%rip),%xmm0
ucomisd %xmm5,%xmm0
movsd  %xmm2,0x28(%rsp)
movapd %xmm3,0x30(%rsp)
jae    1370 <cdflib_cumnor+0x240>
movapd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
movsd  0xf57(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0xf53(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xf4f(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0xf4b(%rip),%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm1,%xmm2
addsd  0xf43(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xf3f(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xf3b(%rip),%xmm0
addsd  0xf3b(%rip),%xmm2
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm2
addsd  0xf33(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xf2f(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xf2b(%rip),%xmm0
addsd  0xf2b(%rip),%xmm2
mulsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
movsd  0xf23(%rip),%xmm1
subsd  %xmm0,%xmm1
divsd  %xmm5,%xmm1
movsd  %xmm1,(%r15)
movapd %xmm3,%xmm0
mulsd  0xe9a(%rip),%xmm0
mov    $0x1,%al
call   1050 <cdflib_fifdint@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  0xe84(%rip),%xmm0
movapd 0x30(%rsp),%xmm2
movapd %xmm2,%xmm1
subsd  %xmm0,%xmm1
addsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,0x10(%rsp)
mulsd  %xmm0,%xmm0
mulsd  0xe64(%rip),%xmm0
call   1040 <exp@plt>
movsd  %xmm0,0x8(%rsp)
movapd 0x10(%rsp),%xmm0
mulsd  0xe4b(%rip),%xmm0
call   1040 <exp@plt>
movsd  0xe46(%rip),%xmm4
movsd  0x28(%rsp),%xmm2
mulsd  0x8(%rsp),%xmm0
mulsd  (%r15),%xmm0
movsd  %xmm0,(%r15)
jmp    14cd <cdflib_cumnor+0x39d>
cvtsi2sd %ebp,%xmm1
movsd  0xd5f(%rip),%xmm4
mulsd  %xmm4,%xmm1
movapd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
cmpltsd %xmm5,%xmm1
andpd  %xmm0,%xmm1
movsd  0xd4a(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xd46(%rip),%xmm0
mulsd  %xmm1,%xmm0
unpcklpd %xmm1,%xmm0
addpd  0xcee(%rip),%xmm0
unpcklpd %xmm1,%xmm3
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm0
addpd  0xcea(%rip),%xmm0
mulpd  %xmm1,%xmm0
addpd  0xcee(%rip),%xmm0
mulpd  %xmm3,%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  0xd0a(%rip),%xmm1
divsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
addsd  %xmm4,%xmm1
movsd  %xmm1,(%r15)
subsd  %xmm0,%xmm4
jmp    1513 <cdflib_cumnor+0x3e3>
movsd  0xcf8(%rip),%xmm0
mulsd  %xmm5,%xmm0
addsd  0xcf4(%rip),%xmm0
mulsd  %xmm5,%xmm0
movsd  0xcf0(%rip),%xmm1
addsd  %xmm5,%xmm1
mulsd  %xmm5,%xmm1
addsd  0xce8(%rip),%xmm0
addsd  0xce8(%rip),%xmm1
mulsd  %xmm5,%xmm0
mulsd  %xmm5,%xmm1
addsd  0xce0(%rip),%xmm0
mulsd  %xmm5,%xmm0
addsd  0xcdc(%rip),%xmm1
mulsd  %xmm5,%xmm1
addsd  0xcd8(%rip),%xmm0
addsd  0xcd8(%rip),%xmm1
mulsd  %xmm5,%xmm0
mulsd  %xmm5,%xmm1
addsd  0xcd0(%rip),%xmm0
mulsd  %xmm5,%xmm0
addsd  0xccc(%rip),%xmm1
mulsd  %xmm5,%xmm1
addsd  0xcc8(%rip),%xmm0
addsd  0xcc8(%rip),%xmm1
mulsd  %xmm5,%xmm0
mulsd  %xmm5,%xmm1
addsd  0xcc0(%rip),%xmm0
mulsd  %xmm5,%xmm0
addsd  0xcbc(%rip),%xmm1
mulsd  %xmm5,%xmm1
addsd  0xcb8(%rip),%xmm0
addsd  0xcb8(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,(%r15)
movapd %xmm5,%xmm0
mulsd  0xcab(%rip),%xmm0
mov    $0x1,%al
movapd %xmm5,0x10(%rsp)
call   1050 <cdflib_fifdint@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  0xc8f(%rip),%xmm0
movapd 0x10(%rsp),%xmm2
movapd %xmm2,%xmm1
subsd  %xmm0,%xmm1
addsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,0x10(%rsp)
mulsd  %xmm0,%xmm0
mulsd  0xc6f(%rip),%xmm0
call   1040 <exp@plt>
movsd  %xmm0,0x8(%rsp)
movapd 0x10(%rsp),%xmm0
mulsd  0xc56(%rip),%xmm0
call   1040 <exp@plt>
movsd  0x28(%rsp),%xmm2
mulsd  0x8(%rsp),%xmm0
mulsd  (%r15),%xmm0
movsd  %xmm0,(%r15)
movsd  0xc3b(%rip),%xmm4
subsd  %xmm0,%xmm4
movsd  %xmm4,(%r14)
xorpd  %xmm0,%xmm0
movapd 0x30(%rsp),%xmm1
ucomisd %xmm0,%xmm1
ja     1505 <cdflib_cumnor+0x3d5>
ucomisd (%r15),%xmm2
ja     151f <cdflib_cumnor+0x3ef>
ucomisd %xmm4,%xmm2
jbe    14fa <cdflib_cumnor+0x3ca>
movq   $0x0,(%r14)
add    $0x48,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
movsd  (%r15),%xmm0
movsd  %xmm4,(%r15)
movapd %xmm0,%xmm4
movsd  %xmm4,(%r14)
ucomisd (%r15),%xmm2
jbe    14ed <cdflib_cumnor+0x3bd>
movq   $0x0,(%r15)
movsd  (%r14),%xmm4
ucomisd %xmm4,%xmm2
ja     14f3 <cdflib_cumnor+0x3c3>
jmp    14fa <cdflib_cumnor+0x3ca>

LLVM IR (-O0):
@cdflib_cumnor.a = internal constant [5 x double] [double 0x4001E1CBD1B4F7F3, double 0x406420E744D785B7, double 0x4090AEC20879FD71, double 0x40D1BABECCDAD2EC, double 0x3FB0D08EC54894E1]
@cdflib_cumnor.b = internal constant [4 x double] [double 0x404799EE342FB2DE, double 0x408E80C9D57E55B8, double 0x40C40A77529CADC8, double 0x40E63879423B87AD]
@cdflib_cumnor.c = internal constant [9 x double] [double 0x3FD98841FADBDC66, double 0x4021C42C35B8BC02, double 0x4057606D0DD78164, double 0x4082AA2986ABA462, double 0x40A37D133E6111EC, double 0x40BAC030C15DC8D7, double 0x40C6A953624F0F60, double 0x40C3395B7FD2FC8E, double 0x3E471E703C5F5815]
@cdflib_cumnor.d = internal constant [8 x double] [double 0x40364445AAEC9F9B, double 0x406D6C69B0FFCDE7, double 0x4097BD82A96B49BF, double 0x40B9558EECA29D27, double 0x40D22DE495C3A6A3, double 0x40E10A9E7CB10E86, double 0x40E300001AEB6FE4, double 0x40D3395B7FD35F61]
@cdflib_cumnor.half = internal constant double 5.000000e-01
@cdflib_cumnor.p = internal constant [6 x double] [double 0x3FCBA2902B84421C, double 0x3FC04EAE6653ED94, double 0x3F96C4D83D16707A, double 0x3F574AB3FC4E4F8B, double 0x3EFE86ED886DC483, double 0x3F97A090772574DA]
@cdflib_cumnor.one = internal constant double 1.000000e+00
@cdflib_cumnor.q = internal constant [5 x double] [double 0x3FF48C54508800DB, double 0x3FDDF79D6855F0AD, double 0x3FB0E4993E122C39, double 0x3F6EFC42917D7DE7, double 0x3F132147A014BAD1]
@cdflib_cumnor.sixten = internal constant double 1.600000e+00
@cdflib_cumnor.sqrpi = internal constant double 0x3FD9884533D43651
@cdflib_cumnor.thrsh = internal constant double 6.629100e-01
@cdflib_cumnor.root32 = internal constant double 0x4016A09E6665983E
@cdflib_cumnor.zero = internal constant double 0.000000e+00
@cdflib_cumnor.K1 = internal constant i32 1
@cdflib_cumnor.K2 = internal constant i32 2
define void @cdflib_cumnor(double* %0, double* %1, double* %2) {
%4 = alloca double*
%5 = alloca double*
%6 = alloca double*
%7 = alloca i32
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
store double* %0, double** %4
store double* %1, double** %5
store double* %2, double** %6
%17 = call i32 (i32, ...) bitcast (i32 (...)* @dpmpar to i32 (i32, ...)*)(i32 1)
%18 = sitofp i32 %17 to double
%19 = fmul double %18, 5.000000e-01
store double %19, double* %9
%20 = call i32 (i32, ...) bitcast (i32 (...)* @dpmpar to i32 (i32, ...)*)(i32 2)
%21 = sitofp i32 %20 to double
store double %21, double* %16
%22 = load double*, double** %4
%23 = load double, double* %22
store double %23, double* %11
%24 = load double, double* %11
%25 = call double @llvm.fabs.f64(double %24)
store double %25, double* %14
%26 = load double, double* %14
%27 = fcmp ole double %26, 6.629100e-01
br i1 %27, label %28, label %83
28: ; preds = %3
store double 0.000000e+00, double* %15
%29 = load double, double* %14
%30 = load double, double* %9
%31 = fcmp ogt double %29, %30
br i1 %31, label %32, label %36
32: ; preds = %28
%33 = load double, double* %11
%34 = load double, double* %11
%35 = fmul double %33, %34
store double %35, double* %15
br label %36
36: ; preds = %32, %28
%37 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @cdflib_cumnor.a, i64 0, i64 4)
%38 = load double, double* %15
%39 = fmul double %37, %38
store double %39, double* %13
%40 = load double, double* %15
store double %40, double* %12
store i32 0, i32* %7
br label %41
41: ; preds = %61, %36
%42 = load i32, i32* %7
%43 = icmp slt i32 %42, 3
br i1 %43, label %44, label %64
44: ; preds = %41
%45 = load double, double* %13
%46 = load i32, i32* %7
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [5 x double], [5 x double]* @cdflib_cumnor.a, i64 0, i64 %47
%49 = load double, double* %48
%50 = fadd double %45, %49
%51 = load double, double* %15
%52 = fmul double %50, %51
store double %52, double* %13
%53 = load double, double* %12
%54 = load i32, i32* %7
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds [4 x double], [4 x double]* @cdflib_cumnor.b, i64 0, i64 %55
%57 = load double, double* %56
%58 = fadd double %53, %57
%59 = load double, double* %15
%60 = fmul double %58, %59
store double %60, double* %12
br label %61
61: ; preds = %44
%62 = load i32, i32* %7
%63 = add nsw i32 %62, 1
store i32 %63, i32* %7
br label %41
64: ; preds = %41
%65 = load double, double* %11
%66 = load double, double* %13
%67 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @cdflib_cumnor.a, i64 0, i64 3)
%68 = fadd double %66, %67
%69 = fmul double %65, %68
%70 = load double, double* %12
%71 = load double, double* getelementptr inbounds ([4 x double], [4 x double]* @cdflib_cumnor.b, i64 0, i64 3)
%72 = fadd double %70, %71
%73 = fdiv double %69, %72
%74 = load double*, double** %5
store double %73, double* %74
%75 = load double*, double** %5
%76 = load double, double* %75
store double %76, double* %10
%77 = load double, double* %10
%78 = fadd double 5.000000e-01, %77
%79 = load double*, double** %5
store double %78, double* %79
%80 = load double, double* %10
%81 = fsub double 5.000000e-01, %80
%82 = load double*, double** %6
store double %81, double* %82
br label %258
83: ; preds = %3
%84 = load double, double* %14
%85 = fcmp ole double %84, 0x4016A09E6665983E
br i1 %85, label %86, label %165
86: ; preds = %83
%87 = load double, double* getelementptr inbounds ([9 x double], [9 x double]* @cdflib_cumnor.c, i64 0, i64 8)
%88 = load double, double* %14
%89 = fmul double %87, %88
store double %89, double* %13
%90 = load double, double* %14
store double %90, double* %12
store i32 0, i32* %7
br label %91
91: ; preds = %111, %86
%92 = load i32, i32* %7
%93 = icmp slt i32 %92, 7
br i1 %93, label %94, label %114
94: ; preds = %91
%95 = load double, double* %13
%96 = load i32, i32* %7
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [9 x double], [9 x double]* @cdflib_cumnor.c, i64 0, i64 %97
%99 = load double, double* %98
%100 = fadd double %95, %99
%101 = load double, double* %14
%102 = fmul double %100, %101
store double %102, double* %13
%103 = load double, double* %12
%104 = load i32, i32* %7
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [8 x double], [8 x double]* @cdflib_cumnor.d, i64 0, i64 %105
%107 = load double, double* %106
%108 = fadd double %103, %107
%109 = load double, double* %14
%110 = fmul double %108, %109
store double %110, double* %12
br label %111
111: ; preds = %94
%112 = load i32, i32* %7
%113 = add nsw i32 %112, 1
store i32 %113, i32* %7
br label %91
114: ; preds = %91
%115 = load double, double* %13
%116 = load double, double* getelementptr inbounds ([9 x double], [9 x double]* @cdflib_cumnor.c, i64 0, i64 7)
%117 = fadd double %115, %116
%118 = load double, double* %12
%119 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @cdflib_cumnor.d, i64 0, i64 7)
%120 = fadd double %118, %119
%121 = fdiv double %117, %120
%122 = load double*, double** %5
store double %121, double* %122
%123 = load double, double* %14
%124 = fmul double %123, 1.600000e+00
%125 = call i32 (double, ...) bitcast (i32 (...)* @cdflib_fifdint to i32 (double, ...)*)(double %124)
%126 = sitofp i32 %125 to double
%127 = fdiv double %126, 1.600000e+00
store double %127, double* %15
%128 = load double, double* %14
%129 = load double, double* %15
%130 = fsub double %128, %129
%131 = load double, double* %14
%132 = load double, double* %15
%133 = fadd double %131, %132
%134 = fmul double %130, %133
store double %134, double* %8
%135 = load double, double* %15
%136 = load double, double* %15
%137 = fmul double %135, %136
%138 = fmul double %137, 5.000000e-01
%139 = fneg double %138
%140 = call double @exp(double %139)
%141 = load double, double* %8
%142 = fmul double %141, 5.000000e-01
%143 = fneg double %142
%144 = call double @exp(double %143)
%145 = fmul double %140, %144
%146 = load double*, double** %5
%147 = load double, double* %146
%148 = fmul double %145, %147
%149 = load double*, double** %5
store double %148, double* %149
%150 = load double*, double** %5
%151 = load double, double* %150
%152 = fsub double 1.000000e+00, %151
%153 = load double*, double** %6
store double %152, double* %153
%154 = load double, double* %11
%155 = fcmp ogt double %154, 0.000000e+00
br i1 %155, label %156, label %164
156: ; preds = %114
%157 = load double*, double** %5
%158 = load double, double* %157
store double %158, double* %10
%159 = load double*, double** %6
%160 = load double, double* %159
%161 = load double*, double** %5
store double %160, double* %161
%162 = load double, double* %10
%163 = load double*, double** %6
store double %162, double* %163
br label %164
164: ; preds = %156, %114
br label %257
165: ; preds = %83
%166 = load double*, double** %5
store double 0.000000e+00, double* %166
%167 = load double, double* %11
%168 = load double, double* %11
%169 = fmul double %167, %168
%170 = fdiv double 1.000000e+00, %169
store double %170, double* %15
%171 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @cdflib_cumnor.p, i64 0, i64 5)
%172 = load double, double* %15
%173 = fmul double %171, %172
store double %173, double* %13
%174 = load double, double* %15
store double %174, double* %12
store i32 0, i32* %7
br label %175
175: ; preds = %195, %165
%176 = load i32, i32* %7
%177 = icmp slt i32 %176, 4
br i1 %177, label %178, label %198
178: ; preds = %175
%179 = load double, double* %13
%180 = load i32, i32* %7
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds [6 x double], [6 x double]* @cdflib_cumnor.p, i64 0, i64 %181
%183 = load double, double* %182
%184 = fadd double %179, %183
%185 = load double, double* %15
%186 = fmul double %184, %185
store double %186, double* %13
%187 = load double, double* %12
%188 = load i32, i32* %7
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds [5 x double], [5 x double]* @cdflib_cumnor.q, i64 0, i64 %189
%191 = load double, double* %190
%192 = fadd double %187, %191
%193 = load double, double* %15
%194 = fmul double %192, %193
store double %194, double* %12
br label %195
195: ; preds = %178
%196 = load i32, i32* %7
%197 = add nsw i32 %196, 1
store i32 %197, i32* %7
br label %175
198: ; preds = %175
%199 = load double, double* %15
%200 = load double, double* %13
%201 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @cdflib_cumnor.p, i64 0, i64 4)
%202 = fadd double %200, %201
%203 = fmul double %199, %202
%204 = load double, double* %12
%205 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @cdflib_cumnor.q, i64 0, i64 4)
%206 = fadd double %204, %205
%207 = fdiv double %203, %206
%208 = load double*, double** %5
store double %207, double* %208
%209 = load double*, double** %5
%210 = load double, double* %209
%211 = fsub double 0x3FD9884533D43651, %210
%212 = load double, double* %14
%213 = fdiv double %211, %212
%214 = load double*, double** %5
store double %213, double* %214
%215 = load double, double* %11
%216 = fmul double %215, 1.600000e+00
%217 = call i32 (double, ...) bitcast (i32 (...)* @cdflib_fifdint to i32 (double, ...)*)(double %216)
%218 = sitofp i32 %217 to double
%219 = fdiv double %218, 1.600000e+00
store double %219, double* %15
%220 = load double, double* %11
%221 = load double, double* %15
%222 = fsub double %220, %221
%223 = load double, double* %11
%224 = load double, double* %15
%225 = fadd double %223, %224
%226 = fmul double %222, %225
store double %226, double* %8
%227 = load double, double* %15
%228 = load double, double* %15
%229 = fmul double %227, %228
%230 = fmul double %229, 5.000000e-01
%231 = fneg double %230
%232 = call double @exp(double %231)
%233 = load double, double* %8
%234 = fmul double %233, 5.000000e-01
%235 = fneg double %234
%236 = call double @exp(double %235)
%237 = fmul double %232, %236
%238 = load double*, double** %5
%239 = load double, double* %238
%240 = fmul double %237, %239
%241 = load double*, double** %5
store double %240, double* %241
%242 = load double*, double** %5
%243 = load double, double* %242
%244 = fsub double 1.000000e+00, %243
%245 = load double*, double** %6
store double %244, double* %245
%246 = load double, double* %11
%247 = fcmp ogt double %246, 0.000000e+00
br i1 %247, label %248, label %256
248: ; preds = %198
%249 = load double*, double** %5
%250 = load double, double* %249
store double %250, double* %10
%251 = load double*, double** %6
%252 = load double, double* %251
%253 = load double*, double** %5
store double %252, double* %253
%254 = load double, double* %10
%255 = load double*, double** %6
store double %254, double* %255
br label %256
256: ; preds = %248, %198
br label %257
257: ; preds = %256, %164
br label %258
258: ; preds = %257, %64
%259 = load double*, double** %5
%260 = load double, double* %259
%261 = load double, double* %16
%262 = fcmp olt double %260, %261
br i1 %262, label %263, label %265
263: ; preds = %258
%264 = load double*, double** %5
store double 0.000000e+00, double* %264
br label %265
265: ; preds = %263, %258
%266 = load double*, double** %6
%267 = load double, double* %266
%268 = load double, double* %16
%269 = fcmp olt double %267, %268
br i1 %269, label %270, label %272
270: ; preds = %265
%271 = load double*, double** %6
store double 0.000000e+00, double* %271
br label %272
272: ; preds = %270, %265
ret void
}

LLVM IR (-O2):
define void @cdflib_cumnor(double* nocapture %0, double* nocapture %1, double* nocapture %2) {
%4 = tail call i32 (i32, ...) bitcast (i32 (...)* @dpmpar to i32 (i32, ...)*)(i32 1)
%5 = tail call i32 (i32, ...) bitcast (i32 (...)* @dpmpar to i32 (i32, ...)*)(i32 2)
%6 = sitofp i32 %5 to double
%7 = load double, double* %0
%8 = tail call double @llvm.fabs.f64(double %7)
%9 = fcmp ugt double %8, 6.629100e-01
br i1 %9, label %37, label %10
10: ; preds = %3
%11 = sitofp i32 %4 to double
%12 = fmul double %11, 5.000000e-01
%13 = fcmp ogt double %8, %12
%14 = fmul double %7, %7
%15 = select i1 %13, double %14, double 0.000000e+00
%16 = fmul double %15, 0x3FB0D08EC54894E1
%17 = fadd double %16, 0x4001E1CBD1B4F7F3
%18 = fmul double %15, %17
%19 = insertelement <2 x double> poison, double %18, i64 0
%20 = insertelement <2 x double> %19, double %15, i64 1
%21 = fadd <2 x double> %20, <double 0x406420E744D785B7, double 0x404799EE342FB2DE>
%22 = insertelement <2 x double> poison, double %15, i64 0
%23 = shufflevector <2 x double> %22, <2 x double> poison, <2 x i32> zeroinitializer
%24 = fmul <2 x double> %23, %21
%25 = fadd <2 x double> %24, <double 0x4090AEC20879FD71, double 0x408E80C9D57E55B8>
%26 = fmul <2 x double> %23, %25
%27 = fadd <2 x double> %26, <double 0x40D1BABECCDAD2EC, double 0x40C40A77529CADC8>
%28 = insertelement <2 x double> poison, double %7, i64 0
%29 = insertelement <2 x double> %28, double %15, i64 1
%30 = fmul <2 x double> %29, %27
%31 = extractelement <2 x double> %30, i64 1
%32 = fadd double %31, 0x40E63879423B87AD
%33 = extractelement <2 x double> %30, i64 0
%34 = fdiv double %33, %32
%35 = fadd double %34, 5.000000e-01
store double %35, double* %1
%36 = fsub double 5.000000e-01, %34
br label %136
37: ; preds = %3
%38 = fcmp ugt double %8, 0x4016A09E6665983E
br i1 %38, label %91, label %39
39: ; preds = %37
%40 = fmul double %8, 0x3E471E703C5F5815
%41 = fadd double %40, 0x3FD98841FADBDC66
%42 = fmul double %8, %41
%43 = fadd double %8, 0x40364445AAEC9F9B
%44 = fmul double %8, %43
%45 = fadd double %42, 0x4021C42C35B8BC02
%46 = fmul double %8, %45
%47 = fadd double %44, 0x406D6C69B0FFCDE7
%48 = fmul double %8, %47
%49 = fadd double %46, 0x4057606D0DD78164
%50 = fmul double %8, %49
%51 = fadd double %48, 0x4097BD82A96B49BF
%52 = fmul double %8, %51
%53 = fadd double %50, 0x4082AA2986ABA462
%54 = fmul double %8, %53
%55 = fadd double %52, 0x40B9558EECA29D27
%56 = fmul double %8, %55
%57 = fadd double %54, 0x40A37D133E6111EC
%58 = fmul double %8, %57
%59 = fadd double %56, 0x40D22DE495C3A6A3
%60 = fmul double %8, %59
%61 = fadd double %58, 0x40BAC030C15DC8D7
%62 = fmul double %8, %61
%63 = fadd double %60, 0x40E10A9E7CB10E86
%64 = fmul double %8, %63
%65 = fadd double %62, 0x40C6A953624F0F60
%66 = fmul double %8, %65
%67 = fadd double %64, 0x40E300001AEB6FE4
%68 = fmul double %8, %67
%69 = fadd double %66, 0x40C3395B7FD2FC8E
%70 = fadd double %68, 0x40D3395B7FD35F61
%71 = fdiv double %69, %70
store double %71, double* %1
%72 = fmul double %8, 1.600000e+00
%73 = tail call i32 (double, ...) bitcast (i32 (...)* @cdflib_fifdint to i32 (double, ...)*)(double %72)
%74 = sitofp i32 %73 to double
%75 = fdiv double %74, 1.600000e+00
%76 = fsub double %8, %75
%77 = fadd double %8, %75
%78 = fmul double %76, %77
%79 = fmul double %75, %75
%80 = fmul double %79, -5.000000e-01
%81 = tail call double @exp(double %80)
%82 = fmul double %78, -5.000000e-01
%83 = tail call double @exp(double %82)
%84 = fmul double %81, %83
%85 = load double, double* %1
%86 = fmul double %84, %85
store double %86, double* %1
%87 = fsub double 1.000000e+00, %86
store double %87, double* %2
%88 = fcmp ogt double %7, 0.000000e+00
br i1 %88, label %89, label %138
89: ; preds = %39
%90 = load double, double* %1
store double %87, double* %1
br label %136
91: ; preds = %37
%92 = fmul double %7, %7
%93 = fdiv double 1.000000e+00, %92
%94 = fmul double %93, 0x3F97A090772574DA
%95 = fadd double %94, 0x3FCBA2902B84421C
%96 = fmul double %93, %95
%97 = fadd double %93, 0x3FF48C54508800DB
%98 = fmul double %93, %97
%99 = fadd double %96, 0x3FC04EAE6653ED94
%100 = fmul double %93, %99
%101 = fadd double %98, 0x3FDDF79D6855F0AD
%102 = fmul double %93, %101
%103 = fadd double %100, 0x3F96C4D83D16707A
%104 = fmul double %93, %103
%105 = fadd double %102, 0x3FB0E4993E122C39
%106 = fmul double %93, %105
%107 = fadd double %104, 0x3F574AB3FC4E4F8B
%108 = fmul double %93, %107
%109 = fadd double %106, 0x3F6EFC42917D7DE7
%110 = fmul double %93, %109
%111 = fadd double %108, 0x3EFE86ED886DC483
%112 = fmul double %93, %111
%113 = fadd double %110, 0x3F132147A014BAD1
%114 = fdiv double %112, %113
%115 = fsub double 0x3FD9884533D43651, %114
%116 = fdiv double %115, %8
store double %116, double* %1
%117 = fmul double %7, 1.600000e+00
%118 = tail call i32 (double, ...) bitcast (i32 (...)* @cdflib_fifdint to i32 (double, ...)*)(double %117)
%119 = sitofp i32 %118 to double
%120 = fdiv double %119, 1.600000e+00
%121 = fsub double %7, %120
%122 = fadd double %7, %120
%123 = fmul double %121, %122
%124 = fmul double %120, %120
%125 = fmul double %124, -5.000000e-01
%126 = tail call double @exp(double %125)
%127 = fmul double %123, -5.000000e-01
%128 = tail call double @exp(double %127)
%129 = fmul double %126, %128
%130 = load double, double* %1
%131 = fmul double %129, %130
store double %131, double* %1
%132 = fsub double 1.000000e+00, %131
store double %132, double* %2
%133 = fcmp ogt double %7, 0.000000e+00
br i1 %133, label %134, label %138
134: ; preds = %91
%135 = load double, double* %1
store double %132, double* %1
br label %136
136: ; preds = %10, %134, %89
%137 = phi double [ %90, %89 ], [ %135, %134 ], [ %36, %10 ]
store double %137, double* %2
br label %138
138: ; preds = %136, %39, %91
%139 = phi double [ %87, %39 ], [ %132, %91 ], [ %137, %136 ]
%140 = load double, double* %1
%141 = fcmp olt double %140, %6
br i1 %141, label %142, label %144
142: ; preds = %138
store double 0.000000e+00, double* %1
%143 = load double, double* %2
br label %144
144: ; preds = %142, %138
%145 = phi double [ %143, %142 ], [ %139, %138 ]
%146 = fcmp olt double %145, %6
br i1 %146, label %147, label %148
147: ; preds = %144
store double 0.000000e+00, double* %2
br label %148
148: ; preds = %147, %144
ret void
}