void errf(double *var_xx, double *var_yy, double *var_wx, double *var_wy) {
  int n, nc, nu;
  double cc, h, q, rx[33], ry[33], saux, sx, sy, tn, tx, ty, wx, wy, x, xh, xl,
      xlim, xx, y, yh, ylim, yy;
  cc = 1.12837916709551;
  xlim = 5.33;
  ylim = 4.29;
  xx = *var_xx;
  yy = *var_yy;
  wx = *var_wx;
  wy = *var_wy;
  x = fabs(xx);
  y = fabs(yy);
  if (y < ylim && x < xlim) {
    q = (1.0 - y / ylim) * sqrt(1.0 - (x / xlim) * (x / xlim));
    h = 1.0 / (3.2 * q);
    nc = 7 + (int)(23.0 * q);
    xl = exp((1 - nc) * log(h));
    xh = y + 0.5 / h;
    yh = x;
    nu = 10 + (int)(21 * q);
    rx[nu] = 0.0;
    ry[nu] = 0.0;
    for (n = nu; n >= 1; n--) {
      tx = xh + (double)(n)*rx[n];
      ty = yh - (double)(n)*ry[n];
      tn = tx * tx;
      rx[n - 1] = (0.5 * tx) / tn;
      ry[n - 1] = (0.5 * ty) / tn;
    }
    sx = 0.0;
    sy = 0.0;
    for (n = nc; n >= 1; n--) {
      saux = sx + xl;
      sx = rx[n - 1] * saux - ry[n - 1] * sy;
      sy = rx[n - 1] * sy + ry[n - 1] * saux;
      xl = h * xl;
    }
    wx = cc * sx;
    wy = cc * sy;
  } else {
    xh = y;
    yh = x;
    rx[0] = 0.0;
    ry[0] = 0.0;
    for (n = 9; n >= 1; n--) {
      tx = xh + (double)(n)*rx[0];
      ty = yh - (double)(n)*ry[0];
      tn = tx * tx + ty * ty;
      rx[0] = (0.5 * tx) / tn;
      ry[0] = (0.5 * ty) / tn;
    }
    wx = cc * rx[0];
    wy = cc * ry[0];
  }
  if (yy < 0.0) {
    wx = (2.0 * exp(y * y - x * x)) * cos((2.0 * x) * y) - wx;
    wy = ((-1.0 * 2.0) * exp(y * y - x * x)) * sin((2.0 * x) * y) - wy;
    if (xx > 0.0)
      wy = -1.0 * wy;
  } else if (xx < 0.0)
    wy = -1.0 * wy;
  *var_xx = xx;
  *var_yy = yy;
  *var_wx = wx;
  *var_wy = wy;
}


