#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 a_gcd(int, int);
scalar_t__ calloc(int, int);
double exp(double);
int fabs(double);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, double);
int /*<<< orphan*/ free(double *);
int /*<<< orphan*/ stderr;
int karlin_k(int low, int high, double *pr, double *lambda_p, double *K_p,
             double *H_p) {
  int i, j, range, lo, hi, first, last, nit;
  double up, new, sum, Sum, av, beta, oldsum, ratio, ftemp;
  double lambda;
  double *P, *ptrP, *ptr2;
  double *ptr1;
  range = high - low;
  sum = 0;
  ptr1 = pr;
  for (i = low; i <= high; i++)
    sum += i * (*ptr1++);
  if (sum >= 0.0) {
    fprintf(stderr, " (karlin lambda) non-negative expected score: %.4lg\n",
            sum);
    return 0;
  }
  up = 0.5;
  do {
    up *= 2.0;
    ptr1 = pr;
    beta = exp(up);
    ftemp = exp(up * (low - 1));
    sum = 0.0;
    for (i = 0; i <= range; ++i)
      sum += *ptr1++ * (ftemp *= beta);
  } while (sum < 1.0);
  lambda = 0.0;
  nit = 0;
  while (nit++ < 25) {
    new = (lambda + up) / 2.0;
    beta = exp(new);
    ftemp = exp(new *(low - 1));
    ptr1 = pr;
    sum = 0.0;
    for (i = 0; i <= range; ++i)
      sum += *ptr1++ * (ftemp *= beta);
    if (sum > 1.0 + 1e-6)
      up = new;
    else {
      if (fabs(lambda - new) < 1e-6)
        goto done;
      lambda = new;
    }
  }
  if (lambda <= 1e-10) {
    lambda = -1.0;
    return 0;
  }
done:
  *lambda_p = lambda;
  ptr1 = pr;
  ftemp = exp(lambda * (low - 1));
  for (av = 0.0, i = low; i <= high; ++i)
    av += *ptr1++ * i * (ftemp *= beta);
  *H_p = lambda * av;
  Sum = lo = hi = 0;
  P = (double *)calloc(25 * range + 1, sizeof(double));
  for (*P = sum = oldsum = j = 1; j <= 25 && sum > 0.001; Sum += sum /= j++) {
    first = last = range;
    for (ptrP = P + (hi += high) - (lo += low); ptrP >= P; *ptrP-- = sum) {
      ptr1 = ptrP - first;
      ptr2 = pr + first;
      for (sum = 0, i = first; i <= last; ++i)
        sum += *ptr1-- * *ptr2++;
      if (first)
        --first;
      if (ptrP - P <= range)
        --last;
    }
    ftemp = exp(lambda * (lo - 1));
    for (sum = 0, i = lo; i; ++i)
      sum += *++ptrP * (ftemp *= beta);
    for (; i <= hi; ++i)
      sum += *++ptrP;
    ratio = sum / oldsum;
    oldsum = sum;
  }
  for (; j <= 200; Sum += oldsum / j++)
    oldsum *= ratio;
  for (i = low; !pr[i - low]; ++i)
    ;
  for (j = -i; i < high && j > 1;)
    if (pr[++i - low])
      j = a_gcd(j, i);
  *K_p = (j * exp(-2 * Sum)) / (av * (1.0 - exp(-lambda * j)));
  free(P);
  return 1;
}


