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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double DBL_EPSILON;
double DBL_MAX;
double fabs(double);
double dqext(int *n, double epstab[], double *abserr, double res3la[],
             int *nres) {
  double delta1, delta2, delta3, epsinf;
  double error, err1, err2, err3, e0, e1, e1abs, e2, e3;
  double res, result, ss, tol1, tol2, tol3;
  int NN, i, ib, ib2, ie, indx, k1, k2, k3, limexp, newelm, num;
  (*nres)++;
  NN = *n;
  NN++;
  *abserr = DBL_MAX;
  result = epstab[*n];
  if (NN < 3)
    goto _100;
  limexp = 50;
  epstab[*n + 2] = epstab[*n];
  newelm = (*n) / 2;
  epstab[*n] = DBL_MAX;
  num = NN;
  k1 = NN;
  for (i = 1; i <= newelm; i++) {
    k2 = k1 - 1;
    k3 = k1 - 2;
    res = epstab[k1 + 1];
    e0 = epstab[k3 - 1];
    e1 = epstab[k2 - 1];
    e2 = res;
    e1abs = fabs(e1);
    delta2 = e2 - e1;
    err2 = fabs(delta2);
    tol2 = (((fabs(e2)) > (e1abs)) ? (fabs(e2)) : (e1abs)) * DBL_EPSILON;
    delta3 = e1 - e0;
    err3 = fabs(delta3);
    tol3 = (((e1abs) > (fabs(e0))) ? (e1abs) : (fabs(e0))) * DBL_EPSILON;
    if ((err2 > tol2) || (err3 > tol3))
      goto _10;
    result = res;
    *abserr = err2 + err3;
    goto _100;
  _10:
    e3 = epstab[k1 - 1];
    epstab[k1 - 1] = e1;
    delta1 = e1 - e3;
    err1 = fabs(delta1);
    tol1 = (((e1abs) > (fabs(e3))) ? (e1abs) : (fabs(e3))) * DBL_EPSILON;
    if ((err1 <= tol1) || (err2 <= tol2) || (err3 <= tol3))
      goto _20;
    ss = 1.0 / delta1 + 1.0 / delta2 - 1.0 / delta3;
    epsinf = fabs(ss * e1);
    if (epsinf > 1.0e-4)
      goto _30;
  _20:
    NN = i + i - 1;
    goto _50;
  _30:
    res = e1 + 1.0 / ss;
    epstab[k1 - 1] = res;
    k1 -= 2;
    error = err2 + fabs(res - e2) + err3;
    if (error > (*abserr))
      goto _40;
    *abserr = error;
    result = res;
  _40 : {};
  }
_50:
  if (NN == limexp)
    NN = 2 * (limexp / 2) - 1;
  ib = 1;
  if (((num / 2) * 2) == num)
    ib = 2;
  ie = newelm + 1;
  for (i = 1; i <= ie; i++) {
    ib2 = ib + 2;
    epstab[ib - 1] = epstab[ib2 - 1];
    ib = ib2;
  }
  if (num == NN)
    goto _80;
  indx = num - NN + 1;
  for (i = 1; i <= NN; i++) {
    epstab[i - 1] = epstab[indx - 1];
    indx++;
  }
_80:
  if (*nres > 3)
    goto _90;
  res3la[(*nres) - 1] = result;
  *abserr = DBL_MAX;
  goto _100;
_90:
  *abserr = fabs(result - res3la[2]) + fabs(result - res3la[1]) +
            fabs(result - res3la[0]);
  res3la[0] = res3la[1];
  res3la[1] = res3la[2];
  res3la[2] = result;
_100:
  *abserr = (((*abserr) > (5.0 * DBL_EPSILON * fabs(result)))
                 ? (*abserr)
                 : (5.0 * DBL_EPSILON * fabs(result)));
  *n = NN - 1;
  return result;
}


