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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int DBL_EPSILON;
double fabs(double);
double stub1(double, void *);
double findzero2(double ax, double bx, double fa, double fb,
                 double (*f)(double x, void *info), void *info, double *Tol,
                 int *Maxit) {
  double a, b, c, fc;
  double tol;
  int maxit;
  a = ax;
  b = bx;
  c = a;
  fc = fa;
  maxit = *Maxit + 1;
  tol = *Tol;
  if (fa == 0.0) {
    *Tol = 0.0;
    *Maxit = 0;
    return a;
  }
  if (fb == 0.0) {
    *Tol = 0.0;
    *Maxit = 0;
    return b;
  }
  while (maxit--) {
    double prev_step = b - a;
    double tol_act;
    double p;
    double q;
    double new_step;
    if (fabs(fc) < fabs(fb)) {
      a = b;
      b = c;
      c = a;
      fa = fb;
      fb = fc;
      fc = fa;
    }
    tol_act = 2 * DBL_EPSILON * fabs(b) + tol / 2;
    new_step = (c - b) / 2;
    if (fabs(new_step) <= tol_act || fb == (double)0) {
      *Maxit -= maxit;
      *Tol = fabs(c - b);
      return b;
    }
    if (fabs(prev_step) >= tol_act && fabs(fa) > fabs(fb)) {
      register double t1, cb, t2;
      cb = c - b;
      if (a == c) {
        t1 = fb / fa;
        p = cb * t1;
        q = 1.0 - t1;
      } else {
        q = fa / fc;
        t1 = fb / fc;
        t2 = fb / fa;
        p = t2 * (cb * q * (q - t1) - (b - a) * (t1 - 1.0));
        q = (q - 1.0) * (t1 - 1.0) * (t2 - 1.0);
      }
      if (p > (double)0)
        q = -q;
      else
        p = -p;
      if (p < (0.75 * cb * q - fabs(tol_act * q) / 2) &&
          p < fabs(prev_step * q / 2))
        new_step = p / q;
    }
    if (fabs(new_step) < tol_act) {
      if (new_step > (double)0)
        new_step = tol_act;
      else
        new_step = -tol_act;
    }
    a = b;
    fa = fb;
    b += new_step;
    fb = (*f)(b, info);
    if ((fb > 0 && fc > 0) || (fb < 0 && fc < 0)) {
      c = a;
      fc = fa;
    }
  }
  *Tol = fabs(c - b);
  *Maxit = -1;
  return b;
}