x86 assembly (clang, -O0):
<karlin_k>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0xc(%rbp),%eax
sub    -0x8(%rbp),%eax
mov    %eax,-0x3c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0xc0(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     11ed <karlin_k+0x8d>
cvtsi2sdl -0x34(%rbp),%xmm0
mov    -0xc0(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0xc0(%rbp)
movsd  (%rax),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11a3 <karlin_k+0x43>
movsd  -0x68(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1225 <karlin_k+0xc5>
mov    0x2dda(%rip),%rax
mov    (%rax),%edi
movsd  -0x68(%rbp),%xmm0
lea    0xe34(%rip),%rsi
call   1070 <fprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1a2f <karlin_k+0x8cf>
movsd  0xdd3(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xdce(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0xc0(%rbp)
movsd  -0x58(%rbp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
call   1080 <exp@plt>
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     12e7 <karlin_k+0x187>
mov    -0xc0(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0xc0(%rbp)
movsd  (%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
mulsd  -0x98(%rbp),%xmm2
ff
movsd  %xmm2,-0x98(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    128d <karlin_k+0x12d>
jmp    12ec <karlin_k+0x18c>
movsd  0xd1c(%rip),%xmm0
ucomisd -0x68(%rbp),%xmm0
ja     1232 <karlin_k+0xd2>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x50(%rbp)
cmp    $0x19,%eax
jge    144b <karlin_k+0x2eb>
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0x58(%rbp),%xmm0
movsd  0xcce(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1080 <exp@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
call   1080 <exp@plt>
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    %rax,-0xc0(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     13e6 <karlin_k+0x286>
mov    -0xc0(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0xc0(%rbp)
movsd  (%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
mulsd  -0x98(%rbp),%xmm2
ff
movsd  %xmm2,-0x98(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    138c <karlin_k+0x22c>
movsd  -0x68(%rbp),%xmm0
movsd  0xc35(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    140c <karlin_k+0x2ac>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1446 <karlin_k+0x2e6>
movsd  -0xa0(%rbp),%xmm0
ff
subsd  -0x60(%rbp),%xmm0
call   1060 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xc06(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1439 <karlin_k+0x2d9>
jmp    1482 <karlin_k+0x322>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1311 <karlin_k+0x1b1>
movsd  0xbc5(%rip),%xmm0
ucomisd -0xa0(%rbp),%xmm0
ff
jb     147d <karlin_k+0x31d>
movsd  0xbb7(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movl   $0x0,-0x4(%rbp)
jmp    1a2f <karlin_k+0x8cf>
jmp    1482 <karlin_k+0x322>
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,-0xc0(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
call   1080 <exp@plt>
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     1531 <karlin_k+0x3d1>
mov    -0xc0(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0xc0(%rbp)
movsd  (%rax),%xmm0
cvtsi2sdl -0x34(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x80(%rbp),%xmm2
mulsd  -0x98(%rbp),%xmm2
ff
movsd  %xmm2,-0x98(%rbp)
ff
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    14ce <karlin_k+0x36e>
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
imul   $0x19,-0x3c(%rbp),%edi
add    $0x1,%edi
mov    $0x8,%esi
call   1050 <calloc@plt>
mov    %rax,-0xa8(%rbp)
movl   $0x1,-0x38(%rbp)
movsd  0xa8d(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xa7d(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0xa69(%rip),%xmm0
movsd  %xmm0,(%rax)
xor    %eax,%eax
cmpl   $0x19,-0x38(%rbp)
mov    %al,-0xc1(%rbp)
jg     15d7 <karlin_k+0x477>
movsd  -0x68(%rbp),%xmm0
movsd  0xa6e(%rip),%xmm1
ucomisd %xmm1,%xmm0
seta   %al
mov    %al,-0xc1(%rbp)
mov    -0xc1(%rbp),%al
test   $0x1,%al
jne    15ea <karlin_k+0x48a>
jmp    1861 <karlin_k+0x701>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    %eax,-0x48(%rbp)
mov    -0xa8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x44(%rbp),%ecx
mov    %ecx,-0x44(%rbp)
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%ecx
add    -0x40(%rbp),%ecx
mov    %ecx,-0x40(%rbp)
movslq %ecx,%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xb0(%rbp)
mov    -0xb0(%rbp),%rax
cmp    -0xa8(%rbp),%rax
jb     1746 <karlin_k+0x5e6>
mov    -0xb0(%rbp),%rax
movslq -0x48(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xc0(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x48(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xb8(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jg     16e0 <karlin_k+0x580>
mov    -0xc0(%rbp),%rax
mov    %rax,%rcx
add    $0xfffffffffffffff8,%rcx
mov    %rcx,-0xc0(%rbp)
movsd  (%rax),%xmm0
mov    -0xb8(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0xb8(%rbp)
movsd  (%rax),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1682 <karlin_k+0x522>
cmpl   $0x0,-0x48(%rbp)
je     16f3 <karlin_k+0x593>
mov    -0x48(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x48(%rbp)
mov    -0xb0(%rbp),%rax
mov    -0xa8(%rbp),%rcx
sub    %rcx,%rax
sar    $0x3,%rax
movslq -0x3c(%rbp),%rcx
cmp    %rcx,%rax
jg     171e <karlin_k+0x5be>
mov    -0x4c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4c(%rbp)
jmp    1723 <karlin_k+0x5c3>
movsd  -0x68(%rbp),%xmm0
mov    -0xb0(%rbp),%rax
mov    %rax,%rcx
add    $0xfffffffffffffff8,%rcx
mov    %rcx,-0xb0(%rbp)
movsd  %xmm0,(%rax)
jmp    162c <karlin_k+0x4cc>
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x40(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
call   1080 <exp@plt>
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
je     17d0 <karlin_k+0x670>
mov    -0xb0(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0xb0(%rbp)
movsd  0x8(%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
mulsd  -0x98(%rbp),%xmm2
ff
movsd  %xmm2,-0x98(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1777 <karlin_k+0x617>
jmp    17d5 <karlin_k+0x675>
mov    -0x34(%rbp),%eax
cmp    -0x44(%rbp),%eax
jg     1813 <karlin_k+0x6b3>
mov    -0xb0(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0xb0(%rbp)
movsd  0x8(%rax),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    17d5 <karlin_k+0x675>
movsd  -0x68(%rbp),%xmm0
divsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x38(%rbp)
cvtsi2sd %eax,%xmm1
movsd  -0x68(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    15ab <karlin_k+0x44b>
jmp    1866 <karlin_k+0x706>
cmpl   $0xc8,-0x38(%rbp)
jg     18b5 <karlin_k+0x755>
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x38(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x38(%rbp)
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    1866 <karlin_k+0x706>
mov    -0x8(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x8(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setne  %al
setp   %cl
or     %cl,%al
xor    $0xff,%al
test   $0x1,%al
jne    18eb <karlin_k+0x78b>
jmp    18fe <karlin_k+0x79e>
jmp    18f0 <karlin_k+0x790>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    18bb <karlin_k+0x75b>
xor    %eax,%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%ecx
xor    %eax,%eax
cmp    -0xc(%rbp),%ecx
mov    %al,-0xc2(%rbp)
jge    1927 <karlin_k+0x7c7>
cmpl   $0x1,-0x38(%rbp)
setg   %al
mov    %al,-0xc2(%rbp)
mov    -0xc2(%rbp),%al
test   $0x1,%al
jne    193a <karlin_k+0x7da>
jmp    197d <karlin_k+0x81d>
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0x34(%rbp)
sub    -0x8(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    196a <karlin_k+0x80a>
jp     196a <karlin_k+0x80a>
jmp    1978 <karlin_k+0x818>
mov    -0x38(%rbp),%edi
mov    -0x34(%rbp),%esi
call   1040 <a_gcd@plt>
mov    %eax,-0x38(%rbp)
jmp    1906 <karlin_k+0x7a6>
cvtsi2sdl -0x38(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0x6ae(%rip),%xmm0
mulsd  -0x70(%rbp),%xmm0
call   1080 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
mulsd  %xmm1,%xmm0
call   1080 <exp@plt>
movsd  -0xd8(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0xd0(%rbp),%xmm0
ff
movsd  0x608(%rip),%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0xa8(%rbp),%rdi
call   1030 <free@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<karlin_k>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xa8,%rsp
mov    %esi,%eax
xorpd  %xmm0,%xmm0
sub    %edi,%eax
mov    %rax,0x38(%rsp)
jl     13ae <karlin_k+0x24e>
mov    %r8,%r15
mov    %rcx,%r14
mov    %esi,%r12d
sub    %edi,%r12d
lea    0x1(%r12),%ebp
xorpd  %xmm0,%xmm0
mov    %rdx,%rax
mov    %edi,%ecx
and    $0x3,%ebp
je     11cb <karlin_k+0x6b>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  (%rax),%xmm1
add    $0x8,%rax
addsd  %xmm1,%xmm0
add    $0x1,%ecx
add    $0xffffffff,%ebp
jne    11b0 <karlin_k+0x50>
cmp    $0x3,%r12d
jb     1233 <karlin_k+0xd3>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  (%rax),%xmm1
addsd  %xmm0,%xmm1
lea    0x1(%rcx),%ebp
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
mulsd  0x8(%rax),%xmm0
addsd  %xmm1,%xmm0
lea    0x2(%rcx),%ebp
xorps  %xmm1,%xmm1
cvtsi2sd %ebp,%xmm1
mulsd  0x10(%rax),%xmm1
addsd  %xmm0,%xmm1
lea    0x3(%rcx),%ebp
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
mulsd  0x18(%rax),%xmm0
addsd  %xmm1,%xmm0
add    $0x4,%ecx
add    $0x20,%rax
cmp    %esi,%ebp
jne    11e0 <karlin_k+0x80>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jae    13ae <karlin_k+0x24e>
mov    %r9,0x50(%rsp)
lea    -0x1(%rdi),%eax
mov    %eax,0x78(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x30(%rsp)
lea    0x1(%rsi),%r13d
mov    %r13d,0x2c(%rsp)
sub    %edi,%r13d
mov    %r13d,%ebx
and    $0xfffffffc,%ebx
mov    %rsi,0x48(%rsp)
mov    %esi,%eax
mov    %rdi,0x20(%rsp)
sub    %dil,%al
add    $0x1,%al
movzbl %al,%ebp
and    $0x3,%ebp
movsd  0xd75(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
mov    %rdx,0x18(%rsp)
jmp    12b6 <karlin_k+0x156>
nopl   0x0(%rax,%rax,1)
xorpd  %xmm1,%xmm1
movsd  0xd5c(%rip),%xmm4
ucomisd %xmm1,%xmm4
jbe    13d7 <karlin_k+0x277>
movsd  0x10(%rsp),%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
call   1080 <exp@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
mulsd  0x30(%rsp),%xmm0
call   1080 <exp@plt>
cmpl   $0x0,0x38(%rsp)
js     12a0 <karlin_k+0x140>
xorpd  %xmm1,%xmm1
cmp    $0x3,%r12d
mov    0x18(%rsp),%rdx
jae    1310 <karlin_k+0x1b0>
mov    %rdx,%rax
movsd  0xd05(%rip),%xmm4
movsd  0x8(%rsp),%xmm5
jmp    137c <karlin_k+0x21c>
nopl   0x0(%rax,%rax,1)
xorpd  %xmm1,%xmm1
mov    %ebx,%ecx
mov    %rdx,%rax
movsd  0xce7(%rip),%xmm4
movsd  0x8(%rsp),%xmm5
nopw   0x0(%rax,%rax,1)
mulsd  %xmm5,%xmm0
movapd %xmm5,%xmm2
mulsd  %xmm0,%xmm2
mulsd  (%rax),%xmm0
addsd  %xmm1,%xmm0
movapd %xmm5,%xmm3
mulsd  %xmm2,%xmm3
mulsd  0x8(%rax),%xmm2
addsd  %xmm0,%xmm2
movapd %xmm5,%xmm0
mulsd  %xmm3,%xmm0
mulsd  0x10(%rax),%xmm3
addsd  %xmm2,%xmm3
movsd  0x18(%rax),%xmm1
mulsd  %xmm0,%xmm1
add    $0x20,%rax
addsd  %xmm3,%xmm1
add    $0xfffffffc,%ecx
jne    1330 <karlin_k+0x1d0>
test   $0x3,%r13b
je     12ac <karlin_k+0x14c>
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
mulsd  %xmm5,%xmm0
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm2,%xmm1
add    $0x1,%rcx
cmp    %ecx,%ebp
jne    1390 <karlin_k+0x230>
jmp    12ac <karlin_k+0x14c>
mov    0x2c2b(%rip),%rax
mov    (%rax),%edi
lea    0xc92(%rip),%rsi
call   1070 <fprintf@plt>
xor    %eax,%eax
add    $0xa8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r15,0x80(%rsp)
mov    %r13d,%r15d
and    $0xfffffffc,%r15d
mov    0x48(%rsp),%rax
sub    0x20(%rsp),%al
add    $0x1,%al
movzbl %al,%ebx
and    $0x3,%ebx
xorpd  %xmm2,%xmm2
mov    $0x1,%ebp
jmp    143f <karlin_k+0x2df>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movapd 0x60(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
call   1060 <fabs@plt>
movsd  0x8(%rsp),%xmm1
test   %eax,%eax
jle    1578 <karlin_k+0x418>
add    $0x1,%ebp
movapd %xmm1,%xmm2
cmp    $0x1a,%ebp
je     155e <karlin_k+0x3fe>
movsd  0x10(%rsp),%xmm0
movapd %xmm2,0x60(%rsp)
addsd  %xmm2,%xmm0
mulsd  0xba9(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1080 <exp@plt>
movsd  %xmm0,0x58(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0x30(%rsp),%xmm0
call   1080 <exp@plt>
cmpl   $0x0,0x38(%rsp)
js     1410 <karlin_k+0x2b0>
xorpd  %xmm1,%xmm1
cmp    $0x3,%r12d
jae    14a0 <karlin_k+0x340>
mov    0x18(%rsp),%rax
movsd  0x58(%rsp),%xmm4
jmp    150c <karlin_k+0x3ac>
nopw   0x0(%rax,%rax,1)
xorpd  %xmm1,%xmm1
mov    %r15d,%ecx
mov    0x18(%rsp),%rax
movsd  0x58(%rsp),%xmm4
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mulsd  %xmm4,%xmm0
movapd %xmm4,%xmm2
mulsd  %xmm0,%xmm2
mulsd  (%rax),%xmm0
addsd  %xmm1,%xmm0
movapd %xmm4,%xmm3
mulsd  %xmm2,%xmm3
mulsd  0x8(%rax),%xmm2
addsd  %xmm0,%xmm2
movapd %xmm4,%xmm0
mulsd  %xmm3,%xmm0
mulsd  0x10(%rax),%xmm3
addsd  %xmm2,%xmm3
movsd  0x18(%rax),%xmm1
mulsd  %xmm0,%xmm1
add    $0x20,%rax
addsd  %xmm3,%xmm1
add    $0xfffffffc,%ecx
jne    14c0 <karlin_k+0x360>
test   $0x3,%r13b
je     1539 <karlin_k+0x3d9>
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mulsd  %xmm4,%xmm0
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm2,%xmm1
add    $0x1,%rcx
cmp    %ecx,%ebx
jne    1520 <karlin_k+0x3c0>
ucomisd 0xacf(%rip),%xmm1
jbe    1410 <karlin_k+0x2b0>
movsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movapd 0x60(%rsp),%xmm1
jmp    142f <karlin_k+0x2cf>
xor    %eax,%eax
movsd  0xab0(%rip),%xmm0
ucomisd %xmm1,%xmm0
movapd %xmm1,0x60(%rsp)
jae    13c5 <karlin_k+0x265>
movapd 0x60(%rsp),%xmm1
movsd  %xmm1,(%r14)
movsd  0x30(%rsp),%xmm0
mulsd  %xmm1,%xmm0
call   1080 <exp@plt>
xorpd  %xmm2,%xmm2
mov    0x48(%rsp),%rbx
cmp    0x20(%rsp),%ebx
movsd  0x58(%rsp),%xmm3
mov    0x50(%rsp),%rsi
jl     163d <karlin_k+0x4dd>
test   $0x1,%r13b
jne    15c6 <karlin_k+0x466>
xorpd  %xmm2,%xmm2
mov    0x18(%rsp),%rax
mov    0x20(%rsp),%rcx
jmp    15f2 <karlin_k+0x492>
mov    0x20(%rsp),%rdx
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
mov    0x18(%rsp),%rcx
lea    0x8(%rcx),%rax
mulsd  (%rcx),%xmm1
mulsd  %xmm3,%xmm0
mulsd  %xmm0,%xmm1
xorpd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
lea    0x1(%rdx),%ecx
test   %r12d,%r12d
je     163d <karlin_k+0x4dd>
nopw   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  (%rax),%xmm1
mulsd  %xmm3,%xmm0
mulsd  %xmm0,%xmm1
addsd  %xmm2,%xmm1
lea    0x1(%rcx),%edx
xorps  %xmm2,%xmm2
cvtsi2sd %edx,%xmm2
mulsd  0x8(%rax),%xmm2
mulsd  %xmm3,%xmm0
mulsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
add    $0x10,%rax
add    $0x2,%ecx
cmp    %ebx,%edx
jne    1600 <karlin_k+0x4a0>
movapd 0x60(%rsp),%xmm0
movsd  %xmm2,0x98(%rsp)
mulsd  %xmm2,%xmm0
movsd  %xmm0,(%rsi)
mov    0x38(%rsp),%rbp
lea    0x0(%rbp,%rbp,4),%eax
lea    (%rax,%rax,4),%edi
add    $0x1,%edi
mov    $0x8,%esi
call   1050 <calloc@plt>
mov    %rax,%r13
movabs $0x3ff0000000000000,%rax
mov    %rax,0x0(%r13)
movslq %ebp,%r15
movslq %ebx,%rax
mov    %rax,0x90(%rsp)
mov    0x20(%rsp),%rax
movslq %eax,%rcx
mov    %rcx,0x88(%rsp)
mov    %eax,%ecx
not    %ecx
mov    %ecx,0x7c(%rsp)
mov    %eax,%ebp
neg    %ebp
lea    0x1(%rbx),%r12d
mov    $0x1,%eax
xor    %r11d,%r11d
xor    %ebx,%ebx
xor    %ecx,%ecx
mov    %rcx,0x10(%rsp)
xor    %esi,%esi
mov    0x18(%rsp),%r10
mov    0x2c(%rsp),%ecx
xorpd  %xmm0,%xmm0
movsd  0x934(%rip),%xmm4
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %ecx,0x2c(%rsp)
mov    %rax,0x30(%rsp)
movsd  %xmm4,0xa0(%rsp)
add    0x90(%rsp),%rsi
mov    %rsi,0x70(%rsp)
lea    0x0(,%rsi,8),%r14
add    %r13,%r14
mov    0x10(%rsp),%rax
add    0x88(%rsp),%rax
mov    %rax,0x10(%rsp)
lea    0x0(,%rax,8),%rax
sub    %rax,%r14
cmp    %r13,%r14
mov    %ebp,0x50(%rsp)
mov    %ebx,0x44(%rsp)
jae    17e0 <karlin_k+0x680>
movsd  %xmm0,0x8(%rsp)
movzbl %r12b,%r12d
and    $0x7,%r12d
mov    0x10(%rsp),%rbx
lea    -0x1(%rbx),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x60(%rsp),%xmm0
call   1080 <exp@plt>
test   %ebx,%ebx
je     1910 <karlin_k+0x7b0>
mov    0x44(%rsp),%ebx
mov    %ebx,%eax
mov    0x20(%rsp),%rdi
imul   %edi,%eax
lea    (%rax,%rdi,1),%edx
neg    %edx
mov    0x7c(%rsp),%ecx
sub    %eax,%ecx
test   $0x3,%dl
mov    0x18(%rsp),%r10
mov    0x48(%rsp),%r8
movsd  0x58(%rsp),%xmm3
mov    0x50(%rsp),%ebp
mov    $0x0,%r11d
je     1940 <karlin_k+0x7e0>
mov    %ebp,%edx
and    $0x3,%edx
xor    %eax,%eax
xorpd  %xmm4,%xmm4
nop
mulsd  %xmm3,%xmm0
movsd  0x8(%r14),%xmm1
mulsd  %xmm0,%xmm1
add    $0x8,%r14
addsd  %xmm1,%xmm4
add    $0x1,%eax
cmp    %eax,%edx
jne    17b0 <karlin_k+0x650>
sub    %ebp,%eax
jmp    1949 <karlin_k+0x7e9>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x38(%rsp),%rax
mov    %eax,%r9d
mov    %eax,%ecx
jmp    181e <karlin_k+0x6be>
nopl   0x0(%rax)
sub    $0x1,%ecx
cmovb  %r11d,%ecx
mov    %r14,%rax
sub    %r13,%rax
sar    $0x3,%rax
xor    %edx,%edx
cmp    %r15,%rax
setle  %dl
sub    %edx,%r9d
movsd  %xmm3,(%r14)
add    $0xfffffffffffffff8,%r14
cmp    %r13,%r14
jb     1738 <karlin_k+0x5d8>
xorpd  %xmm3,%xmm3
mov    %r9d,%r8d
sub    %ecx,%r8d
jl     17f0 <karlin_k+0x690>
movslq %ecx,%rax
lea    (%r10,%rax,8),%rdx
lea    0x1(%r8),%esi
test   $0x3,%sil
je     1890 <karlin_k+0x730>
neg    %rax
lea    (%r14,%rax,8),%rsi
mov    %r9d,%eax
sub    %cl,%al
add    $0x1,%al
movzbl %al,%edi
and    $0x3,%edi
shl    $0x3,%rdi
xorpd  %xmm3,%xmm3
xor    %ebx,%ebx
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movsd  (%rsi,%rax,1),%xmm1
mulsd  (%rdx,%rbx,8),%xmm1
addsd  %xmm1,%xmm3
add    $0xfffffffffffffff8,%rax
add    $0x1,%rbx
mov    %eax,%ebp
add    %edi,%ebp
jne    1860 <karlin_k+0x700>
add    %rax,%rsi
sub    %rax,%rdx
add    %ecx,%ebx
cmp    $0x3,%r8d
jb     17f0 <karlin_k+0x690>
jmp    18aa <karlin_k+0x74a>
shl    $0x3,%rax
mov    %r14,%rsi
sub    %rax,%rsi
xorpd  %xmm3,%xmm3
mov    %ecx,%ebx
cmp    $0x3,%r8d
jb     17f0 <karlin_k+0x690>
mov    %r9d,%edi
sub    %ebx,%edi
add    $0x1,%edi
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rsi),%xmm1
mulsd  (%rdx,%rbx,8),%xmm1
addsd  %xmm3,%xmm1
movsd  -0x8(%rsi),%xmm2
mulsd  0x8(%rdx,%rbx,8),%xmm2
addsd  %xmm1,%xmm2
movsd  -0x10(%rsi),%xmm1
mulsd  0x10(%rdx,%rbx,8),%xmm1
movsd  -0x18(%rsi),%xmm3
addsd  %xmm2,%xmm1
mulsd  0x18(%rdx,%rbx,8),%xmm3
addsd  %xmm1,%xmm3
add    $0x4,%rbx
add    $0xffffffffffffffe0,%rsi
cmp    %ebx,%edi
jne    18c0 <karlin_k+0x760>
jmp    17f0 <karlin_k+0x690>
nopl   0x0(%rax,%rax,1)
xorpd  %xmm4,%xmm4
mov    0x18(%rsp),%r10
mov    0x48(%rsp),%r8
mov    0x20(%rsp),%rdi
mov    0x30(%rsp),%rdx
mov    0x50(%rsp),%ebp
xor    %r11d,%r11d
mov    0x44(%rsp),%ebx
mov    0x70(%rsp),%rsi
jmp    19b1 <karlin_k+0x851>
nopw   0x0(%rax,%rax,1)
xorpd  %xmm4,%xmm4
mov    0x10(%rsp),%rax
mov    0x70(%rsp),%rsi
cmp    $0x3,%ecx
mov    0x30(%rsp),%rdx
jb     19b1 <karlin_k+0x851>
nopl   0x0(%rax,%rax,1)
mulsd  %xmm3,%xmm0
movapd %xmm3,%xmm1
mulsd  %xmm0,%xmm1
mulsd  0x8(%r14),%xmm0
addsd  %xmm4,%xmm0
movapd %xmm3,%xmm2
mulsd  %xmm1,%xmm2
mulsd  0x10(%r14),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm3,%xmm0
mulsd  %xmm2,%xmm0
mulsd  0x18(%r14),%xmm2
addsd  %xmm1,%xmm2
movsd  0x20(%r14),%xmm4
mulsd  %xmm0,%xmm4
add    $0x20,%r14
addsd  %xmm2,%xmm4
add    $0x4,%eax
jne    1960 <karlin_k+0x800>
test   %rsi,%rsi
mov    0x2c(%rsp),%ecx
js     1a40 <karlin_k+0x8e0>
mov    %ebx,%eax
imul   %r8d,%eax
add    %r8d,%eax
cmp    $0x7,%eax
movsd  0x8(%rsp),%xmm0
jb     1a19 <karlin_k+0x8b9>
mov    %ecx,%eax
and    $0xfffffff8,%eax
nopw   0x0(%rax,%rax,1)
addsd  0x8(%r14),%xmm4
addsd  0x10(%r14),%xmm4
addsd  0x18(%r14),%xmm4
addsd  0x20(%r14),%xmm4
addsd  0x28(%r14),%xmm4
addsd  0x30(%r14),%xmm4
addsd  0x38(%r14),%xmm4
addsd  0x40(%r14),%xmm4
add    $0x40,%r14
add    $0xfffffff8,%eax
jne    19e0 <karlin_k+0x880>
test   $0x7,%cl
je     1a46 <karlin_k+0x8e6>
xor    %eax,%eax
addsd  0x8(%r14,%rax,8),%xmm4
add    $0x1,%rax
cmp    %eax,%r12d
jne    1a20 <karlin_k+0x8c0>
jmp    1a46 <karlin_k+0x8e6>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  0x8(%rsp),%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
lea    0x1(%rdx),%eax
movapd %xmm4,%xmm2
divsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
cmp    $0x18,%edx
ja     1a7a <karlin_k+0x91a>
add    %r8d,%ecx
add    $0x1,%ebx
sub    %edi,%ebp
add    %r8b,%r12b
ucomisd 0x5ac(%rip),%xmm2
ja     16e0 <karlin_k+0x580>
cmp    $0xc7,%edx
ja     1b11 <karlin_k+0x9b1>
movapd %xmm4,%xmm3
divsd  0xa0(%rsp),%xmm3
test   $0x1,%dl
mov    0x80(%rsp),%r14
je     1aba <karlin_k+0x95a>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  %xmm3,%xmm4
lea    0x2(%rdx),%eax
movapd %xmm4,%xmm2
divsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
cmp    $0xc7,%edx
je     1b19 <karlin_k+0x9b9>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mulsd  %xmm3,%xmm4
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm3,%xmm2
mulsd  %xmm4,%xmm2
divsd  %xmm1,%xmm4
addsd  %xmm0,%xmm4
lea    0x1(%rax),%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
movapd %xmm2,%xmm0
divsd  %xmm1,%xmm0
addsd  %xmm4,%xmm0
add    $0x2,%eax
movapd %xmm2,%xmm4
cmp    $0xc9,%eax
jne    1ad0 <karlin_k+0x970>
jmp    1b19 <karlin_k+0x9b9>
mov    0x80(%rsp),%r14
xorpd  %xmm2,%xmm2
mov    %r10,%rax
mov    0x78(%rsp),%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rax),%xmm1
add    $0x1,%ecx
add    $0x8,%rax
ucomisd %xmm2,%xmm1
jne    1b43 <karlin_k+0x9e3>
jnp    1b30 <karlin_k+0x9d0>
mov    %ecx,%eax
neg    %eax
cmp    %r8d,%ecx
jge    1baa <karlin_k+0xa4a>
cmp    $0xfffffffe,%ecx
jg     1baa <karlin_k+0xa4a>
movslq %ecx,%rbp
add    $0x1,%rbp
mov    0x88(%rsp),%rcx
shl    $0x3,%rcx
sub    %rcx,%r10
movsd  %xmm0,0x8(%rsp)
nopl   (%rax)
mov    %r10,%rbx
movsd  (%r10,%rbp,8),%xmm1
ucomisd 0x4af(%rip),%xmm1
jne    1b85 <karlin_k+0xa25>
jnp    1b94 <karlin_k+0xa34>
mov    %eax,%edi
mov    %ebp,%esi
call   1040 <a_gcd@plt>
movsd  0x8(%rsp),%xmm0
cmp    0x90(%rsp),%rbp
jge    1baa <karlin_k+0xa4a>
add    $0x1,%rbp
cmp    $0x1,%eax
mov    %rbx,%r10
jg     1b70 <karlin_k+0xa10>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  %xmm1,0x38(%rsp)
mulsd  0x469(%rip),%xmm0
call   1080 <exp@plt>
movsd  0x38(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rsp)
movapd 0x60(%rsp),%xmm0
xorpd  0x45e(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1080 <exp@plt>
movsd  0x415(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0x98(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x10(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%r14)
mov    %r13,%rdi
call   1030 <free@plt>
mov    $0x1,%eax
jmp    13c5 <karlin_k+0x265>

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

LLVM IR (-O2):
@stderr = global i32 0
@.str = [53 x i8] c" (karlin lambda) non-negative expected score: %.4lg\0A\00"
define i32 @karlin_k(i32 %0, i32 %1, double* nocapture %2, double* nocapture writeonly %3, double* nocapture writeonly %4, double* nocapture writeonly %5) {
%7 = sub nsw i32 %1, %0
%8 = icmp slt i32 %1, %0
br i1 %8, label %71, label %9
9: ; preds = %6
%10 = add i32 %1, 1
%11 = sub i32 %10, %0
%12 = sub i32 %1, %0
%13 = and i32 %11, 3
%14 = icmp eq i32 %13, 0
br i1 %14, label %27, label %15
15: ; preds = %9, %15
%16 = phi double* [ %21, %15 ], [ %2, %9 ]
%17 = phi double [ %23, %15 ], [ 0.000000e+00, %9 ]
%18 = phi i32 [ %24, %15 ], [ %0, %9 ]
%19 = phi i32 [ %25, %15 ], [ 0, %9 ]
%20 = sitofp i32 %18 to double
%21 = getelementptr inbounds double, double* %16, i64 1
%22 = load double, double* %16
%23 = tail call double @llvm.fmuladd.f64(double %20, double %22, double %17)
%24 = add i32 %18, 1
%25 = add i32 %19, 1
%26 = icmp eq i32 %25, %13
br i1 %26, label %27, label %15
27: ; preds = %15, %9
%28 = phi double [ undef, %9 ], [ %23, %15 ]
%29 = phi double* [ %2, %9 ], [ %21, %15 ]
%30 = phi double [ 0.000000e+00, %9 ], [ %23, %15 ]
%31 = phi i32 [ %0, %9 ], [ %24, %15 ]
%32 = icmp ult i32 %12, 3
br i1 %32, label %58, label %33
33: ; preds = %27, %33
%34 = phi double* [ %53, %33 ], [ %29, %27 ]
%35 = phi double [ %55, %33 ], [ %30, %27 ]
%36 = phi i32 [ %56, %33 ], [ %31, %27 ]
%37 = sitofp i32 %36 to double
%38 = getelementptr inbounds double, double* %34, i64 1
%39 = load double, double* %34
%40 = tail call double @llvm.fmuladd.f64(double %37, double %39, double %35)
%41 = add i32 %36, 1
%42 = sitofp i32 %41 to double
%43 = getelementptr inbounds double, double* %34, i64 2
%44 = load double, double* %38
%45 = tail call double @llvm.fmuladd.f64(double %42, double %44, double %40)
%46 = add i32 %36, 2
%47 = sitofp i32 %46 to double
%48 = getelementptr inbounds double, double* %34, i64 3
%49 = load double, double* %43
%50 = tail call double @llvm.fmuladd.f64(double %47, double %49, double %45)
%51 = add i32 %36, 3
%52 = sitofp i32 %51 to double
%53 = getelementptr inbounds double, double* %34, i64 4
%54 = load double, double* %48
%55 = tail call double @llvm.fmuladd.f64(double %52, double %54, double %50)
%56 = add i32 %36, 4
%57 = icmp eq i32 %51, %1
br i1 %57, label %58, label %33
58: ; preds = %33, %27
%59 = phi double [ %28, %27 ], [ %55, %33 ]
%60 = fcmp ult double %59, 0.000000e+00
br i1 %60, label %61, label %71
61: ; preds = %58
%62 = add nsw i32 %0, -1
%63 = sitofp i32 %62 to double
%64 = icmp slt i32 %7, 0
%65 = add i32 %1, 1
%66 = sub i32 %65, %0
%67 = and i32 %66, 3
%68 = icmp ult i32 %12, 3
%69 = and i32 %66, -4
%70 = icmp eq i32 %67, 0
br label %75
71: ; preds = %6, %58
%72 = phi double [ %59, %58 ], [ 0.000000e+00, %6 ]
%73 = load i32, i32* @stderr
%74 = tail call i32 @fprintf(i32 %73, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str, i64 0, i64 0), double %72)
br label %542
75: ; preds = %61, %121
%76 = phi double [ %77, %121 ], [ 5.000000e-01, %61 ]
%77 = fmul double %76, 2.000000e+00
%78 = tail call double @exp(double %77)
%79 = fmul double %77, %63
%80 = tail call double @exp(double %79)
br i1 %64, label %121, label %81
81: ; preds = %75
br i1 %68, label %105, label %82
82: ; preds = %81, %82
%83 = phi double* [ %99, %82 ], [ %2, %81 ]
%84 = phi double [ %101, %82 ], [ %80, %81 ]
%85 = phi double [ %102, %82 ], [ 0.000000e+00, %81 ]
%86 = phi i32 [ %103, %82 ], [ 0, %81 ]
%87 = getelementptr inbounds double, double* %83, i64 1
%88 = load double, double* %83
%89 = fmul double %78, %84
%90 = tail call double @llvm.fmuladd.f64(double %88, double %89, double %85)
%91 = getelementptr inbounds double, double* %83, i64 2
%92 = load double, double* %87
%93 = fmul double %78, %89
%94 = tail call double @llvm.fmuladd.f64(double %92, double %93, double %90)
%95 = getelementptr inbounds double, double* %83, i64 3
%96 = load double, double* %91
%97 = fmul double %78, %93
%98 = tail call double @llvm.fmuladd.f64(double %96, double %97, double %94)
%99 = getelementptr inbounds double, double* %83, i64 4
%100 = load double, double* %95
%101 = fmul double %78, %97
%102 = tail call double @llvm.fmuladd.f64(double %100, double %101, double %98)
%103 = add i32 %86, 4
%104 = icmp eq i32 %103, %69
br i1 %104, label %105, label %82
105: ; preds = %82, %81
%106 = phi double [ undef, %81 ], [ %102, %82 ]
%107 = phi double* [ %2, %81 ], [ %99, %82 ]
%108 = phi double [ %80, %81 ], [ %101, %82 ]
%109 = phi double [ 0.000000e+00, %81 ], [ %102, %82 ]
br i1 %70, label %121, label %110
110: ; preds = %105, %110
%111 = phi double* [ %115, %110 ], [ %107, %105 ]
%112 = phi double [ %117, %110 ], [ %108, %105 ]
%113 = phi double [ %118, %110 ], [ %109, %105 ]
%114 = phi i32 [ %119, %110 ], [ 0, %105 ]
%115 = getelementptr inbounds double, double* %111, i64 1
%116 = load double, double* %111
%117 = fmul double %78, %112
%118 = tail call double @llvm.fmuladd.f64(double %116, double %117, double %113)
%119 = add i32 %114, 1
%120 = icmp eq i32 %119, %67
br i1 %120, label %121, label %110
121: ; preds = %105, %110, %75
%122 = phi double [ 0.000000e+00, %75 ], [ %106, %105 ], [ %118, %110 ]
%123 = fcmp olt double %122, 1.000000e+00
br i1 %123, label %75, label %124
124: ; preds = %121
%125 = and i32 %66, 3
%126 = icmp ult i32 %12, 3
%127 = and i32 %66, -4
%128 = icmp eq i32 %125, 0
br label %129
129: ; preds = %124, %185
%130 = phi i32 [ %188, %185 ], [ 1, %124 ]
%131 = phi double [ %187, %185 ], [ 0.000000e+00, %124 ]
%132 = phi double [ %186, %185 ], [ %77, %124 ]
%133 = fadd double %132, %131
%134 = fmul double %133, 5.000000e-01
%135 = tail call double @exp(double %134)
%136 = fmul double %134, %63
%137 = tail call double @exp(double %136)
br i1 %64, label %181, label %138
138: ; preds = %129
br i1 %126, label %162, label %139
139: ; preds = %138, %139
%140 = phi double* [ %156, %139 ], [ %2, %138 ]
%141 = phi double [ %158, %139 ], [ %137, %138 ]
%142 = phi double [ %159, %139 ], [ 0.000000e+00, %138 ]
%143 = phi i32 [ %160, %139 ], [ 0, %138 ]
%144 = getelementptr inbounds double, double* %140, i64 1
%145 = load double, double* %140
%146 = fmul double %135, %141
%147 = tail call double @llvm.fmuladd.f64(double %145, double %146, double %142)
%148 = getelementptr inbounds double, double* %140, i64 2
%149 = load double, double* %144
%150 = fmul double %135, %146
%151 = tail call double @llvm.fmuladd.f64(double %149, double %150, double %147)
%152 = getelementptr inbounds double, double* %140, i64 3
%153 = load double, double* %148
%154 = fmul double %135, %150
%155 = tail call double @llvm.fmuladd.f64(double %153, double %154, double %151)
%156 = getelementptr inbounds double, double* %140, i64 4
%157 = load double, double* %152
%158 = fmul double %135, %154
%159 = tail call double @llvm.fmuladd.f64(double %157, double %158, double %155)
%160 = add i32 %143, 4
%161 = icmp eq i32 %160, %127
br i1 %161, label %162, label %139
162: ; preds = %139, %138
%163 = phi double [ undef, %138 ], [ %159, %139 ]
%164 = phi double* [ %2, %138 ], [ %156, %139 ]
%165 = phi double [ %137, %138 ], [ %158, %139 ]
%166 = phi double [ 0.000000e+00, %138 ], [ %159, %139 ]
br i1 %128, label %178, label %167
167: ; preds = %162, %167
%168 = phi double* [ %172, %167 ], [ %164, %162 ]
%169 = phi double [ %174, %167 ], [ %165, %162 ]
%170 = phi double [ %175, %167 ], [ %166, %162 ]
%171 = phi i32 [ %176, %167 ], [ 0, %162 ]
%172 = getelementptr inbounds double, double* %168, i64 1
%173 = load double, double* %168
%174 = fmul double %135, %169
%175 = tail call double @llvm.fmuladd.f64(double %173, double %174, double %170)
%176 = add i32 %171, 1
%177 = icmp eq i32 %176, %125
br i1 %177, label %178, label %167
178: ; preds = %167, %162
%179 = phi double [ %163, %162 ], [ %175, %167 ]
%180 = fcmp ogt double %179, 0x3FF000010C6F7A0B
br i1 %180, label %185, label %181
181: ; preds = %129, %178
%182 = fsub double %131, %134
%183 = tail call i32 @fabs(double %182)
%184 = icmp slt i32 %183, 1
br i1 %184, label %192, label %185
185: ; preds = %181, %178
%186 = phi double [ %134, %178 ], [ %132, %181 ]
%187 = phi double [ %131, %178 ], [ %134, %181 ]
%188 = add nuw nsw i32 %130, 1
%189 = icmp eq i32 %188, 26
br i1 %189, label %190, label %129
190: ; preds = %185
%191 = fcmp ugt double %187, 1.000000e-10
br i1 %191, label %192, label %542
192: ; preds = %181, %190
%193 = phi double [ %187, %190 ], [ %131, %181 ]
store double %193, double* %3
%194 = fmul double %193, %63
%195 = tail call double @exp(double %194)
br i1 %8, label %234, label %196
196: ; preds = %192
%197 = and i32 %66, 1
%198 = icmp eq i32 %197, 0
br i1 %198, label %207, label %199
199: ; preds = %196
%200 = getelementptr inbounds double, double* %2, i64 1
%201 = load double, double* %2
%202 = sitofp i32 %0 to double
%203 = fmul double %201, %202
%204 = fmul double %135, %195
%205 = tail call double @llvm.fmuladd.f64(double %203, double %204, double 0.000000e+00)
%206 = add i32 %0, 1
br label %207
207: ; preds = %199, %196
%208 = phi double [ undef, %196 ], [ %205, %199 ]
%209 = phi double* [ %2, %196 ], [ %200, %199 ]
%210 = phi double [ %195, %196 ], [ %204, %199 ]
%211 = phi double [ 0.000000e+00, %196 ], [ %205, %199 ]
%212 = phi i32 [ %0, %196 ], [ %206, %199 ]
%213 = icmp eq i32 %12, 0
br i1 %213, label %234, label %214
214: ; preds = %207, %214
%215 = phi double* [ %226, %214 ], [ %209, %207 ]
%216 = phi double [ %230, %214 ], [ %210, %207 ]
%217 = phi double [ %231, %214 ], [ %211, %207 ]
%218 = phi i32 [ %232, %214 ], [ %212, %207 ]
%219 = getelementptr inbounds double, double* %215, i64 1
%220 = load double, double* %215
%221 = sitofp i32 %218 to double
%222 = fmul double %220, %221
%223 = fmul double %135, %216
%224 = tail call double @llvm.fmuladd.f64(double %222, double %223, double %217)
%225 = add i32 %218, 1
%226 = getelementptr inbounds double, double* %215, i64 2
%227 = load double, double* %219
%228 = sitofp i32 %225 to double
%229 = fmul double %227, %228
%230 = fmul double %135, %223
%231 = tail call double @llvm.fmuladd.f64(double %229, double %230, double %224)
%232 = add i32 %218, 2
%233 = icmp eq i32 %225, %1
br i1 %233, label %234, label %214
234: ; preds = %207, %214, %192
%235 = phi double [ 0.000000e+00, %192 ], [ %208, %207 ], [ %231, %214 ]
%236 = fmul double %193, %235
store double %236, double* %5
%237 = mul nsw i32 %7, 25
%238 = add nsw i32 %237, 1
%239 = tail call i64 @calloc(i32 %238, i32 8)
%240 = inttoptr i64 %239 to double*
store double 1.000000e+00, double* %240
%241 = sext i32 %7 to i64
%242 = sext i32 %1 to i64
%243 = sext i32 %0 to i64
%244 = xor i32 %0, -1
br label %263
245: ; preds = %469
%246 = fdiv double %470, %268
%247 = icmp ult i32 %270, 200
br i1 %247, label %248, label %480
248: ; preds = %245
%249 = and i32 %270, 1
%250 = icmp eq i32 %249, 0
br i1 %250, label %257, label %251
251: ; preds = %248
%252 = fmul double %246, %470
%253 = add nuw nsw i32 %270, 2
%254 = sitofp i32 %471 to double
%255 = fdiv double %252, %254
%256 = fadd double %474, %255
br label %257
257: ; preds = %251, %248
%258 = phi double [ undef, %248 ], [ %256, %251 ]
%259 = phi double [ %470, %248 ], [ %252, %251 ]
%260 = phi double [ %474, %248 ], [ %256, %251 ]
%261 = phi i32 [ %471, %248 ], [ %253, %251 ]
%262 = icmp eq i32 %270, 199
br i1 %262, label %480, label %482
263: ; preds = %234, %469
%264 = phi i32 [ 0, %234 ], [ %479, %469 ]
%265 = phi i64 [ 0, %234 ], [ %279, %469 ]
%266 = phi i64 [ 0, %234 ], [ %277, %469 ]
%267 = phi i32 [ %65, %234 ], [ %478, %469 ]
%268 = phi double [ 1.000000e+00, %234 ], [ %470, %469 ]
%269 = phi double [ 0.000000e+00, %234 ], [ %474, %469 ]
%270 = phi i32 [ 1, %234 ], [ %471, %469 ]
%271 = mul i32 %264, %1
%272 = add i32 %271, %1
%273 = mul i32 %264, %0
%274 = add i32 %273, %0
%275 = sub i32 0, %274
%276 = sub i32 %244, %273
%277 = add nsw i64 %266, %242
%278 = getelementptr inbounds double, double* %240, i64 %277
%279 = add nsw i64 %265, %243
%280 = sub nsw i64 0, %279
%281 = getelementptr inbounds double, double* %278, i64 %280
%282 = icmp ult double* %281, %240
br i1 %282, label %360, label %283
283: ; preds = %263, %347
%284 = phi double* [ %358, %347 ], [ %281, %263 ]
%285 = phi i32 [ %357, %347 ], [ %7, %263 ]
%286 = phi i32 [ %351, %347 ], [ %7, %263 ]
%287 = sext i32 %286 to i64
%288 = icmp slt i32 %285, %286
br i1 %288, label %347, label %289
289: ; preds = %283
%290 = getelementptr inbounds double, double* %2, i64 %287
%291 = sub nsw i64 0, %287
%292 = getelementptr inbounds double, double* %284, i64 %291
%293 = add i32 %285, 1
%294 = sub i32 %293, %286
%295 = sub i32 %285, %286
%296 = and i32 %294, 3
%297 = icmp eq i32 %296, 0
br i1 %297, label %312, label %298
298: ; preds = %289, %298
%299 = phi double* [ %304, %298 ], [ %292, %289 ]
%300 = phi double* [ %306, %298 ], [ %290, %289 ]
%301 = phi double [ %308, %298 ], [ 0.000000e+00, %289 ]
%302 = phi i32 [ %309, %298 ], [ %286, %289 ]
%303 = phi i32 [ %310, %298 ], [ 0, %289 ]
%304 = getelementptr inbounds double, double* %299, i64 -1
%305 = load double, double* %299
%306 = getelementptr inbounds double, double* %300, i64 1
%307 = load double, double* %300
%308 = tail call double @llvm.fmuladd.f64(double %305, double %307, double %301)
%309 = add i32 %302, 1
%310 = add i32 %303, 1
%311 = icmp eq i32 %310, %296
br i1 %311, label %312, label %298
312: ; preds = %298, %289
%313 = phi double [ undef, %289 ], [ %308, %298 ]
%314 = phi double* [ %292, %289 ], [ %304, %298 ]
%315 = phi double* [ %290, %289 ], [ %306, %298 ]
%316 = phi double [ 0.000000e+00, %289 ], [ %308, %298 ]
%317 = phi i32 [ %286, %289 ], [ %309, %298 ]
%318 = icmp ult i32 %295, 3
br i1 %318, label %347, label %319
319: ; preds = %312, %319
%320 = phi double* [ %340, %319 ], [ %314, %312 ]
%321 = phi double* [ %342, %319 ], [ %315, %312 ]
%322 = phi double [ %344, %319 ], [ %316, %312 ]
%323 = phi i32 [ %345, %319 ], [ %317, %312 ]
%324 = getelementptr inbounds double, double* %320, i64 -1
%325 = load double, double* %320
%326 = getelementptr inbounds double, double* %321, i64 1
%327 = load double, double* %321
%328 = tail call double @llvm.fmuladd.f64(double %325, double %327, double %322)
%329 = getelementptr inbounds double, double* %320, i64 -2
%330 = load double, double* %324
%331 = getelementptr inbounds double, double* %321, i64 2
%332 = load double, double* %326
%333 = tail call double @llvm.fmuladd.f64(double %330, double %332, double %328)
%334 = getelementptr inbounds double, double* %320, i64 -3
%335 = load double, double* %329
%336 = getelementptr inbounds double, double* %321, i64 3
%337 = load double, double* %331
%338 = tail call double @llvm.fmuladd.f64(double %335, double %337, double %333)
%339 = add i32 %323, 3
%340 = getelementptr inbounds double, double* %320, i64 -4
%341 = load double, double* %334
%342 = getelementptr inbounds double, double* %321, i64 4
%343 = load double, double* %336
%344 = tail call double @llvm.fmuladd.f64(double %341, double %343, double %338)
%345 = add i32 %323, 4
%346 = icmp eq i32 %339, %285
br i1 %346, label %347, label %319
347: ; preds = %312, %319, %283
%348 = phi double [ 0.000000e+00, %283 ], [ %313, %312 ], [ %344, %319 ]
%349 = icmp eq i32 %286, 0
%350 = add nsw i32 %286, -1
%351 = select i1 %349, i32 0, i32 %350
%352 = ptrtoint double* %284 to i64
%353 = sub i64 %352, %239
%354 = ashr exact i64 %353, 3
%355 = icmp sle i64 %354, %241
%356 = sext i1 %355 to i32
%357 = add nsw i32 %285, %356
%358 = getelementptr inbounds double, double* %284, i64 -1
store double %348, double* %284
%359 = icmp ult double* %358, %240
br i1 %359, label %360, label %283
360: ; preds = %347, %263
%361 = phi double* [ %281, %263 ], [ %358, %347 ]
%362 = trunc i64 %279 to i32
%363 = add i32 %362, -1
%364 = sitofp i32 %363 to double
%365 = fmul double %193, %364
%366 = tail call double @exp(double %365)
%367 = trunc i64 %279 to i32
%368 = icmp eq i32 %367, 0
br i1 %368, label %393, label %369
369: ; preds = %360
%370 = and i32 %275, 3
%371 = icmp eq i32 %370, 0
br i1 %371, label %385, label %372
372: ; preds = %369, %372
%373 = phi double* [ %378, %372 ], [ %361, %369 ]
%374 = phi double [ %380, %372 ], [ %366, %369 ]
%375 = phi double [ %381, %372 ], [ 0.000000e+00, %369 ]
%376 = phi i32 [ %382, %372 ], [ %367, %369 ]
%377 = phi i32 [ %383, %372 ], [ 0, %369 ]
%378 = getelementptr inbounds double, double* %373, i64 1
%379 = load double, double* %378
%380 = fmul double %135, %374
%381 = tail call double @llvm.fmuladd.f64(double %379, double %380, double %375)
%382 = add nsw i32 %376, 1
%383 = add i32 %377, 1
%384 = icmp eq i32 %383, %370
br i1 %384, label %385, label %372
385: ; preds = %372, %369
%386 = phi double* [ undef, %369 ], [ %378, %372 ]
%387 = phi double [ undef, %369 ], [ %381, %372 ]
%388 = phi double* [ %361, %369 ], [ %378, %372 ]
%389 = phi double [ %366, %369 ], [ %380, %372 ]
%390 = phi double [ 0.000000e+00, %369 ], [ %381, %372 ]
%391 = phi i32 [ %367, %369 ], [ %382, %372 ]
%392 = icmp ult i32 %276, 3
br i1 %392, label %393, label %402
393: ; preds = %385, %402, %360
%394 = phi double [ 0.000000e+00, %360 ], [ %387, %385 ], [ %422, %402 ]
%395 = phi double* [ %361, %360 ], [ %386, %385 ], [ %419, %402 ]
%396 = icmp slt i64 %277, 0
br i1 %396, label %469, label %397
397: ; preds = %393
%398 = and i32 %267, 7
%399 = icmp ult i32 %272, 7
br i1 %399, label %455, label %400
400: ; preds = %397
%401 = and i32 %267, -8
br label %425
402: ; preds = %385, %402
%403 = phi double* [ %419, %402 ], [ %388, %385 ]
%404 = phi double [ %421, %402 ], [ %389, %385 ]
%405 = phi double [ %422, %402 ], [ %390, %385 ]
%406 = phi i32 [ %423, %402 ], [ %391, %385 ]
%407 = getelementptr inbounds double, double* %403, i64 1
%408 = load double, double* %407
%409 = fmul double %135, %404
%410 = tail call double @llvm.fmuladd.f64(double %408, double %409, double %405)
%411 = getelementptr inbounds double, double* %403, i64 2
%412 = load double, double* %411
%413 = fmul double %135, %409
%414 = tail call double @llvm.fmuladd.f64(double %412, double %413, double %410)
%415 = getelementptr inbounds double, double* %403, i64 3
%416 = load double, double* %415
%417 = fmul double %135, %413
%418 = tail call double @llvm.fmuladd.f64(double %416, double %417, double %414)
%419 = getelementptr inbounds double, double* %403, i64 4
%420 = load double, double* %419
%421 = fmul double %135, %417
%422 = tail call double @llvm.fmuladd.f64(double %420, double %421, double %418)
%423 = add nsw i32 %406, 4
%424 = icmp eq i32 %423, 0
br i1 %424, label %393, label %402
425: ; preds = %425, %400
%426 = phi double* [ %395, %400 ], [ %450, %425 ]
%427 = phi double [ %394, %400 ], [ %452, %425 ]
%428 = phi i32 [ 0, %400 ], [ %453, %425 ]
%429 = getelementptr inbounds double, double* %426, i64 1
%430 = load double, double* %429
%431 = fadd double %427, %430
%432 = getelementptr inbounds double, double* %426, i64 2
%433 = load double, double* %432
%434 = fadd double %431, %433
%435 = getelementptr inbounds double, double* %426, i64 3
%436 = load double, double* %435
%437 = fadd double %434, %436
%438 = getelementptr inbounds double, double* %426, i64 4
%439 = load double, double* %438
%440 = fadd double %437, %439
%441 = getelementptr inbounds double, double* %426, i64 5
%442 = load double, double* %441
%443 = fadd double %440, %442
%444 = getelementptr inbounds double, double* %426, i64 6
%445 = load double, double* %444
%446 = fadd double %443, %445
%447 = getelementptr inbounds double, double* %426, i64 7
%448 = load double, double* %447
%449 = fadd double %446, %448
%450 = getelementptr inbounds double, double* %426, i64 8
%451 = load double, double* %450
%452 = fadd double %449, %451
%453 = add i32 %428, 8
%454 = icmp eq i32 %453, %401
br i1 %454, label %455, label %425
455: ; preds = %425, %397
%456 = phi double [ undef, %397 ], [ %452, %425 ]
%457 = phi double* [ %395, %397 ], [ %450, %425 ]
%458 = phi double [ %394, %397 ], [ %452, %425 ]
%459 = icmp eq i32 %398, 0
br i1 %459, label %469, label %460
460: ; preds = %455, %460
%461 = phi double* [ %464, %460 ], [ %457, %455 ]
%462 = phi double [ %466, %460 ], [ %458, %455 ]
%463 = phi i32 [ %467, %460 ], [ 0, %455 ]
%464 = getelementptr inbounds double, double* %461, i64 1
%465 = load double, double* %464
%466 = fadd double %462, %465
%467 = add i32 %463, 1
%468 = icmp eq i32 %467, %398
br i1 %468, label %469, label %460
469: ; preds = %455, %460, %393
%470 = phi double [ %394, %393 ], [ %456, %455 ], [ %466, %460 ]
%471 = add nuw nsw i32 %270, 1
%472 = sitofp i32 %270 to double
%473 = fdiv double %470, %472
%474 = fadd double %269, %473
%475 = icmp ult i32 %270, 25
%476 = fcmp ogt double %473, 1.000000e-03
%477 = select i1 %475, i1 %476, i1 false
%478 = add i32 %267, %1
%479 = add i32 %264, 1
br i1 %477, label %263, label %245
480: ; preds = %257, %482, %245
%481 = phi double [ %474, %245 ], [ %258, %257 ], [ %495, %482 ]
br label %497
482: ; preds = %257, %482
%483 = phi double [ %491, %482 ], [ %259, %257 ]
%484 = phi double [ %495, %482 ], [ %260, %257 ]
%485 = phi i32 [ %492, %482 ], [ %261, %257 ]
%486 = fmul double %246, %483
%487 = add nuw nsw i32 %485, 1
%488 = sitofp i32 %485 to double
%489 = fdiv double %486, %488
%490 = fadd double %484, %489
%491 = fmul double %246, %486
%492 = add nuw nsw i32 %485, 2
%493 = sitofp i32 %487 to double
%494 = fdiv double %491, %493
%495 = fadd double %490, %494
%496 = icmp eq i32 %492, 201
br i1 %496, label %480, label %482
497: ; preds = %497, %480
%498 = phi i64 [ %503, %497 ], [ %243, %480 ]
%499 = sub nsw i64 %498, %243
%500 = getelementptr inbounds double, double* %2, i64 %499
%501 = load double, double* %500
%502 = fcmp oeq double %501, 0.000000e+00
%503 = add i64 %498, 1
br i1 %502, label %497, label %504
504: ; preds = %497
%505 = trunc i64 %498 to i32
%506 = sub nsw i32 0, %505
%507 = icmp slt i32 %505, %1
%508 = icmp slt i32 %505, -1
%509 = and i1 %507, %508
br i1 %509, label %510, label %529
510: ; preds = %504
%511 = shl i64 %498, 32
%512 = ashr exact i64 %511, 32
br label %513
513: ; preds = %510, %524
%514 = phi i64 [ %512, %510 ], [ %516, %524 ]
%515 = phi i32 [ %506, %510 ], [ %525, %524 ]
%516 = add nsw i64 %514, 1
%517 = sub nsw i64 %516, %243
%518 = getelementptr inbounds double, double* %2, i64 %517
%519 = load double, double* %518
%520 = fcmp une double %519, 0.000000e+00
br i1 %520, label %521, label %524
521: ; preds = %513
%522 = trunc i64 %516 to i32
%523 = tail call i32 @a_gcd(i32 %515, i32 %522)
br label %524
524: ; preds = %521, %513
%525 = phi i32 [ %523, %521 ], [ %515, %513 ]
%526 = icmp slt i64 %516, %242
%527 = icmp sgt i32 %525, 1
%528 = select i1 %526, i1 %527, i1 false
br i1 %528, label %513, label %529
529: ; preds = %524, %504
%530 = phi i32 [ %506, %504 ], [ %525, %524 ]
%531 = sitofp i32 %530 to double
%532 = fmul double %481, -2.000000e+00
%533 = tail call double @exp(double %532)
%534 = fmul double %533, %531
%535 = fneg double %193
%536 = fmul double %535, %531
%537 = tail call double @exp(double %536)
%538 = fsub double 1.000000e+00, %537
%539 = fmul double %235, %538
%540 = fdiv double %534, %539
store double %540, double* %4
%541 = tail call i32 @free(double* %240)
br label %542
542: ; preds = %190, %529, %71
%543 = phi i32 [ 0, %71 ], [ 1, %529 ], [ 0, %190 ]
ret i32 %543
}