x86 assembly (clang, -O0):
<dqext>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xc4(%rbp)
mov    -0xc4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc4(%rbp)
mov    0x2e8c(%rip),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
cmpl   $0x3,-0xc4(%rbp)
jge    1182 <dqext+0x82>
jmp    18d7 <dqext+0x7d7>
movl   $0x32,-0xe8(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%rcx
mov    (%rcx),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0xec(%rbp)
mov    0x2e0c(%rip),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xc4(%rbp),%eax
mov    %eax,-0xf0(%rbp)
mov    -0xc4(%rbp),%eax
mov    %eax,-0xdc(%rbp)
movl   $0x1,-0xc8(%rbp)
mov    -0xc8(%rbp),%eax
cmp    -0xec(%rbp),%eax
jg     1679 <dqext+0x579>
mov    -0xdc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0xe0(%rbp)
mov    -0xdc(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0xe4(%rbp)
mov    -0x10(%rbp),%rax
mov    -0xdc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
mov    -0xe4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    -0xe0(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movaps 0xd61(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movaps 0xd3a(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movaps 0xd22(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd -0x80(%rbp),%xmm0
jbe    130d <dqext+0x20d>
movsd  -0x88(%rbp),%xmm0
ff
movaps 0xd04(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
jmp    131a <dqext+0x21a>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mov    0x2cbf(%rip),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movaps 0xcb0(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movaps 0xc96(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    138a <dqext+0x28a>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
jmp    13a2 <dqext+0x2a2>
movsd  -0x70(%rbp),%xmm0
movaps 0xc6a(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
mov    0x2c37(%rip),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
ucomisd -0xb8(%rbp),%xmm0
ff
ja     13e3 <dqext+0x2e3>
movsd  -0x68(%rbp),%xmm0
ucomisd -0xc0(%rbp),%xmm0
ff
jbe    13e8 <dqext+0x2e8>
jmp    140f <dqext+0x30f>
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    18d7 <dqext+0x7d7>
mov    -0x10(%rbp),%rax
mov    -0xdc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0xdc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x78(%rbp),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movaps 0xb9c(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movaps 0xb7f(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    14a1 <dqext+0x3a1>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
jmp    14bc <dqext+0x3bc>
movsd  -0x90(%rbp),%xmm0
ff
movaps 0xb50(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
mov    0x2b1d(%rip),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x58(%rbp),%xmm1
movsd  -0xb0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jae    151c <dqext+0x41c>
movsd  -0x60(%rbp),%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jae    151c <dqext+0x41c>
movsd  -0x68(%rbp),%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     1521 <dqext+0x421>
jmp    1596 <dqext+0x496>
movsd  0xaef(%rip),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  0xae2(%rip),%xmm1
divsd  -0x38(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  0xad1(%rip),%xmm1
divsd  -0x40(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movaps 0xa94(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0xa8e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1591 <dqext+0x491>
jmp    15b0 <dqext+0x4b0>
jmp    1596 <dqext+0x496>
mov    -0xc8(%rbp),%eax
add    -0xc8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0xc4(%rbp)
jmp    167e <dqext+0x57e>
movsd  -0x78(%rbp),%xmm0
movsd  0xa5b(%rip),%xmm1
divsd  -0xa8(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0xdc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xdc(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0xdc(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm1
ff
subsd  -0x88(%rbp),%xmm1
ff
movaps 0x9e7(%rip),%xmm2
pand   %xmm2,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x18(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1643 <dqext+0x543>
jmp    1660 <dqext+0x560>
movsd  -0x50(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1665 <dqext+0x565>
mov    -0xc8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    1202 <dqext+0x102>
jmp    167e <dqext+0x57e>
mov    -0xc4(%rbp),%eax
cmp    -0xe8(%rbp),%eax
jne    16aa <dqext+0x5aa>
mov    -0xe8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
shl    $0x1,%eax
sub    $0x1,%eax
mov    %eax,-0xc4(%rbp)
movl   $0x1,-0xcc(%rbp)
mov    -0xf0(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
shl    $0x1,%eax
cmp    -0xf0(%rbp),%eax
jne    16db <dqext+0x5db>
movl   $0x2,-0xcc(%rbp)
mov    -0xec(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd4(%rbp)
movl   $0x1,-0xc8(%rbp)
mov    -0xc8(%rbp),%eax
cmp    -0xd4(%rbp),%eax
jg     175f <dqext+0x65f>
mov    -0xcc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xd0(%rbp)
mov    -0x10(%rbp),%rax
mov    -0xd0(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0xcc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xd0(%rbp),%eax
mov    %eax,-0xcc(%rbp)
mov    -0xc8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    16f4 <dqext+0x5f4>
mov    -0xf0(%rbp),%eax
cmp    -0xc4(%rbp),%eax
jne    1776 <dqext+0x676>
jmp    17f9 <dqext+0x6f9>
mov    -0xf0(%rbp),%eax
sub    -0xc4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd8(%rbp)
movl   $0x1,-0xc8(%rbp)
mov    -0xc8(%rbp),%eax
cmp    -0xc4(%rbp),%eax
jg     17f4 <dqext+0x6f4>
mov    -0x10(%rbp),%rax
mov    -0xd8(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0xc8(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xd8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd8(%rbp)
mov    -0xc8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    1795 <dqext+0x695>
jmp    17f9 <dqext+0x6f9>
mov    -0x28(%rbp),%rax
cmpl   $0x3,(%rax)
jle    180b <dqext+0x70b>
jmp    1840 <dqext+0x740>
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    (%rcx),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x27a9(%rip),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    18d7 <dqext+0x7d7>
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
subsd  0x10(%rax),%xmm0
movaps 0x7a8(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  -0xa0(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
subsd  0x8(%rax),%xmm1
movaps 0x78c(%rip),%xmm2
pand   %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0xa0(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm1
movaps 0x76d(%rip),%xmm2
pand   %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x739(%rip),%xmm1
mov    0x26fa(%rip),%rax
mulsd  (%rax),%xmm1
movsd  -0xa0(%rbp),%xmm2
ff
movaps 0x6ff(%rip),%xmm3
pand   %xmm3,%xmm2
mulsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    1928 <dqext+0x828>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
jmp    195a <dqext+0x85a>
movsd  0x6f0(%rip),%xmm0
mov    0x26b1(%rip),%rax
mulsd  (%rax),%xmm0
movsd  -0xa0(%rbp),%xmm1
ff
movaps 0x6b6(%rip),%xmm2
pand   %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0xc4(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dqext>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
movslq (%r8),%r9
lea    0x1(%r9),%eax
mov    %eax,(%r8)
movslq (%rdi),%rax
lea    0x1(%rax),%r14d
mov    0x2eb6(%rip),%r8
movsd  (%r8),%xmm8
movsd  %xmm8,(%rdx)
movsd  (%rsi,%rax,8),%xmm0
cmp    $0x2,%rax
jl     15c3 <dqext+0x4c3>
mov    %eax,%r11d
movsd  %xmm0,-0x8(%rsp)
movsd  %xmm0,0x10(%rsi,%r11,8)
mov    %r11d,%r10d
shr    %r10d
movsd  (%r8),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
movslq %r14d,%rax
lea    (%rsi,%rax,8),%rax
add    $0x8,%rax
xor    %ebx,%ebx
movapd 0xe8f(%rip),%xmm13
mov    0x2e70(%rip),%r15
movsd  0xe9f(%rip),%xmm12
movapd 0xe86(%rip),%xmm11
mov    %r10d,%ebp
movapd 0xe6b(%rip),%xmm3
jmp    11ad <dqext+0xad>
nopw   0x0(%rax,%rax,1)
add    $0xfffffffffffffffe,%rbx
add    $0xffffffff,%ebp
je     1307 <dqext+0x207>
movsd  (%rax,%rbx,8),%xmm0
movupd -0x20(%rax,%rbx,8),%xmm7
movapd %xmm7,%xmm1
shufpd $0x1,%xmm7,%xmm1
movapd %xmm7,%xmm14
movsd  %xmm0,%xmm14
subpd  %xmm1,%xmm14
movapd %xmm14,%xmm9
andpd  %xmm13,%xmm9
movapd %xmm0,%xmm4
andpd  %xmm13,%xmm4
andpd  %xmm13,%xmm1
maxsd  %xmm1,%xmm4
movsd  (%r15),%xmm2
mulsd  %xmm2,%xmm4
movapd %xmm14,%xmm8
unpckhpd %xmm14,%xmm8
andpd  %xmm13,%xmm8
pshufd $0xee,%xmm1,%xmm15
movapd %xmm1,%xmm10
maxsd  %xmm15,%xmm10
mulsd  %xmm2,%xmm10
ucomisd %xmm4,%xmm9
ja     122b <dqext+0x12b>
ucomisd %xmm10,%xmm8
jbe    12f8 <dqext+0x1f8>
unpckhpd %xmm7,%xmm7
movsd  -0x10(%rax,%rbx,8),%xmm5
movsd  %xmm7,-0x10(%rax,%rbx,8)
movapd %xmm7,%xmm2
subsd  %xmm5,%xmm2
movapd %xmm2,%xmm6
andpd  %xmm3,%xmm6
andpd  %xmm3,%xmm5
maxsd  %xmm5,%xmm1
mulsd  (%r15),%xmm1
ucomisd %xmm6,%xmm1
jae    12ef <dqext+0x1ef>
ucomisd %xmm9,%xmm4
jae    12ef <dqext+0x1ef>
ucomisd %xmm8,%xmm10
jae    12ef <dqext+0x1ef>
movapd %xmm12,%xmm1
divsd  %xmm2,%xmm1
movapd %xmm11,%xmm2
divpd  %xmm14,%xmm2
addsd  %xmm2,%xmm1
unpckhpd %xmm2,%xmm2
subsd  %xmm2,%xmm1
movapd %xmm7,%xmm2
mulsd  %xmm1,%xmm2
andpd  %xmm13,%xmm2
ucomisd 0xd80(%rip),%xmm2
jbe    12ef <dqext+0x1ef>
movapd %xmm12,%xmm2
divsd  %xmm1,%xmm2
addsd  %xmm2,%xmm7
movsd  %xmm7,-0x10(%rax,%rbx,8)
movapd %xmm7,%xmm1
subsd  %xmm0,%xmm1
andpd  %xmm13,%xmm1
addsd  %xmm9,%xmm1
addsd  %xmm1,%xmm8
ucomisd (%rdx),%xmm8
ja     11a0 <dqext+0xa0>
movsd  %xmm8,(%rdx)
movsd  %xmm7,-0x8(%rsp)
jmp    11a0 <dqext+0xa0>
mov    $0x1,%eax
sub    %ebx,%eax
jmp    130a <dqext+0x20a>
addsd  %xmm9,%xmm8
movsd  %xmm8,(%rdx)
jmp    15c3 <dqext+0x4c3>
mov    %r14d,%eax
mov    %r14d,%ebp
shr    $0x1f,%ebp
add    %r14d,%ebp
and    $0xfffffffe,%ebp
xor    %ebx,%ebx
cmp    %r14d,%ebp
sete   %bl
add    $0x1,%rbx
add    $0x1,%r10d
cmp    $0x2,%r11d
jae    1334 <dqext+0x234>
movsd  -0x8(%rsp),%xmm3
jmp    1361 <dqext+0x261>
mov    %r10d,%ebp
and    $0xfffffffe,%ebp
movsd  -0x8(%rsp),%xmm3
movsd  0x8(%rsi,%rbx,8),%xmm0
movsd  0x18(%rsi,%rbx,8),%xmm1
movsd  %xmm0,-0x8(%rsi,%rbx,8)
movsd  %xmm1,0x8(%rsi,%rbx,8)
add    $0x4,%rbx
add    $0xfffffffe,%ebp
jne    1340 <dqext+0x240>
test   $0x1,%r10b
je     1373 <dqext+0x273>
movsd  0x8(%rsi,%rbx,8),%xmm0
movsd  %xmm0,-0x8(%rsi,%rbx,8)
cmp    $0x32,%eax
mov    $0x31,%r10d
cmovne %eax,%r10d
sub    %r10d,%r14d
je     1557 <dqext+0x457>
test   %r10d,%r10d
jle    1557 <dqext+0x457>
movslq %r14d,%r12
mov    %r10d,%r14d
lea    0x1(%r14),%r11
mov    $0x1,%r13d
cmp    $0x4,%r10d
jb     14bf <dqext+0x3bf>
lea    (%r12,%r11,1),%rax
lea    (%rsi,%rax,8),%rax
add    $0xfffffffffffffff8,%rax
cmp    %rsi,%rax
jbe    13d2 <dqext+0x2d2>
lea    (%rsi,%r11,8),%rax
add    $0xfffffffffffffff8,%rax
lea    (%rsi,%r12,8),%rbx
cmp    %rax,%rbx
jb     14bf <dqext+0x3bf>
mov    %r14d,%r13d
and    $0xfffffffc,%r13d
lea    -0x4(%r13),%rax
mov    %rax,%rbp
shr    $0x2,%rbp
add    $0x1,%rbp
mov    %ebp,%r15d
and    $0x3,%r15d
cmp    $0xc,%rax
jae    13f9 <dqext+0x2f9>
xor    %eax,%eax
jmp    146c <dqext+0x36c>
and    $0xfffffffffffffffc,%rbp
lea    (%rsi,%r12,8),%rbx
add    $0x70,%rbx
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movups -0x70(%rbx,%rax,8),%xmm0
movups -0x60(%rbx,%rax,8),%xmm1
movups %xmm0,(%rsi,%rax,8)
movups %xmm1,0x10(%rsi,%rax,8)
movups -0x50(%rbx,%rax,8),%xmm0
movups -0x40(%rbx,%rax,8),%xmm1
movups %xmm0,0x20(%rsi,%rax,8)
movups %xmm1,0x30(%rsi,%rax,8)
movups -0x30(%rbx,%rax,8),%xmm0
movups -0x20(%rbx,%rax,8),%xmm1
movups %xmm0,0x40(%rsi,%rax,8)
movups %xmm1,0x50(%rsi,%rax,8)
movupd -0x10(%rbx,%rax,8),%xmm0
movupd (%rbx,%rax,8),%xmm1
movupd %xmm0,0x60(%rsi,%rax,8)
movupd %xmm1,0x70(%rsi,%rax,8)
add    $0x10,%rax
add    $0xfffffffffffffffc,%rbp
jne    1410 <dqext+0x310>
test   %r15,%r15
je     14af <dqext+0x3af>
lea    (%rsi,%rax,8),%rax
add    $0x10,%rax
lea    (%rax,%r12,8),%rbx
shl    $0x5,%r15
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd -0x10(%rbx,%rbp,1),%xmm0
movupd (%rbx,%rbp,1),%xmm1
movupd %xmm0,-0x10(%rax,%rbp,1)
movupd %xmm1,(%rax,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%r15
jne    1490 <dqext+0x390>
cmp    %r13,%r14
je     1557 <dqext+0x457>
add    %r13,%r12
or     $0x1,%r13
mov    %r11d,%eax
sub    %r13d,%eax
mov    %r13,%r14
not    %r14
add    %r11,%r14
and    $0x3,%rax
je     1501 <dqext+0x401>
neg    %rax
xor    %ebx,%ebx
mov    %rsi,%rbp
nopl   0x0(%rax)
movsd  0x0(%rbp,%r12,8),%xmm0
movsd  %xmm0,-0x8(%rbp,%r13,8)
add    $0x8,%rbp
add    $0xffffffffffffffff,%rbx
cmp    %rbx,%rax
jne    14e0 <dqext+0x3e0>
sub    %rbx,%r12
sub    %rbx,%r13
cmp    $0x3,%r14
jb     1557 <dqext+0x457>
lea    (%rsi,%r12,8),%rax
add    $0x18,%rax
sub    %r13,%r11
lea    (%rsi,%r13,8),%rsi
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
movsd  -0x18(%rax,%rbx,8),%xmm0
movsd  %xmm0,-0x8(%rsi,%rbx,8)
movsd  -0x10(%rax,%rbx,8),%xmm0
movsd  %xmm0,(%rsi,%rbx,8)
movsd  -0x8(%rax,%rbx,8),%xmm0
movsd  %xmm0,0x8(%rsi,%rbx,8)
movsd  (%rax,%rbx,8),%xmm0
movsd  %xmm0,0x10(%rsi,%rbx,8)
add    $0x4,%rbx
cmp    %rbx,%r11
jne    1520 <dqext+0x420>
cmp    $0x2,%r9d
jle    15ac <dqext+0x4ac>
movapd %xmm3,%xmm0
subsd  0x10(%rcx),%xmm0
movapd %xmm3,%xmm1
subsd  0x8(%rcx),%xmm1
movapd 0xa89(%rip),%xmm4
andpd  %xmm4,%xmm0
andpd  %xmm4,%xmm1
movapd %xmm3,%xmm2
subsd  (%rcx),%xmm2
addsd  %xmm0,%xmm1
andpd  %xmm4,%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%rdx)
movupd 0x8(%rcx),%xmm0
movupd %xmm0,(%rcx)
movsd  %xmm3,0x10(%rcx)
movsd  (%rdx),%xmm8
jmp    15bc <dqext+0x4bc>
movsd  %xmm3,(%rcx,%r9,8)
movsd  (%r8),%xmm8
movsd  %xmm8,(%rdx)
mov    %r10d,%r14d
movapd %xmm3,%xmm0
mov    0x2a1e(%rip),%rax
movsd  (%rax),%xmm1
mulsd  0xa5a(%rip),%xmm1
movapd 0xa22(%rip),%xmm2
andpd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
maxsd  %xmm2,%xmm8
movsd  %xmm8,(%rdx)
add    $0xffffffff,%r14d
mov    %r14d,(%rdi)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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