x86 assembly (clang, -O0):
<errf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x310,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movsd  0xead(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe98(%rip),%xmm0
movsd  %xmm0,-0x2c0(%rbp)
ff
movsd  0xe80(%rip),%xmm0
movsd  %xmm0,-0x2e0(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x2c8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x2e8(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x298(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x2a0(%rbp)
ff
movsd  -0x2c8(%rbp),%xmm0
ff
movaps 0xe19(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x2a8(%rbp)
ff
movsd  -0x2e8(%rbp),%xmm0
ff
movaps 0xdfe(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x2d0(%rbp)
ff
movsd  -0x2d0(%rbp),%xmm1
ff
movsd  -0x2e0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    15bb <errf+0x46b>
movsd  -0x2a8(%rbp),%xmm1
ff
movsd  -0x2c0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    15bb <errf+0x46b>
movsd  -0x2d0(%rbp),%xmm1
ff
divsd  -0x2e0(%rbp),%xmm1
ff
movsd  0xde6(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x2f8(%rbp)
ff
movsd  -0x2a8(%rbp),%xmm0
ff
divsd  -0x2c0(%rbp),%xmm0
ff
movsd  -0x2a8(%rbp),%xmm1
ff
divsd  -0x2c0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xd97(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1070 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x2f8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xd7a(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
movsd  0xd65(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xd4c(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvttsd2si %xmm0,%eax
add    $0x7,%eax
mov    %eax,-0x28(%rbp)
mov    $0x1,%eax
sub    -0x28(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x2f0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
call   1060 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x2f0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0x2b8(%rbp)
ff
movsd  -0x2d0(%rbp),%xmm0
ff
movsd  0xce3(%rip),%xmm1
divsd  -0x40(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x2b0(%rbp)
ff
movsd  -0x2a8(%rbp),%xmm0
ff
movsd  %xmm0,-0x2d8(%rbp)
ff
movsd  0xcc2(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvttsd2si %xmm0,%eax
add    $0xa,%eax
mov    %eax,-0x2c(%rbp)
movslq -0x2c(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x150(%rbp,%rax,8)
ff ff
movslq -0x2c(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x260(%rbp,%rax,8)
ff ff
mov    -0x2c(%rbp),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x1,-0x24(%rbp)
jl     1490 <errf+0x340>
movsd  -0x2b0(%rbp),%xmm1
ff
cvtsi2sdl -0x24(%rbp),%xmm0
movslq -0x24(%rbp),%rax
movsd  -0x150(%rbp,%rax,8),%xmm2
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x288(%rbp)
ff
movsd  -0x2d8(%rbp),%xmm1
ff
cvtsi2sdl -0x24(%rbp),%xmm0
movslq -0x24(%rbp),%rax
movsd  -0x260(%rbp,%rax,8),%xmm2
ff ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x290(%rbp)
ff
movsd  -0x288(%rbp),%xmm0
ff
mulsd  -0x288(%rbp),%xmm0
ff
movsd  %xmm0,-0x280(%rbp)
ff
movsd  0xbf0(%rip),%xmm0
mulsd  -0x288(%rbp),%xmm0
ff
divsd  -0x280(%rbp),%xmm0
ff
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  %xmm0,-0x150(%rbp,%rax,8)
ff ff
movsd  0xbc7(%rip),%xmm0
mulsd  -0x290(%rbp),%xmm0
ff
divsd  -0x280(%rbp),%xmm0
ff
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  %xmm0,-0x260(%rbp,%rax,8)
ff ff
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    13a3 <errf+0x253>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x270(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x278(%rbp)
ff
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x1,-0x24(%rbp)
jl     158c <errf+0x43c>
movsd  -0x270(%rbp),%xmm0
ff
addsd  -0x2b8(%rbp),%xmm0
ff
movsd  %xmm0,-0x268(%rbp)
ff
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  -0x150(%rbp,%rax,8),%xmm0
ff ff
movsd  -0x268(%rbp),%xmm2
ff
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  -0x260(%rbp,%rax,8),%xmm1
ff ff
mulsd  -0x278(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x270(%rbp)
ff
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  -0x150(%rbp,%rax,8),%xmm0
ff ff
movsd  -0x278(%rbp),%xmm2
ff
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  -0x260(%rbp,%rax,8),%xmm1
ff ff
mulsd  -0x268(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x278(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
mulsd  -0x2b8(%rbp),%xmm0
ff
movsd  %xmm0,-0x2b8(%rbp)
ff
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    14ac <errf+0x35c>
movsd  -0x38(%rbp),%xmm0
mulsd  -0x270(%rbp),%xmm0
ff
movsd  %xmm0,-0x298(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
mulsd  -0x278(%rbp),%xmm0
ff
movsd  %xmm0,-0x2a0(%rbp)
ff
jmp    170b <errf+0x5bb>
movsd  -0x2d0(%rbp),%xmm0
ff
movsd  %xmm0,-0x2b0(%rbp)
ff
movsd  -0x2a8(%rbp),%xmm0
ff
movsd  %xmm0,-0x2d8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x260(%rbp)
ff
movl   $0x9,-0x24(%rbp)
cmpl   $0x1,-0x24(%rbp)
jl     16e1 <errf+0x591>
movsd  -0x2b0(%rbp),%xmm1
ff
cvtsi2sdl -0x24(%rbp),%xmm0
movsd  -0x150(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x288(%rbp)
ff
movsd  -0x2d8(%rbp),%xmm1
ff
cvtsi2sdl -0x24(%rbp),%xmm0
movsd  -0x260(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x290(%rbp)
ff
movsd  -0x288(%rbp),%xmm0
ff
movsd  -0x288(%rbp),%xmm2
ff
movsd  -0x290(%rbp),%xmm1
ff
mulsd  -0x290(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x280(%rbp)
ff
movsd  0x98d(%rip),%xmm0
mulsd  -0x288(%rbp),%xmm0
ff
divsd  -0x280(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
movsd  0x96d(%rip),%xmm0
mulsd  -0x290(%rbp),%xmm0
ff
divsd  -0x280(%rbp),%xmm0
ff
movsd  %xmm0,-0x260(%rbp)
ff
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    15f8 <errf+0x4a8>
movsd  -0x38(%rbp),%xmm0
mulsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0x298(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
mulsd  -0x260(%rbp),%xmm0
ff
movsd  %xmm0,-0x2a0(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x2e8(%rbp),%xmm0
ff
jbe    18b2 <errf+0x762>
movsd  -0x2d0(%rbp),%xmm0
ff
movsd  -0x2d0(%rbp),%xmm2
ff
movsd  -0x2a8(%rbp),%xmm1
ff
mulsd  -0x2a8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  0x8ed(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x308(%rbp)
ff
movsd  0x8d9(%rip),%xmm0
mulsd  -0x2a8(%rbp),%xmm0
ff
mulsd  -0x2d0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movaps %xmm0,%xmm2
movsd  -0x308(%rbp),%xmm0
ff
movsd  -0x298(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x298(%rbp)
ff
movsd  -0x2d0(%rbp),%xmm0
ff
movsd  -0x2d0(%rbp),%xmm2
ff
movsd  -0x2a8(%rbp),%xmm1
ff
mulsd  -0x2a8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  0x843(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x300(%rbp)
ff
movsd  0x827(%rip),%xmm0
mulsd  -0x2a8(%rbp),%xmm0
ff
mulsd  -0x2d0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movaps %xmm0,%xmm2
movsd  -0x300(%rbp),%xmm0
ff
movsd  -0x2a0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x2a0(%rbp)
ff
movsd  -0x2c8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    18ad <errf+0x75d>
movsd  0x7b3(%rip),%xmm0
mulsd  -0x2a0(%rbp),%xmm0
ff
movsd  %xmm0,-0x2a0(%rbp)
ff
jmp    18e0 <errf+0x790>
xorps  %xmm0,%xmm0
ucomisd -0x2c8(%rbp),%xmm0
ff
jbe    18db <errf+0x78b>
movsd  0x785(%rip),%xmm0
mulsd  -0x2a0(%rbp),%xmm0
ff
movsd  %xmm0,-0x2a0(%rbp)
ff
jmp    18e0 <errf+0x790>
movsd  -0x2c8(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x2e8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x298(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x2a0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x310,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<errf>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x298,%rsp
mov    %rcx,%r14
mov    %rdx,%rbx
mov    %rsi,%r12
mov    %rdi,%r13
movsd  (%rdi),%xmm11
movsd  (%rsi),%xmm12
movapd 0xe81(%rip),%xmm4
movapd %xmm11,%xmm6
andpd  %xmm4,%xmm6
andpd  %xmm12,%xmm4
movsd  0xedb(%rip),%xmm0
ucomisd %xmm4,%xmm0
movapd %xmm11,0x70(%rsp)
movapd %xmm12,0x50(%rsp)
movapd %xmm6,0x20(%rsp)
movapd %xmm4,0x10(%rsp)
jbe    120f <errf+0xbf>
movsd  0xebb(%rip),%xmm0
ucomisd %xmm6,%xmm0
jbe    120f <errf+0xbf>
movapd %xmm4,%xmm3
divsd  0xf19(%rip),%xmm3
movsd  0xf19(%rip),%xmm2
addsd  %xmm2,%xmm3
movapd %xmm6,%xmm1
divsd  0xe91(%rip),%xmm1
mulsd  %xmm1,%xmm1
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %rbx,0x68(%rsp)
jb     1434 <errf+0x2e4>
sqrtsd %xmm0,%xmm0
jmp    144b <errf+0x2fb>
movq   $0x0,0x190(%rsp)
movq   $0x0,0x80(%rsp)
movapd %xmm11,%xmm0
mulsd  %xmm11,%xmm0
movapd %xmm12,%xmm2
mulsd  %xmm12,%xmm2
addsd  %xmm0,%xmm2
movsd  0xe39(%rip),%xmm0
movapd %xmm4,%xmm7
mulsd  %xmm0,%xmm7
divsd  %xmm2,%xmm7
movapd %xmm6,%xmm1
mulsd  %xmm0,%xmm1
divsd  %xmm2,%xmm1
mulsd  0xe21(%rip),%xmm7
addsd  %xmm4,%xmm7
mulsd  0xe1d(%rip),%xmm1
addsd  %xmm6,%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm7,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm7
divsd  %xmm3,%xmm7
mulsd  %xmm0,%xmm1
divsd  %xmm3,%xmm1
mulsd  0xdf5(%rip),%xmm7
addsd  %xmm4,%xmm7
mulsd  0xdf1(%rip),%xmm1
addsd  %xmm6,%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm7,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm7
divsd  %xmm3,%xmm7
mulsd  %xmm0,%xmm1
mulsd  0xdcd(%rip),%xmm7
divsd  %xmm3,%xmm1
addsd  %xmm4,%xmm7
mulsd  0xdc5(%rip),%xmm1
addsd  %xmm6,%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm7,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm7
divsd  %xmm3,%xmm7
mulsd  %xmm0,%xmm1
divsd  %xmm3,%xmm1
mulsd  0xd9d(%rip),%xmm7
mulsd  0xd9d(%rip),%xmm1
addsd  %xmm4,%xmm7
addsd  %xmm6,%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm7,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm7
divsd  %xmm3,%xmm7
mulsd  %xmm0,%xmm1
divsd  %xmm3,%xmm1
mulsd  0xd71(%rip),%xmm7
addsd  %xmm4,%xmm7
mulsd  0xd6d(%rip),%xmm1
addsd  %xmm6,%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm7,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm7
divsd  %xmm3,%xmm7
mulsd  %xmm0,%xmm1
divsd  %xmm3,%xmm1
mulsd  0xd45(%rip),%xmm7
addsd  %xmm4,%xmm7
mulsd  0xd41(%rip),%xmm1
addsd  %xmm6,%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm7,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm7
divsd  %xmm3,%xmm7
mulsd  %xmm0,%xmm1
divsd  %xmm3,%xmm1
addsd  %xmm7,%xmm7
addsd  %xmm4,%xmm7
addsd  %xmm1,%xmm1
movapd %xmm6,%xmm2
subsd  %xmm1,%xmm2
movapd %xmm2,%xmm1
mulsd  %xmm2,%xmm1
movapd %xmm7,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm1,%xmm3
mulsd  %xmm0,%xmm7
divsd  %xmm3,%xmm7
mulsd  %xmm0,%xmm2
divsd  %xmm3,%xmm2
addsd  %xmm4,%xmm7
movapd %xmm6,%xmm0
subsd  %xmm2,%xmm0
movapd %xmm7,%xmm1
unpcklpd %xmm0,%xmm7
mulsd  %xmm0,%xmm0
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
mulpd  0xbe9(%rip),%xmm7
unpcklpd %xmm1,%xmm1
divpd  %xmm1,%xmm7
jmp    184c <errf+0x6fc>
movsd  %xmm3,(%rsp)
call   1070 <sqrt@plt>
movsd  (%rsp),%xmm3
movsd  0xca5(%rip),%xmm2
mulsd  %xmm0,%xmm3
movsd  %xmm3,(%rsp)
movsd  0xc9c(%rip),%xmm0
mulsd  %xmm3,%xmm0
divsd  %xmm0,%xmm2
movsd  %xmm2,0x40(%rsp)
movsd  0xc8e(%rip),%xmm0
mulsd  %xmm3,%xmm0
cvttsd2si %xmm0,%r15d
mov    $0xfffffffa,%eax
sub    %r15d,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x30(%rsp)
movapd %xmm2,%xmm0
call   1060 <log@plt>
mulsd  0x30(%rsp),%xmm0
call   1040 <exp@plt>
movsd  0x40(%rsp),%xmm14
movsd  (%rsp),%xmm1
mulsd  0xc50(%rip),%xmm1
cvttsd2si %xmm1,%ecx
movslq %ecx,%rax
movq   $0x0,0x1e0(%rsp,%rax,8)
movq   $0x0,0xd0(%rsp,%rax,8)
cmp    $0xfffffff7,%ecx
movapd 0x70(%rsp),%xmm11
movapd 0x50(%rsp),%xmm12
movapd 0x20(%rsp),%xmm6
jl     17c1 <errf+0x671>
movsd  0xb84(%rip),%xmm1
movapd %xmm1,%xmm2
divsd  %xmm14,%xmm2
movapd 0x10(%rsp),%xmm3
addsd  %xmm3,%xmm2
lea    0xa(%rcx),%esi
mov    %esi,%r10d
test   %esi,%esi
mov    $0x1,%eax
mov    $0x1,%edx
cmovle %esi,%edx
mov    %ecx,%r9d
sub    %edx,%r9d
add    $0xa,%r9d
je     173c <errf+0x5ec>
test   %esi,%esi
cmovle %esi,%eax
neg    %eax
lea    (%rcx,%rax,1),%edx
add    $0xa,%edx
lea    0x9(%rcx),%eax
lea    (%rsp,%rax,8),%rbx
add    $0x190,%rbx
shl    $0x3,%rdx
mov    %rbx,%rdi
sub    %rdx,%rdi
cmp    %rbx,%rdi
ja     173c <errf+0x5ec>
lea    (%rsp,%r10,8),%rbx
add    $0x190,%rbx
mov    %rbx,%rdi
sub    %rdx,%rdi
cmp    %rbx,%rdi
ja     173c <errf+0x5ec>
lea    (%rsp,%rax,8),%rbx
add    $0x80,%rbx
mov    %rbx,%rdi
sub    %rdx,%rdi
cmp    %rbx,%rdi
ja     173c <errf+0x5ec>
lea    (%rsp,%r10,8),%rbx
add    $0x80,%rbx
mov    %rbx,%rdi
sub    %rdx,%rdi
cmp    %rbx,%rdi
ja     173c <errf+0x5ec>
mov    %r14,%rbp
test   %esi,%esi
mov    $0x1,%edx
cmovle %esi,%edx
neg    %edx
add    %edx,%ecx
add    $0xa,%ecx
mov    %rax,%rdx
sub    %rcx,%rdx
lea    (%rsp,%rdx,8),%r11
add    $0x190,%r11
lea    (%rsp,%rax,8),%r8
add    $0x198,%r8
mov    %r10,%rbx
sub    %rcx,%rbx
lea    (%rsp,%rbx,8),%rcx
add    $0x190,%rcx
lea    0x198(%rsp,%r10,8),%rdi
lea    0x80(%rsp,%rdx,8),%rdx
lea    (%rsp,%rax,8),%r14
add    $0x88,%r14
lea    (%rsp,%rbx,8),%rbx
add    $0x80,%rbx
lea    (%rsp,%r10,8),%rax
add    $0x88,%rax
cmp    %rdi,%r11
setb   %dil
cmp    %r8,%rcx
setb   %cl
cmp    %rax,%rdx
setb   %al
cmp    %r14,%rbx
setb   %dl
test   %cl,%dil
jne    1966 <errf+0x816>
and    %dl,%al
jne    1966 <errf+0x816>
add    $0x1,%r9
mov    %r9,%r8
and    $0xfffffffffffffffe,%r8
mov    %r10,%rcx
sub    %r8,%rcx
movd   %esi,%xmm3
pshufd $0x50,%xmm3,%xmm3
paddd  0x9b3(%rip),%xmm3
movapd %xmm2,%xmm9
unpcklpd %xmm2,%xmm9
movapd %xmm6,%xmm10
unpcklpd %xmm6,%xmm10
mov    %r8,%rsi
neg    %rsi
lea    (%rsp,%r10,8),%rdi
add    $0x188,%rdi
lea    (%rsp,%r10,8),%rax
add    $0x78,%rax
mov    $0xffffffff,%edx
add    %r10,%rdx
xor    %ebx,%ebx
movapd 0x963(%rip),%xmm13
movdqa 0x97a(%rip),%xmm8
mov    %rbp,%r14
nopl   0x0(%rax)
cvtdq2pd %xmm3,%xmm4
movupd (%rdi,%rbx,8),%xmm7
shufpd $0x1,%xmm7,%xmm7
mulpd  %xmm4,%xmm7
movupd (%rax,%rbx,8),%xmm5
addpd  %xmm9,%xmm7
shufpd $0x1,%xmm5,%xmm5
mulpd  %xmm4,%xmm5
movapd %xmm10,%xmm4
subpd  %xmm5,%xmm4
movapd %xmm7,%xmm5
mulpd  %xmm7,%xmm5
mulpd  %xmm13,%xmm7
divpd  %xmm5,%xmm7
lea    (%rdx,%rbx,1),%ebp
shufpd $0x1,%xmm7,%xmm7
mulpd  %xmm13,%xmm4
divpd  %xmm5,%xmm4
shufpd $0x1,%xmm4,%xmm4
movupd %xmm7,0x188(%rsp,%rbp,8)
movupd %xmm4,0x78(%rsp,%rbp,8)
paddd  %xmm8,%xmm3
add    $0xfffffffffffffffe,%rbx
cmp    %rbx,%rsi
jne    16c0 <errf+0x570>
cmp    %r8,%r9
jne    173f <errf+0x5ef>
jmp    17c1 <errf+0x671>
mov    %r10,%rcx
lea    (%rsp,%rcx,8),%rax
add    $0x80,%rax
lea    0x190(%rsp,%rcx,8),%rdx
lea    -0x1(%rcx),%edi
lea    (%rsp,%rdi,8),%rsi
add    $0x80,%rsi
lea    (%rsp,%rdi,8),%rdi
add    $0x190,%rdi
xor    %ebx,%ebx
nopl   0x0(%rax)
xorps  %xmm3,%xmm3
cvtsi2sd %ecx,%xmm3
movsd  (%rdx,%rbx,1),%xmm4
mulsd  %xmm3,%xmm4
mulsd  (%rax,%rbx,1),%xmm3
addsd  %xmm2,%xmm4
movapd %xmm6,%xmm5
subsd  %xmm3,%xmm5
movapd %xmm4,%xmm3
mulsd  %xmm4,%xmm3
mulsd  %xmm1,%xmm4
divsd  %xmm3,%xmm4
movsd  %xmm4,(%rdi,%rbx,1)
mulsd  %xmm1,%xmm5
divsd  %xmm3,%xmm5
movsd  %xmm5,(%rsi,%rbx,1)
lea    -0x1(%rcx),%ebp
add    $0xfffffffffffffff8,%rbx
cmp    $0x1,%ecx
mov    %ebp,%ecx
jg     1770 <errf+0x620>
xorpd  %xmm7,%xmm7
cmp    $0xfffffffa,%r15d
mov    0x68(%rsp),%rbx
jl     184c <errf+0x6fc>
lea    0x8(%r15),%eax
add    $0x6,%r15d
lea    (%rsp,%r15,8),%rcx
add    $0x80,%rcx
lea    (%rsp,%r15,8),%rdx
add    $0x190,%rdx
xorpd  %xmm7,%xmm7
xor    %esi,%esi
movapd 0x844(%rip),%xmm1
nopl   0x0(%rax)
movapd %xmm0,%xmm2
addsd  %xmm7,%xmm2
movsd  (%rcx,%rsi,8),%xmm3
movapd %xmm3,%xmm4
xorpd  %xmm1,%xmm4
movapd %xmm7,%xmm5
shufpd $0x1,%xmm2,%xmm5
unpcklpd %xmm3,%xmm4
mulpd  %xmm5,%xmm4
movsd  (%rdx,%rsi,8),%xmm2
unpcklpd %xmm2,%xmm2
addsd  %xmm0,%xmm7
mulpd  %xmm2,%xmm7
addpd  %xmm4,%xmm7
mulsd  %xmm14,%xmm0
add    $0xffffffffffffffff,%rsi
lea    (%rax,%rsi,1),%edi
cmp    $0x1,%edi
jg     1800 <errf+0x6b0>
mulpd  0x7fc(%rip),%xmm7
xorpd  %xmm0,%xmm0
ucomisd %xmm12,%xmm0
jbe    1924 <errf+0x7d4>
movapd %xmm11,%xmm0
mulsd  %xmm11,%xmm0
mulsd  %xmm12,%xmm12
subsd  %xmm0,%xmm12
movapd %xmm12,0x30(%rsp)
movapd %xmm12,%xmm0
movapd %xmm7,0x40(%rsp)
call   1040 <exp@plt>
movapd %xmm0,(%rsp)
movapd 0x20(%rsp),%xmm0
addsd  %xmm0,%xmm0
mulsd  0x10(%rsp),%xmm0
movapd %xmm0,0x20(%rsp)
call   1050 <cos@plt>
movapd %xmm0,0x10(%rsp)
movapd 0x30(%rsp),%xmm0
call   1040 <exp@plt>
movapd (%rsp),%xmm1
unpcklpd %xmm0,%xmm1
mulpd  0x790(%rip),%xmm1
movapd %xmm1,(%rsp)
movapd 0x20(%rsp),%xmm0
call   1030 <sin@plt>
movapd 0x10(%rsp),%xmm7
movapd 0x70(%rsp),%xmm11
unpcklpd %xmm0,%xmm7
mulpd  (%rsp),%xmm7
subpd  0x40(%rsp),%xmm7
ucomisd 0x80b(%rip),%xmm11
jbe    191b <errf+0x7cb>
movapd %xmm7,%xmm0
unpckhpd %xmm7,%xmm0
xorpd  0x729(%rip),%xmm0
unpcklpd %xmm0,%xmm7
movapd 0x50(%rsp),%xmm12
jmp    193f <errf+0x7ef>
ucomisd %xmm11,%xmm0
jbe    193f <errf+0x7ef>
movapd %xmm7,%xmm0
unpckhpd %xmm7,%xmm0
xorpd  0x705(%rip),%xmm0
unpcklpd %xmm0,%xmm7
movsd  %xmm11,0x0(%r13)
movsd  %xmm12,(%r12)
movlpd %xmm7,(%rbx)
movhpd %xmm7,(%r14)
add    $0x298,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r10,%rcx
mov    %rbp,%r14
jmp    173f <errf+0x5ef>

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

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