x86 assembly (clang, -O0):
<findzero2>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
mov    %rdi,-0x30(%rbp)
mov    %rsi,-0x38(%rbp)
mov    %rdx,-0x40(%rbp)
mov    %rcx,-0x48(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x48(%rbp),%rax
mov    (%rax),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
mov    -0x40(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11ac <findzero2+0xac>
jp     11ac <findzero2+0xac>
mov    -0x40(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x48(%rbp),%rax
movl   $0x0,(%rax)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1763 <findzero2+0x663>
movsd  -0x28(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11e8 <findzero2+0xe8>
jp     11e8 <findzero2+0xe8>
mov    -0x40(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x48(%rbp),%rax
movl   $0x0,(%rax)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1763 <findzero2+0x663>
jmp    11ed <findzero2+0xed>
mov    -0x74(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x74(%rbp)
cmp    $0x0,%eax
je     1732 <findzero2+0x632>
movsd  -0x58(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm1
movaps 0xde4(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x28(%rbp),%xmm0
movaps 0xdd4(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1276 <findzero2+0x176>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    0x2d6b(%rip),%rax
mov    (%rax),%eax
shl    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  -0x58(%rbp),%xmm2
movaps 0xd6e(%rip),%xmm1
pand   %xmm1,%xmm2
movsd  -0x70(%rbp),%xmm1
movsd  0xd6d(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  0xd47(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm1
ff
movaps 0xd1c(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jae    1312 <findzero2+0x212>
movsd  -0x28(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    134b <findzero2+0x24b>
jp     134b <findzero2+0x24b>
mov    -0x74(%rbp),%edx
mov    -0x48(%rbp),%rax
mov    (%rax),%ecx
sub    %edx,%ecx
mov    %ecx,(%rax)
movsd  -0x60(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movaps 0xcd0(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1763 <findzero2+0x663>
movsd  -0x80(%rbp),%xmm0
movaps 0xca9(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd -0x88(%rbp),%xmm0
ff
jb     1624 <findzero2+0x524>
movsd  -0x20(%rbp),%xmm0
movaps 0xc8b(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
movaps 0xc7b(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    1624 <findzero2+0x524>
movsd  -0x60(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
ucomisd -0x60(%rbp),%xmm0
jne    1402 <findzero2+0x302>
jp     1402 <findzero2+0x302>
movsd  -0x28(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xc2b(%rip),%xmm0
subsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    14f9 <findzero2+0x3f9>
movsd  -0x20(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  -0x98(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm3
ff
subsd  -0xa8(%rbp),%xmm3
ff
movsd  -0x58(%rbp),%xmm2
subsd  -0x50(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm4
ff
movsd  0xb9e(%rip),%xmm5
subsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  0xb5b(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  -0xa8(%rbp),%xmm1
ff
movsd  0xb47(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0xb8(%rbp),%xmm1
ff
movsd  0xb2f(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    153a <findzero2+0x43a>
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1561 <findzero2+0x461>
movsd  -0x90(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  0xaaf(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm3
ff
movsd  -0x88(%rbp),%xmm2
ff
mulsd  -0x98(%rbp),%xmm2
ff
movaps 0xa68(%rip),%xmm4
pand   %xmm4,%xmm2
movsd  0xa6c(%rip),%xmm4
divsd  %xmm4,%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    161f <findzero2+0x51f>
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  0xa22(%rip),%xmm2
divsd  %xmm2,%xmm0
movaps 0xa07(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    161f <findzero2+0x51f>
movsd  -0x90(%rbp),%xmm0
ff
divsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1624 <findzero2+0x524>
movsd  -0xa0(%rbp),%xmm1
ff
movaps 0x9cd(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    169f <findzero2+0x59f>
movsd  -0xa0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1673 <findzero2+0x573>
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    169a <findzero2+0x59a>
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    169f <findzero2+0x59f>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x30(%rbp),%rax
movsd  -0x58(%rbp),%xmm0
mov    -0x38(%rbp),%rdi
call   *%rax
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    16fd <findzero2+0x5fd>
movsd  -0x68(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     1719 <findzero2+0x619>
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    172d <findzero2+0x62d>
xorps  %xmm0,%xmm0
ucomisd -0x68(%rbp),%xmm0
jbe    172d <findzero2+0x62d>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    11ed <findzero2+0xed>
movsd  -0x60(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movaps 0x8bd(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x48(%rbp),%rax
movl   $0xffffffff,(%rax)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<findzero2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %rcx,%r15
mov    %rdx,%r14
movapd %xmm0,%xmm12
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm2
jne    1138 <findzero2+0x38>
jp     1138 <findzero2+0x38>
movq   $0x0,(%r14)
movl   $0x0,(%r15)
jmp    14c7 <findzero2+0x3c7>
ucomisd %xmm0,%xmm3
jne    1153 <findzero2+0x53>
jp     1153 <findzero2+0x53>
movq   $0x0,(%r14)
movl   $0x0,(%r15)
jmp    14c2 <findzero2+0x3c2>
mov    (%r15),%ebp
cmp    $0xffffffff,%ebp
je     14a5 <findzero2+0x3a5>
mov    %rsi,%r12
mov    %rdi,%rbx
movsd  (%r14),%xmm0
mulsd  0xe8e(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
unpcklpd %xmm2,%xmm2
movapd 0xeab(%rip),%xmm8
mov    0x2e5c(%rip),%r13
xorpd  %xmm13,%xmm13
movapd 0xe96(%rip),%xmm11
movapd %xmm12,%xmm0
jmp    11d4 <findzero2+0xd4>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movapd %xmm12,%xmm4
movapd %xmm2,%xmm1
unpcklpd %xmm1,%xmm2
movapd %xmm0,%xmm3
movapd %xmm4,%xmm0
add    $0xffffffff,%ebp
movapd 0x30(%rsp),%xmm1
jae    14aa <findzero2+0x3aa>
movapd %xmm12,%xmm5
movapd %xmm2,%xmm7
unpckhpd %xmm2,%xmm7
movapd %xmm7,%xmm6
andpd  %xmm8,%xmm6
movapd %xmm3,%xmm4
andpd  %xmm8,%xmm4
ucomisd %xmm6,%xmm4
jbe    1220 <findzero2+0x120>
movapd %xmm3,%xmm2
unpcklpd %xmm3,%xmm2
movapd %xmm1,%xmm9
movapd %xmm0,%xmm12
movapd %xmm1,%xmm10
movapd %xmm7,%xmm3
jmp    122f <findzero2+0x12f>
cs nopw 0x0(%rax,%rax,1)
movapd %xmm0,%xmm9
movapd %xmm1,%xmm12
movapd %xmm5,%xmm10
mov    0x0(%r13),%eax
add    %eax,%eax
xorps  %xmm4,%xmm4
cvtsi2sd %eax,%xmm4
movapd %xmm12,%xmm0
andpd  %xmm8,%xmm0
mulsd  %xmm4,%xmm0
addsd  0x8(%rsp),%xmm0
movapd %xmm9,%xmm4
subsd  %xmm12,%xmm4
movapd %xmm4,%xmm15
mulsd  0xd98(%rip),%xmm15
movapd %xmm15,%xmm14
andpd  %xmm8,%xmm14
ucomisd %xmm14,%xmm0
jae    14db <findzero2+0x3db>
ucomisd %xmm13,%xmm3
jne    128a <findzero2+0x18a>
jnp    14db <findzero2+0x3db>
subsd  %xmm5,%xmm1
movapd %xmm1,%xmm5
andpd  %xmm11,%xmm5
ucomisd %xmm0,%xmm5
movapd %xmm2,%xmm6
unpckhpd %xmm2,%xmm6
movapd %xmm3,0x40(%rsp)
movapd %xmm9,0x20(%rsp)
movapd %xmm6,0x10(%rsp)
jb     1410 <findzero2+0x310>
movapd %xmm2,%xmm5
andpd  %xmm8,%xmm5
movapd %xmm3,%xmm7
andpd  %xmm8,%xmm7
ucomisd %xmm7,%xmm5
jbe    1410 <findzero2+0x310>
ucomisd %xmm9,%xmm10
jne    12fd <findzero2+0x1fd>
jp     12fd <findzero2+0x1fd>
divsd  %xmm2,%xmm3
movapd %xmm4,%xmm2
mulsd  %xmm3,%xmm2
movsd  0xd1a(%rip),%xmm11
subsd  %xmm3,%xmm11
jmp    1378 <findzero2+0x278>
movapd %xmm2,%xmm11
divsd  %xmm6,%xmm11
movapd %xmm3,%xmm7
unpcklpd %xmm3,%xmm7
divpd  %xmm2,%xmm7
movapd %xmm4,%xmm8
mulsd  %xmm11,%xmm8
movapd %xmm7,%xmm9
unpckhpd %xmm7,%xmm9
movapd %xmm11,%xmm2
subsd  %xmm9,%xmm2
mulsd  %xmm8,%xmm2
movapd %xmm12,%xmm3
subsd  %xmm10,%xmm3
movapd %xmm7,%xmm8
addpd  0xcf2(%rip),%xmm8
movapd %xmm8,%xmm9
unpckhpd %xmm8,%xmm9
mulsd  %xmm9,%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm7,%xmm2
addsd  0xc9a(%rip),%xmm11
mulsd  %xmm9,%xmm11
mulsd  %xmm8,%xmm11
movapd 0xcd0(%rip),%xmm3
ucomisd %xmm13,%xmm2
jbe    138c <findzero2+0x28c>
xorpd  %xmm3,%xmm11
movapd %xmm2,%xmm7
xorpd  %xmm3,%xmm7
xorpd  %xmm3,%xmm3
cmpltsd %xmm2,%xmm3
movapd %xmm3,%xmm5
andnpd %xmm7,%xmm5
andpd  %xmm2,%xmm3
orpd   %xmm5,%xmm3
mulsd  0xc63(%rip),%xmm4
movapd %xmm0,%xmm2
mulsd  %xmm11,%xmm2
movapd 0xc6a(%rip),%xmm5
andpd  %xmm5,%xmm2
mulsd  0xc4e(%rip),%xmm2
mulsd  %xmm11,%xmm4
addsd  %xmm2,%xmm4
ucomisd %xmm3,%xmm4
jbe    1410 <findzero2+0x310>
mulsd  %xmm11,%xmm1
mulsd  0xc12(%rip),%xmm1
andpd  %xmm5,%xmm1
ucomisd %xmm3,%xmm1
jbe    1410 <findzero2+0x310>
divsd  %xmm11,%xmm3
movapd %xmm3,%xmm14
andpd  %xmm5,%xmm14
movapd %xmm3,%xmm15
nopl   0x0(%rax)
ucomisd %xmm14,%xmm0
jbe    142b <findzero2+0x32b>
ucomisd %xmm13,%xmm15
ja     1426 <findzero2+0x326>
xorpd  0xc2a(%rip),%xmm0
movapd %xmm0,%xmm15
addsd  %xmm12,%xmm15
movapd %xmm15,0x30(%rsp)
movapd %xmm15,%xmm0
mov    %r12,%rdi
movapd %xmm12,0x50(%rsp)
call   *%rbx
movapd 0x50(%rsp),%xmm12
xorpd  %xmm13,%xmm13
ucomisd %xmm13,%xmm0
movapd 0x40(%rsp),%xmm2
movapd 0xbc8(%rip),%xmm8
movapd 0xbbf(%rip),%xmm11
movapd 0x20(%rsp),%xmm4
movapd 0x10(%rsp),%xmm1
jbe    148a <findzero2+0x38a>
ucomisd %xmm13,%xmm1
ja     11b0 <findzero2+0xb0>
ucomisd %xmm0,%xmm13
jbe    11b9 <findzero2+0xb9>
ucomisd %xmm1,%xmm13
ja     11b0 <findzero2+0xb0>
jmp    11b9 <findzero2+0xb9>
movapd %xmm12,%xmm4
subsd  %xmm1,%xmm4
andpd  0xb7a(%rip),%xmm4
movlpd %xmm4,(%r14)
movl   $0xffffffff,(%r15)
movapd %xmm1,%xmm12
movapd %xmm12,%xmm0
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
sub    %ebp,(%r15)
andpd  0xb4a(%rip),%xmm4
movlpd %xmm4,(%r14)
jmp    14c7 <findzero2+0x3c7>

LLVM IR (-O0):
@DBL_EPSILON = global i32 0
define double @findzero2(double %0, double %1, double %2, double %3, double (double, i8*)* %4, i8* %5, double* %6, i32* %7) {
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double (double, i8*)*
%15 = alloca i8*
%16 = alloca double*
%17 = alloca i32*
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca i32
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
store double %0, double* %10
store double %1, double* %11
store double %2, double* %12
store double %3, double* %13
store double (double, i8*)* %4, double (double, i8*)** %14
store i8* %5, i8** %15
store double* %6, double** %16
store i32* %7, i32** %17
%32 = load double, double* %10
store double %32, double* %18
%33 = load double, double* %11
store double %33, double* %19
%34 = load double, double* %18
store double %34, double* %20
%35 = load double, double* %12
store double %35, double* %21
%36 = load i32*, i32** %17
%37 = load i32, i32* %36
%38 = add nsw i32 %37, 1
store i32 %38, i32* %23
%39 = load double*, double** %16
%40 = load double, double* %39
store double %40, double* %22
%41 = load double, double* %12
%42 = fcmp oeq double %41, 0.000000e+00
br i1 %42, label %43, label %47
43: ; preds = %8
%44 = load double*, double** %16
store double 0.000000e+00, double* %44
%45 = load i32*, i32** %17
store i32 0, i32* %45
%46 = load double, double* %18
store double %46, double* %9
br label %249
47: ; preds = %8
%48 = load double, double* %13
%49 = fcmp oeq double %48, 0.000000e+00
br i1 %49, label %50, label %54
50: ; preds = %47
%51 = load double*, double** %16
store double 0.000000e+00, double* %51
%52 = load i32*, i32** %17
store i32 0, i32* %52
%53 = load double, double* %19
store double %53, double* %9
br label %249
54: ; preds = %47
br label %55
55: ; preds = %240, %54
%56 = load i32, i32* %23
%57 = add nsw i32 %56, -1
store i32 %57, i32* %23
%58 = icmp ne i32 %56, 0
br i1 %58, label %59, label %241
59: ; preds = %55
%60 = load double, double* %19
%61 = load double, double* %18
%62 = fsub double %60, %61
store double %62, double* %24
%63 = load double, double* %21
%64 = call double @llvm.fabs.f64(double %63)
%65 = load double, double* %13
%66 = call double @llvm.fabs.f64(double %65)
%67 = fcmp olt double %64, %66
br i1 %67, label %68, label %75
68: ; preds = %59
%69 = load double, double* %19
store double %69, double* %18
%70 = load double, double* %20
store double %70, double* %19
%71 = load double, double* %18
store double %71, double* %20
%72 = load double, double* %13
store double %72, double* %12
%73 = load double, double* %21
store double %73, double* %13
%74 = load double, double* %12
store double %74, double* %21
br label %75
75: ; preds = %68, %59
%76 = load i32, i32* @DBL_EPSILON
%77 = mul nsw i32 2, %76
%78 = sitofp i32 %77 to double
%79 = load double, double* %19
%80 = call double @llvm.fabs.f64(double %79)
%81 = load double, double* %22
%82 = fdiv double %81, 2.000000e+00
%83 = call double @llvm.fmuladd.f64(double %78, double %80, double %82)
store double %83, double* %25
%84 = load double, double* %20
%85 = load double, double* %19
%86 = fsub double %84, %85
%87 = fdiv double %86, 2.000000e+00
store double %87, double* %28
%88 = load double, double* %28
%89 = call double @llvm.fabs.f64(double %88)
%90 = load double, double* %25
%91 = fcmp ole double %89, %90
br i1 %91, label %95, label %92
92: ; preds = %75
%93 = load double, double* %13
%94 = fcmp oeq double %93, 0.000000e+00
br i1 %94, label %95, label %106
95: ; preds = %92, %75
%96 = load i32, i32* %23
%97 = load i32*, i32** %17
%98 = load i32, i32* %97
%99 = sub nsw i32 %98, %96
store i32 %99, i32* %97
%100 = load double, double* %20
%101 = load double, double* %19
%102 = fsub double %100, %101
%103 = call double @llvm.fabs.f64(double %102)
%104 = load double*, double** %16
store double %103, double* %104
%105 = load double, double* %19
store double %105, double* %9
br label %249
106: ; preds = %92
%107 = load double, double* %24
%108 = call double @llvm.fabs.f64(double %107)
%109 = load double, double* %25
%110 = fcmp oge double %108, %109
br i1 %110, label %111, label %202
111: ; preds = %106
%112 = load double, double* %12
%113 = call double @llvm.fabs.f64(double %112)
%114 = load double, double* %13
%115 = call double @llvm.fabs.f64(double %114)
%116 = fcmp ogt double %113, %115
br i1 %116, label %117, label %202
117: ; preds = %111
%118 = load double, double* %20
%119 = load double, double* %19
%120 = fsub double %118, %119
store double %120, double* %30
%121 = load double, double* %18
%122 = load double, double* %20
%123 = fcmp oeq double %121, %122
br i1 %123, label %124, label %133
124: ; preds = %117
%125 = load double, double* %13
%126 = load double, double* %12
%127 = fdiv double %125, %126
store double %127, double* %29
%128 = load double, double* %30
%129 = load double, double* %29
%130 = fmul double %128, %129
store double %130, double* %26
%131 = load double, double* %29
%132 = fsub double 1.000000e+00, %131
store double %132, double* %27
br label %167
133: ; preds = %117
%134 = load double, double* %12
%135 = load double, double* %21
%136 = fdiv double %134, %135
store double %136, double* %27
%137 = load double, double* %13
%138 = load double, double* %21
%139 = fdiv double %137, %138
store double %139, double* %29
%140 = load double, double* %13
%141 = load double, double* %12
%142 = fdiv double %140, %141
store double %142, double* %31
%143 = load double, double* %31
%144 = load double, double* %30
%145 = load double, double* %27
%146 = fmul double %144, %145
%147 = load double, double* %27
%148 = load double, double* %29
%149 = fsub double %147, %148
%150 = load double, double* %19
%151 = load double, double* %18
%152 = fsub double %150, %151
%153 = load double, double* %29
%154 = fsub double %153, 1.000000e+00
%155 = fmul double %152, %154
%156 = fneg double %155
%157 = call double @llvm.fmuladd.f64(double %146, double %149, double %156)
%158 = fmul double %143, %157
store double %158, double* %26
%159 = load double, double* %27
%160 = fsub double %159, 1.000000e+00
%161 = load double, double* %29
%162 = fsub double %161, 1.000000e+00
%163 = fmul double %160, %162
%164 = load double, double* %31
%165 = fsub double %164, 1.000000e+00
%166 = fmul double %163, %165
store double %166, double* %27
br label %167
167: ; preds = %133, %124
%168 = load double, double* %26
%169 = fcmp ogt double %168, 0.000000e+00
br i1 %169, label %170, label %173
170: ; preds = %167
%171 = load double, double* %27
%172 = fneg double %171
store double %172, double* %27
br label %176
173: ; preds = %167
%174 = load double, double* %26
%175 = fneg double %174
store double %175, double* %26
br label %176
176: ; preds = %173, %170
%177 = load double, double* %26
%178 = load double, double* %30
%179 = fmul double 7.500000e-01, %178
%180 = load double, double* %27
%181 = load double, double* %25
%182 = load double, double* %27
%183 = fmul double %181, %182
%184 = call double @llvm.fabs.f64(double %183)
%185 = fdiv double %184, 2.000000e+00
%186 = fneg double %185
%187 = call double @llvm.fmuladd.f64(double %179, double %180, double %186)
%188 = fcmp olt double %177, %187
br i1 %188, label %189, label %201
189: ; preds = %176
%190 = load double, double* %26
%191 = load double, double* %24
%192 = load double, double* %27
%193 = fmul double %191, %192
%194 = fdiv double %193, 2.000000e+00
%195 = call double @llvm.fabs.f64(double %194)
%196 = fcmp olt double %190, %195
br i1 %196, label %197, label %201
197: ; preds = %189
%198 = load double, double* %26
%199 = load double, double* %27
%200 = fdiv double %198, %199
store double %200, double* %28
br label %201
201: ; preds = %197, %189, %176
br label %202
202: ; preds = %201, %111, %106
%203 = load double, double* %28
%204 = call double @llvm.fabs.f64(double %203)
%205 = load double, double* %25
%206 = fcmp olt double %204, %205
br i1 %206, label %207, label %216
207: ; preds = %202
%208 = load double, double* %28
%209 = fcmp ogt double %208, 0.000000e+00
br i1 %209, label %210, label %212
210: ; preds = %207
%211 = load double, double* %25
store double %211, double* %28
br label %215
212: ; preds = %207
%213 = load double, double* %25
%214 = fneg double %213
store double %214, double* %28
br label %215
215: ; preds = %212, %210
br label %216
216: ; preds = %215, %202
%217 = load double, double* %19
store double %217, double* %18
%218 = load double, double* %13
store double %218, double* %12
%219 = load double, double* %28
%220 = load double, double* %19
%221 = fadd double %220, %219
store double %221, double* %19
%222 = load double (double, i8*)*, double (double, i8*)** %14
%223 = load double, double* %19
%224 = load i8*, i8** %15
%225 = call double %222(double %223, i8* %224)
store double %225, double* %13
%226 = load double, double* %13
%227 = fcmp ogt double %226, 0.000000e+00
br i1 %227, label %228, label %231
228: ; preds = %216
%229 = load double, double* %21
%230 = fcmp ogt double %229, 0.000000e+00
br i1 %230, label %237, label %231
231: ; preds = %228, %216
%232 = load double, double* %13
%233 = fcmp olt double %232, 0.000000e+00
br i1 %233, label %234, label %240
234: ; preds = %231
%235 = load double, double* %21
%236 = fcmp olt double %235, 0.000000e+00
br i1 %236, label %237, label %240
237: ; preds = %234, %228
%238 = load double, double* %18
store double %238, double* %20
%239 = load double, double* %12
store double %239, double* %21
br label %240
240: ; preds = %237, %234, %231
br label %55
241: ; preds = %55
%242 = load double, double* %20
%243 = load double, double* %19
%244 = fsub double %242, %243
%245 = call double @llvm.fabs.f64(double %244)
%246 = load double*, double** %16
store double %245, double* %246
%247 = load i32*, i32** %17
store i32 -1, i32* %247
%248 = load double, double* %19
store double %248, double* %9
br label %249
249: ; preds = %241, %95, %50, %43
%250 = load double, double* %9
ret double %250
}

LLVM IR (-O2):
@DBL_EPSILON = global i32 0
define double @findzero2(double %0, double %1, double %2, double %3, double (double, i8*)* nocapture %4, i8* %5, double* nocapture %6, i32* nocapture %7) {
%9 = load double, double* %6
%10 = fcmp oeq double %2, 0.000000e+00
br i1 %10, label %11, label %12
11: ; preds = %8
store double 0.000000e+00, double* %6
store i32 0, i32* %7
br label %148
12: ; preds = %8
%13 = load i32, i32* %7
%14 = fcmp oeq double %3, 0.000000e+00
br i1 %14, label %21, label %15
15: ; preds = %12
%16 = icmp eq i32 %13, -1
br i1 %16, label %143, label %17
17: ; preds = %15
%18 = fmul double %9, 5.000000e-01
%19 = insertelement <2 x double> poison, double %2, i64 0
%20 = shufflevector <2 x double> %19, <2 x double> poison, <2 x i32> zeroinitializer
br label %22
21: ; preds = %12
store double 0.000000e+00, double* %6
store i32 0, i32* %7
br label %148
22: ; preds = %17, %136
%23 = phi i32 [ %13, %17 ], [ %139, %136 ]
%24 = phi double [ %3, %17 ], [ %126, %136 ]
%25 = phi double [ %0, %17 ], [ %39, %136 ]
%26 = phi double [ %1, %17 ], [ %125, %136 ]
%27 = phi double [ %0, %17 ], [ %137, %136 ]
%28 = phi <2 x double> [ %20, %17 ], [ %142, %136 ]
%29 = fsub double %26, %25
%30 = extractelement <2 x double> %28, i64 1
%31 = tail call double @llvm.fabs.f64(double %30)
%32 = tail call double @llvm.fabs.f64(double %24)
%33 = fcmp olt double %31, %32
br i1 %33, label %34, label %37
34: ; preds = %22
%35 = insertelement <2 x double> poison, double %24, i64 0
%36 = shufflevector <2 x double> %35, <2 x double> poison, <2 x i32> zeroinitializer
br label %37
37: ; preds = %34, %22
%38 = phi double [ %26, %34 ], [ %27, %22 ]
%39 = phi double [ %27, %34 ], [ %26, %22 ]
%40 = phi double [ %26, %34 ], [ %25, %22 ]
%41 = phi double [ %30, %34 ], [ %24, %22 ]
%42 = phi <2 x double> [ %36, %34 ], [ %28, %22 ]
%43 = load i32, i32* @DBL_EPSILON
%44 = shl nsw i32 %43, 1
%45 = sitofp i32 %44 to double
%46 = tail call double @llvm.fabs.f64(double %39)
%47 = tail call double @llvm.fmuladd.f64(double %45, double %46, double %18)
%48 = fsub double %38, %39
%49 = fmul double %48, 5.000000e-01
%50 = tail call double @llvm.fabs.f64(double %49)
%51 = fcmp ole double %50, %47
%52 = fcmp oeq double %41, 0.000000e+00
%53 = select i1 %51, i1 true, i1 %52
br i1 %53, label %54, label %58
54: ; preds = %37
%55 = load i32, i32* %7
%56 = sub nsw i32 %55, %23
store i32 %56, i32* %7
%57 = tail call double @llvm.fabs.f64(double %48)
store double %57, double* %6
br label %148
58: ; preds = %37
%59 = tail call double @llvm.fabs.f64(double %29)
%60 = fcmp ult double %59, %47
br i1 %60, label %115, label %61
61: ; preds = %58
%62 = extractelement <2 x double> %42, i64 0
%63 = tail call double @llvm.fabs.f64(double %62)
%64 = tail call double @llvm.fabs.f64(double %41)
%65 = fcmp ogt double %63, %64
br i1 %65, label %66, label %115
66: ; preds = %61
%67 = fcmp oeq double %40, %38
br i1 %67, label %68, label %72
68: ; preds = %66
%69 = fdiv double %41, %62
%70 = fmul double %48, %69
%71 = fsub double 1.000000e+00, %69
br label %93
72: ; preds = %66
%73 = extractelement <2 x double> %42, i64 1
%74 = fdiv double %62, %73
%75 = insertelement <2 x double> poison, double %41, i64 0
%76 = shufflevector <2 x double> %75, <2 x double> poison, <2 x i32> zeroinitializer
%77 = fdiv <2 x double> %76, %42
%78 = fmul double %48, %74
%79 = extractelement <2 x double> %77, i64 1
%80 = fsub double %74, %79
%81 = fsub double %39, %40
%82 = fneg double %81
%83 = fadd <2 x double> %77, <double -1.000000e+00, double -1.000000e+00>
%84 = extractelement <2 x double> %83, i64 1
%85 = fmul double %84, %82
%86 = tail call double @llvm.fmuladd.f64(double %78, double %80, double %85)
%87 = extractelement <2 x double> %77, i64 0
%88 = fmul double %87, %86
%89 = fadd double %74, -1.000000e+00
%90 = fmul double %84, %89
%91 = extractelement <2 x double> %83, i64 0
%92 = fmul double %91, %90
br label %93
93: ; preds = %72, %68
%94 = phi double [ %70, %68 ], [ %88, %72 ]
%95 = phi double [ %71, %68 ], [ %92, %72 ]
%96 = fcmp ogt double %94, 0.000000e+00
%97 = fneg double %95
%98 = fneg double %94
%99 = select i1 %96, double %94, double %98
%100 = select i1 %96, double %97, double %95
%101 = fmul double %48, 7.500000e-01
%102 = fmul double %47, %100
%103 = tail call double @llvm.fabs.f64(double %102)
%104 = fmul double %103, -5.000000e-01
%105 = tail call double @llvm.fmuladd.f64(double %101, double %100, double %104)
%106 = fcmp olt double %99, %105
br i1 %106, label %107, label %115
107: ; preds = %93
%108 = fmul double %29, %100
%109 = fmul double %108, 5.000000e-01
%110 = tail call double @llvm.fabs.f64(double %109)
%111 = fcmp olt double %99, %110
br i1 %111, label %112, label %115
112: ; preds = %107
%113 = fdiv double %99, %100
%114 = tail call double @llvm.fabs.f64(double %113)
br label %115
115: ; preds = %93, %107, %112, %61, %58
%116 = phi double [ %50, %93 ], [ %50, %107 ], [ %114, %112 ], [ %50, %61 ], [ %50, %58 ]
%117 = phi double [ %49, %93 ], [ %49, %107 ], [ %113, %112 ], [ %49, %61 ], [ %49, %58 ]
%118 = fcmp olt double %116, %47
br i1 %118, label %119, label %123
119: ; preds = %115
%120 = fcmp ogt double %117, 0.000000e+00
br i1 %120, label %123, label %121
121: ; preds = %119
%122 = fneg double %47
br label %123
123: ; preds = %119, %121, %115
%124 = phi double [ %122, %121 ], [ %117, %115 ], [ %47, %119 ]
%125 = fadd double %39, %124
%126 = tail call double %4(double %125, i8* %5)
%127 = fcmp ogt double %126, 0.000000e+00
%128 = extractelement <2 x double> %42, i64 1
%129 = fcmp ogt double %128, 0.000000e+00
%130 = select i1 %127, i1 %129, i1 false
br i1 %130, label %135, label %131
131: ; preds = %123
%132 = fcmp olt double %126, 0.000000e+00
%133 = fcmp olt double %128, 0.000000e+00
%134 = select i1 %132, i1 %133, i1 false
br i1 %134, label %135, label %136
135: ; preds = %131, %123
br label %136
136: ; preds = %131, %135
%137 = phi double [ %39, %135 ], [ %38, %131 ]
%138 = phi double [ %41, %135 ], [ %128, %131 ]
%139 = add nsw i32 %23, -1
%140 = icmp eq i32 %23, 0
%141 = insertelement <2 x double> poison, double %41, i64 0
%142 = insertelement <2 x double> %141, double %138, i64 1
br i1 %140, label %143, label %22
143: ; preds = %136, %15
%144 = phi double [ %0, %15 ], [ %137, %136 ]
%145 = phi double [ %1, %15 ], [ %125, %136 ]
%146 = fsub double %144, %145
%147 = tail call double @llvm.fabs.f64(double %146)
store double %147, double* %6
store i32 -1, i32* %7
br label %148
148: ; preds = %54, %143, %21, %11
%149 = phi double [ %0, %11 ], [ %1, %21 ], [ %145, %143 ], [ %39, %54 ]
ret double %149
}