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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double fmin(double, double);
int odsq5_(int *i0, int *n0, double *z__, int *pp, double *tau, double *dmin__,
           double *dmin1, double *dmin2, double *dn, double *dnm1, double *dnm2,
           int *ieee) {
  int i__1;
  double d__1, d__2;
  double d__;
  int j4, j4p2;
  double emin, temp;
  --z__;
  if (*n0 - *i0 - 1 <= 0) {
    return 0;
  }
  j4 = (*i0 << 2) + *pp - 3;
  emin = z__[j4 + 4];
  d__ = z__[j4] - *tau;
  *dmin__ = d__;
  *dmin1 = -z__[j4];
  if (*ieee) {
    if (*pp == 0) {
      i__1 = *n0 - 3 << 2;
      for (j4 = *i0 << 2; j4 <= i__1; j4 += 4) {
        z__[j4 - 2] = d__ + z__[j4 - 1];
        temp = z__[j4 + 1] / z__[j4 - 2];
        d__ = d__ * temp - *tau;
        *dmin__ = fmin(*dmin__, d__);
        z__[j4] = z__[j4 - 1] * temp;
        d__1 = z__[j4];
        emin = fmin(d__1, emin);
      }
    } else {
      i__1 = *n0 - 3 << 2;
      for (j4 = *i0 << 2; j4 <= i__1; j4 += 4) {
        z__[j4 - 3] = d__ + z__[j4];
        temp = z__[j4 + 2] / z__[j4 - 3];
        d__ = d__ * temp - *tau;
        *dmin__ = fmin(*dmin__, d__);
        z__[j4 - 1] = z__[j4] * temp;
        d__1 = z__[j4 - 1];
        emin = fmin(d__1, emin);
      }
    }
    *dnm2 = d__;
    *dmin2 = *dmin__;
    j4 = (*n0 - 2 << 2) - *pp;
    j4p2 = j4 + (*pp << 1) - 1;
    z__[j4 - 2] = *dnm2 + z__[j4p2];
    z__[j4] = z__[j4p2 + 2] * (z__[j4p2] / z__[j4 - 2]);
    *dnm1 = z__[j4p2 + 2] * (*dnm2 / z__[j4 - 2]) - *tau;
    *dmin__ = fmin(*dmin__, *dnm1);
    *dmin1 = *dmin__;
    j4 += 4;
    j4p2 = j4 + (*pp << 1) - 1;
    z__[j4 - 2] = *dnm1 + z__[j4p2];
    z__[j4] = z__[j4p2 + 2] * (z__[j4p2] / z__[j4 - 2]);
    *dn = z__[j4p2 + 2] * (*dnm1 / z__[j4 - 2]) - *tau;
    *dmin__ = fmin(*dmin__, *dn);
  } else {
    if (*pp == 0) {
      i__1 = *n0 - 3 << 2;
      for (j4 = *i0 << 2; j4 <= i__1; j4 += 4) {
        z__[j4 - 2] = d__ + z__[j4 - 1];
        if (d__ < 0.) {
          return 0;
        } else {
          z__[j4] = z__[j4 + 1] * (z__[j4 - 1] / z__[j4 - 2]);
          d__ = z__[j4 + 1] * (d__ / z__[j4 - 2]) - *tau;
        }
        *dmin__ = fmin(*dmin__, d__);
        d__1 = emin, d__2 = z__[j4];
        emin = fmin(d__1, d__2);
      }
    } else {
      i__1 = *n0 - 3 << 2;
      for (j4 = *i0 << 2; j4 <= i__1; j4 += 4) {
        z__[j4 - 3] = d__ + z__[j4];
        if (d__ < 0.) {
          return 0;
        } else {
          z__[j4 - 1] = z__[j4 + 2] * (z__[j4] / z__[j4 - 3]);
          d__ = z__[j4 + 2] * (d__ / z__[j4 - 3]) - *tau;
        }
        *dmin__ = fmin(*dmin__, d__);
        d__1 = emin, d__2 = z__[j4 - 1];
        emin = fmin(d__1, d__2);
      }
    }
    *dnm2 = d__;
    *dmin2 = *dmin__;
    j4 = (*n0 - 2 << 2) - *pp;
    j4p2 = j4 + (*pp << 1) - 1;
    z__[j4 - 2] = *dnm2 + z__[j4p2];
    if (*dnm2 < 0.) {
      return 0;
    } else {
      z__[j4] = z__[j4p2 + 2] * (z__[j4p2] / z__[j4 - 2]);
      *dnm1 = z__[j4p2 + 2] * (*dnm2 / z__[j4 - 2]) - *tau;
    }
    *dmin__ = fmin(*dmin__, *dnm1);
    *dmin1 = *dmin__;
    j4 += 4;
    j4p2 = j4 + (*pp << 1) - 1;
    z__[j4 - 2] = *dnm1 + z__[j4p2];
    if (*dnm1 < 0.) {
      return 0;
    } else {
      z__[j4] = z__[j4p2 + 2] * (z__[j4p2] / z__[j4 - 2]);
      *dn = z__[j4p2 + 2] * (*dnm1 / z__[j4 - 2]) - *tau;
    }
    *dmin__ = fmin(*dmin__, *dn);
  }
  z__[j4 + 2] = *dn;
  z__[(*n0 << 2) - *pp] = emin;
  return 0;
}


x86 assembly (clang, -O0):
<odsq5_>:
push   %rbp
mov    %rsp,%rbp
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
sub    (%rcx),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jg     1164 <odsq5_+0x64>
movl   $0x0,-0x4(%rbp)
jmp    1d32 <odsq5_+0xc32>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
shl    $0x2,%eax
mov    -0x28(%rbp),%rcx
add    (%rcx),%eax
sub    $0x3,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x38(%rbp),%rax
cmpl   $0x0,(%rax)
je     1719 <odsq5_+0x619>
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1355 <odsq5_+0x255>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
sub    $0x3,%eax
shl    $0x2,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
shl    $0x2,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1350 <odsq5_+0x250>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm3
movsd  -0x58(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm3
movsd  -0x68(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x5c(%rbp)
jmp    1218 <odsq5_+0x118>
jmp    14ad <odsq5_+0x3ad>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
sub    $0x3,%eax
shl    $0x2,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
shl    $0x2,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     14a8 <odsq5_+0x3a8>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm3
movsd  -0x58(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm3
movsd  -0x68(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x5c(%rbp)
jmp    1370 <odsq5_+0x270>
jmp    14ad <odsq5_+0x3ad>
movsd  -0x58(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
sub    $0x2,%eax
shl    $0x2,%eax
mov    -0x28(%rbp),%rcx
sub    (%rcx),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    -0x28(%rbp),%rcx
mov    (%rcx),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
sub    $0x1,%eax
mov    %eax,-0x60(%rbp)
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x60(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm3
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x5c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    -0x28(%rbp),%rcx
mov    (%rcx),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
sub    $0x1,%eax
mov    %eax,-0x60(%rbp)
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x60(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm3
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1cf1 <odsq5_+0xbf1>
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jne    18bb <odsq5_+0x7bb>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
sub    $0x3,%eax
shl    $0x2,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
shl    $0x2,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     18b6 <odsq5_+0x7b6>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
xorps  %xmm0,%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    1790 <odsq5_+0x690>
movl   $0x0,-0x4(%rbp)
jmp    1d32 <odsq5_+0xc32>
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x58(%rbp),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm3
movsd  -0x58(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm3
movsd  -0x50(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x5c(%rbp)
jmp    1741 <odsq5_+0x641>
jmp    1a50 <odsq5_+0x950>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
sub    $0x3,%eax
shl    $0x2,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
shl    $0x2,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1a4b <odsq5_+0x94b>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
xorps  %xmm0,%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    1920 <odsq5_+0x820>
movl   $0x0,-0x4(%rbp)
jmp    1d32 <odsq5_+0xc32>
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x58(%rbp),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm3
movsd  -0x58(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm3
movsd  -0x50(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x5c(%rbp)
jmp    18d6 <odsq5_+0x7d6>
jmp    1a50 <odsq5_+0x950>
movsd  -0x58(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
sub    $0x2,%eax
shl    $0x2,%eax
mov    -0x28(%rbp),%rcx
sub    (%rcx),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    -0x28(%rbp),%rcx
mov    (%rcx),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
sub    $0x1,%eax
mov    %eax,-0x60(%rbp)
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x60(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x30(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
jbe    1ada <odsq5_+0x9da>
movl   $0x0,-0x4(%rbp)
jmp    1d32 <odsq5_+0xc32>
mov    -0x20(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm3
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x5c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    -0x28(%rbp),%rcx
mov    (%rcx),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
sub    $0x1,%eax
mov    %eax,-0x60(%rbp)
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x60(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x28(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
jbe    1c1e <odsq5_+0xb1e>
movl   $0x0,-0x4(%rbp)
jmp    1d32 <odsq5_+0xc32>
mov    -0x20(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
divsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm3
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
minsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rcx),%ecx
shl    $0x2,%ecx
mov    -0x28(%rbp),%rdx
sub    (%rdx),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<odsq5_>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    (%rsi),%ebx
mov    (%rdi),%edi
mov    %edi,%eax
not    %eax
add    %ebx,%eax
test   %eax,%eax
jle    1585 <odsq5_+0x485>
mov    0x58(%rsp),%rbp
mov    0x50(%rsp),%r15
mov    0x48(%rsp),%r11
mov    0x38(%rsp),%r14
mov    0x30(%rsp),%r10
lea    -0x8(%rdx),%rax
mov    (%rcx),%ecx
mov    %edi,%esi
shl    $0x2,%edi
lea    (%rcx,%rsi,4),%esi
movslq %esi,%rsi
movsd  -0x18(%rax,%rsi,8),%xmm1
movsd  0x8(%rax,%rsi,8),%xmm2
subsd  (%r8),%xmm1
movsd  %xmm1,(%r9)
movsd  -0x18(%rax,%rsi,8),%xmm0
xorpd  0xe98(%rip),%xmm0
movlpd %xmm0,(%r10)
lea    0x0(,%rbx,4),%r12d
cmpl   $0x0,0x0(%rbp)
lea    -0xc(,%rbx,4),%ebp
je     1225 <odsq5_+0x125>
test   %ecx,%ecx
je     12dc <odsq5_+0x1dc>
cmp    %ebp,%edi
jg     12e4 <odsq5_+0x1e4>
movslq %edi,%rdi
movslq %ebp,%rbx
nopl   0x0(%rax)
movsd  -0x8(%rdx,%rdi,8),%xmm3
addsd  %xmm1,%xmm3
movsd  %xmm3,-0x20(%rdx,%rdi,8)
movsd  0x8(%rdx,%rdi,8),%xmm0
divsd  %xmm3,%xmm0
mulsd  %xmm0,%xmm1
subsd  (%r8),%xmm1
movsd  (%r9),%xmm3
movapd %xmm1,%xmm4
minsd  %xmm3,%xmm4
cmpunordsd %xmm3,%xmm3
movapd %xmm3,%xmm5
andpd  %xmm1,%xmm5
andnpd %xmm4,%xmm3
orpd   %xmm5,%xmm3
movlpd %xmm3,(%r9)
mulsd  -0x8(%rdx,%rdi,8),%xmm0
movsd  %xmm0,-0x10(%rdx,%rdi,8)
movapd %xmm2,%xmm3
minsd  %xmm0,%xmm3
cmpunordsd %xmm0,%xmm0
movapd %xmm0,%xmm4
andnpd %xmm3,%xmm4
andpd  %xmm2,%xmm0
orpd   %xmm4,%xmm0
add    $0x4,%rdi
movapd %xmm0,%xmm2
cmp    %rbx,%rdi
jle    11a0 <odsq5_+0xa0>
jmp    145f <odsq5_+0x35f>
test   %ecx,%ecx
je     12ed <odsq5_+0x1ed>
cmp    %ebp,%edi
jg     12f5 <odsq5_+0x1f5>
movslq %edi,%rbx
movslq %ebp,%rdi
xorpd  %xmm3,%xmm3
nop
movsd  -0x8(%rdx,%rbx,8),%xmm4
movapd %xmm1,%xmm0
addsd  %xmm4,%xmm0
movsd  %xmm0,-0x20(%rdx,%rbx,8)
ucomisd %xmm1,%xmm3
ja     1585 <odsq5_+0x485>
movsd  0x8(%rdx,%rbx,8),%xmm5
divsd  %xmm0,%xmm4
mulsd  %xmm5,%xmm4
movsd  %xmm4,-0x10(%rdx,%rbx,8)
divsd  %xmm0,%xmm1
mulsd  %xmm5,%xmm1
subsd  (%r8),%xmm1
movsd  (%r9),%xmm0
movapd %xmm1,%xmm4
minsd  %xmm0,%xmm4
cmpunordsd %xmm0,%xmm0
movapd %xmm0,%xmm5
andpd  %xmm1,%xmm5
andnpd %xmm4,%xmm0
orpd   %xmm5,%xmm0
movlpd %xmm0,(%r9)
movsd  -0x10(%rdx,%rbx,8),%xmm4
movapd %xmm2,%xmm0
cmpunordsd %xmm2,%xmm0
movapd %xmm0,%xmm5
andpd  %xmm4,%xmm5
minsd  %xmm2,%xmm4
andnpd %xmm4,%xmm0
orpd   %xmm5,%xmm0
add    $0x4,%rbx
movapd %xmm0,%xmm2
cmp    %rdi,%rbx
jle    1240 <odsq5_+0x140>
jmp    12f9 <odsq5_+0x1f9>
cmp    %ebp,%edi
jle    13cf <odsq5_+0x2cf>
movapd %xmm2,%xmm0
jmp    145f <odsq5_+0x35f>
cmp    %ebp,%edi
jle    1590 <odsq5_+0x490>
movapd %xmm2,%xmm0
movsd  %xmm1,(%r15)
movsd  (%r9),%xmm1
movsd  %xmm1,(%r14)
mov    %r12d,%edx
sub    %ecx,%edx
lea    (%rdx,%rcx,2),%esi
add    $0xfffffff8,%esi
add    $0xfffffff8,%edx
movslq %esi,%rbp
movsd  (%r15),%xmm1
addsd  -0x8(%rax,%rbp,8),%xmm1
movslq %edx,%rdi
movsd  %xmm1,-0x10(%rax,%rdi,8)
xorpd  %xmm2,%xmm2
ucomisd (%r15),%xmm2
ja     1585 <odsq5_+0x485>
lea    (%rcx,%rcx,1),%ebx
lea    -0x1(%rbp),%rsi
movsd  (%rax,%rsi,8),%xmm3
divsd  %xmm1,%xmm3
mulsd  0x8(%rax,%rbp,8),%xmm3
movsd  %xmm3,(%rax,%rdi,8)
movsd  (%r15),%xmm3
divsd  %xmm1,%xmm3
mulsd  0x8(%rax,%rbp,8),%xmm3
subsd  (%r8),%xmm3
movsd  %xmm3,(%r11)
movsd  (%r9),%xmm1
movapd %xmm1,%xmm4
cmpunordsd %xmm1,%xmm4
movapd %xmm4,%xmm5
andpd  %xmm3,%xmm5
minsd  %xmm1,%xmm3
andnpd %xmm3,%xmm4
orpd   %xmm5,%xmm4
movlpd %xmm4,(%r9)
movlpd %xmm4,(%r10)
lea    0x4(%rdx,%rbx,1),%ebx
movsd  (%r11),%xmm1
movslq %ebx,%rbp
addsd  -0x8(%rax,%rbp,8),%xmm1
movsd  %xmm1,0x10(%rax,%rdi,8)
ucomisd (%r11),%xmm2
ja     1585 <odsq5_+0x485>
add    $0x4,%edx
lea    (%rax,%rbp,8),%rbp
add    $0xfffffffffffffff8,%rbp
jmp    1512 <odsq5_+0x412>
movslq %edi,%rdi
movslq %ebp,%rbx
cs nopw 0x0(%rax,%rax,1)
nop
movsd  -0x10(%rdx,%rdi,8),%xmm3
addsd  %xmm1,%xmm3
movsd  %xmm3,-0x18(%rdx,%rdi,8)
movsd  (%rdx,%rdi,8),%xmm0
divsd  %xmm3,%xmm0
mulsd  %xmm0,%xmm1
subsd  (%r8),%xmm1
movsd  (%r9),%xmm3
movapd %xmm1,%xmm4
minsd  %xmm3,%xmm4
cmpunordsd %xmm3,%xmm3
movapd %xmm3,%xmm5
andpd  %xmm1,%xmm5
andnpd %xmm4,%xmm3
orpd   %xmm5,%xmm3
movlpd %xmm3,(%r9)
mulsd  -0x10(%rdx,%rdi,8),%xmm0
movsd  %xmm0,-0x8(%rdx,%rdi,8)
movapd %xmm2,%xmm3
minsd  %xmm0,%xmm3
cmpunordsd %xmm0,%xmm0
movapd %xmm0,%xmm4
andnpd %xmm3,%xmm4
andpd  %xmm2,%xmm0
orpd   %xmm4,%xmm0
add    $0x4,%rdi
movapd %xmm0,%xmm2
cmp    %rbx,%rdi
jle    13e0 <odsq5_+0x2e0>
movsd  %xmm1,(%r15)
movsd  (%r9),%xmm1
movsd  %xmm1,(%r14)
mov    %r12d,%edx
sub    %ecx,%edx
lea    (%rdx,%rcx,2),%edi
add    $0xfffffff8,%edi
movsd  (%r15),%xmm1
movslq %edi,%rbx
addsd  -0x8(%rax,%rbx,8),%xmm1
lea    -0x8(%rdx),%edi
movslq %edi,%rdi
movsd  %xmm1,-0x10(%rax,%rdi,8)
movsd  -0x8(%rax,%rbx,8),%xmm2
divsd  %xmm1,%xmm2
mulsd  0x8(%rax,%rbx,8),%xmm2
movsd  %xmm2,(%rax,%rdi,8)
movsd  (%r15),%xmm2
divsd  %xmm1,%xmm2
mulsd  0x8(%rax,%rbx,8),%xmm2
subsd  (%r8),%xmm2
movsd  %xmm2,(%r11)
movsd  (%r9),%xmm1
movapd %xmm1,%xmm3
cmpunordsd %xmm1,%xmm3
movapd %xmm3,%xmm4
andpd  %xmm2,%xmm4
minsd  %xmm1,%xmm2
andnpd %xmm2,%xmm3
orpd   %xmm4,%xmm3
movlpd %xmm3,(%r9)
movlpd %xmm3,(%r10)
lea    (%rdx,%rcx,2),%ebx
add    $0xfffffffc,%ebx
add    $0xfffffffc,%edx
movsd  (%r11),%xmm1
movslq %ebx,%rsi
lea    (%rax,%rsi,8),%rbp
add    $0xfffffffffffffff8,%rbp
addsd  -0x8(%rax,%rsi,8),%xmm1
movsd  %xmm1,0x10(%rax,%rdi,8)
movslq %ebx,%rsi
movsd  0x0(%rbp),%xmm2
divsd  %xmm1,%xmm2
mulsd  0x8(%rax,%rsi,8),%xmm2
movslq %edx,%rdx
movsd  %xmm2,(%rax,%rdx,8)
movsd  (%r11),%xmm2
divsd  %xmm1,%xmm2
mulsd  0x8(%rax,%rsi,8),%xmm2
mov    0x40(%rsp),%rsi
subsd  (%r8),%xmm2
movsd  %xmm2,(%rsi)
movsd  (%r9),%xmm1
movapd %xmm1,%xmm3
cmpunordsd %xmm1,%xmm3
movapd %xmm3,%xmm4
andpd  %xmm2,%xmm4
minsd  %xmm1,%xmm2
andnpd %xmm2,%xmm3
orpd   %xmm4,%xmm3
movlpd %xmm3,(%r9)
movsd  (%rsi),%xmm1
movsd  %xmm1,0x10(%rax,%rdx,8)
sub    %ecx,%r12d
movslq %r12d,%rcx
movsd  %xmm0,(%rax,%rcx,8)
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
movslq %edi,%rbx
movslq %ebp,%rdi
xorpd  %xmm3,%xmm3
nopw   0x0(%rax,%rax,1)
movsd  -0x10(%rdx,%rbx,8),%xmm4
movapd %xmm1,%xmm0
addsd  %xmm4,%xmm0
movsd  %xmm0,-0x18(%rdx,%rbx,8)
ucomisd %xmm1,%xmm3
ja     1585 <odsq5_+0x485>
movsd  (%rdx,%rbx,8),%xmm5
divsd  %xmm0,%xmm4
mulsd  %xmm5,%xmm4
movsd  %xmm4,-0x8(%rdx,%rbx,8)
divsd  %xmm0,%xmm1
mulsd  %xmm5,%xmm1
subsd  (%r8),%xmm1
movsd  (%r9),%xmm0
movapd %xmm1,%xmm4
minsd  %xmm0,%xmm4
cmpunordsd %xmm0,%xmm0
movapd %xmm0,%xmm5
andpd  %xmm1,%xmm5
andnpd %xmm4,%xmm0
orpd   %xmm5,%xmm0
movlpd %xmm0,(%r9)
movsd  -0x8(%rdx,%rbx,8),%xmm4
movapd %xmm2,%xmm0
cmpunordsd %xmm2,%xmm0
movapd %xmm0,%xmm5
andpd  %xmm4,%xmm5
minsd  %xmm2,%xmm4
andnpd %xmm4,%xmm0
orpd   %xmm5,%xmm0
add    $0x4,%rbx
movapd %xmm0,%xmm2
cmp    %rdi,%rbx
jle    15a0 <odsq5_+0x4a0>
jmp    12f9 <odsq5_+0x1f9>

LLVM IR (-O0):
define i32 @odsq5_(i32* %0, i32* %1, double* %2, i32* %3, double* %4, double* %5, double* %6, double* %7, double* %8, double* %9, double* %10, i32* %11) {
%13 = alloca i32
%14 = alloca i32*
%15 = alloca i32*
%16 = alloca double*
%17 = alloca i32*
%18 = alloca double*
%19 = alloca double*
%20 = alloca double*
%21 = alloca double*
%22 = alloca double*
%23 = alloca double*
%24 = alloca double*
%25 = alloca i32*
%26 = alloca i32
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca i32
%31 = alloca i32
%32 = alloca double
%33 = alloca double
store i32* %0, i32** %14
store i32* %1, i32** %15
store double* %2, double** %16
store i32* %3, i32** %17
store double* %4, double** %18
store double* %5, double** %19
store double* %6, double** %20
store double* %7, double** %21
store double* %8, double** %22
store double* %9, double** %23
store double* %10, double** %24
store i32* %11, i32** %25
%34 = load double*, double** %16
%35 = getelementptr inbounds double, double* %34, i32 -1
store double* %35, double** %16
%36 = load i32*, i32** %15
%37 = load i32, i32* %36
%38 = load i32*, i32** %14
%39 = load i32, i32* %38
%40 = sub nsw i32 %37, %39
%41 = sub nsw i32 %40, 1
%42 = icmp sle i32 %41, 0
br i1 %42, label %43, label %44
43: ; preds = %12
store i32 0, i32* %13
br label %754
44: ; preds = %12
%45 = load i32*, i32** %14
%46 = load i32, i32* %45
%47 = shl i32 %46, 2
%48 = load i32*, i32** %17
%49 = load i32, i32* %48
%50 = add nsw i32 %47, %49
%51 = sub nsw i32 %50, 3
store i32 %51, i32* %30
%52 = load double*, double** %16
%53 = load i32, i32* %30
%54 = add nsw i32 %53, 4
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds double, double* %52, i64 %55
%57 = load double, double* %56
store double %57, double* %32
%58 = load double*, double** %16
%59 = load i32, i32* %30
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds double, double* %58, i64 %60
%62 = load double, double* %61
%63 = load double*, double** %18
%64 = load double, double* %63
%65 = fsub double %62, %64
store double %65, double* %29
%66 = load double, double* %29
%67 = load double*, double** %19
store double %66, double* %67
%68 = load double*, double** %16
%69 = load i32, i32* %30
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds double, double* %68, i64 %70
%72 = load double, double* %71
%73 = fneg double %72
%74 = load double*, double** %20
store double %73, double* %74
%75 = load i32*, i32** %25
%76 = load i32, i32* %75
%77 = icmp ne i32 %76, 0
br i1 %77, label %78, label %384
78: ; preds = %44
%79 = load i32*, i32** %17
%80 = load i32, i32* %79
%81 = icmp eq i32 %80, 0
br i1 %81, label %82, label %156
82: ; preds = %78
%83 = load i32*, i32** %15
%84 = load i32, i32* %83
%85 = sub nsw i32 %84, 3
%86 = shl i32 %85, 2
store i32 %86, i32* %26
%87 = load i32*, i32** %14
%88 = load i32, i32* %87
%89 = shl i32 %88, 2
store i32 %89, i32* %30
br label %90
90: ; preds = %152, %82
%91 = load i32, i32* %30
%92 = load i32, i32* %26
%93 = icmp sle i32 %91, %92
br i1 %93, label %94, label %155
94: ; preds = %90
%95 = load double, double* %29
%96 = load double*, double** %16
%97 = load i32, i32* %30
%98 = sub nsw i32 %97, 1
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds double, double* %96, i64 %99
%101 = load double, double* %100
%102 = fadd double %95, %101
%103 = load double*, double** %16
%104 = load i32, i32* %30
%105 = sub nsw i32 %104, 2
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds double, double* %103, i64 %106
store double %102, double* %107
%108 = load double*, double** %16
%109 = load i32, i32* %30
%110 = add nsw i32 %109, 1
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds double, double* %108, i64 %111
%113 = load double, double* %112
%114 = load double*, double** %16
%115 = load i32, i32* %30
%116 = sub nsw i32 %115, 2
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds double, double* %114, i64 %117
%119 = load double, double* %118
%120 = fdiv double %113, %119
store double %120, double* %33
%121 = load double, double* %29
%122 = load double, double* %33
%123 = load double*, double** %18
%124 = load double, double* %123
%125 = fneg double %124
%126 = call double @llvm.fmuladd.f64(double %121, double %122, double %125)
store double %126, double* %29
%127 = load double*, double** %19
%128 = load double, double* %127
%129 = load double, double* %29
%130 = call double @llvm.minnum.f64(double %128, double %129)
%131 = load double*, double** %19
store double %130, double* %131
%132 = load double*, double** %16
%133 = load i32, i32* %30
%134 = sub nsw i32 %133, 1
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds double, double* %132, i64 %135
%137 = load double, double* %136
%138 = load double, double* %33
%139 = fmul double %137, %138
%140 = load double*, double** %16
%141 = load i32, i32* %30
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds double, double* %140, i64 %142
store double %139, double* %143
%144 = load double*, double** %16
%145 = load i32, i32* %30
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds double, double* %144, i64 %146
%148 = load double, double* %147
store double %148, double* %27
%149 = load double, double* %27
%150 = load double, double* %32
%151 = call double @llvm.minnum.f64(double %149, double %150)
store double %151, double* %32
br label %152
152: ; preds = %94
%153 = load i32, i32* %30
%154 = add nsw i32 %153, 4
store i32 %154, i32* %30
br label %90
155: ; preds = %90
br label %230
156: ; preds = %78
%157 = load i32*, i32** %15
%158 = load i32, i32* %157
%159 = sub nsw i32 %158, 3
%160 = shl i32 %159, 2
store i32 %160, i32* %26
%161 = load i32*, i32** %14
%162 = load i32, i32* %161
%163 = shl i32 %162, 2
store i32 %163, i32* %30
br label %164
164: ; preds = %226, %156
%165 = load i32, i32* %30
%166 = load i32, i32* %26
%167 = icmp sle i32 %165, %166
br i1 %167, label %168, label %229
168: ; preds = %164
%169 = load double, double* %29
%170 = load double*, double** %16
%171 = load i32, i32* %30
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds double, double* %170, i64 %172
%174 = load double, double* %173
%175 = fadd double %169, %174
%176 = load double*, double** %16
%177 = load i32, i32* %30
%178 = sub nsw i32 %177, 3
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds double, double* %176, i64 %179
store double %175, double* %180
%181 = load double*, double** %16
%182 = load i32, i32* %30
%183 = add nsw i32 %182, 2
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds double, double* %181, i64 %184
%186 = load double, double* %185
%187 = load double*, double** %16
%188 = load i32, i32* %30
%189 = sub nsw i32 %188, 3
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds double, double* %187, i64 %190
%192 = load double, double* %191
%193 = fdiv double %186, %192
store double %193, double* %33
%194 = load double, double* %29
%195 = load double, double* %33
%196 = load double*, double** %18
%197 = load double, double* %196
%198 = fneg double %197
%199 = call double @llvm.fmuladd.f64(double %194, double %195, double %198)
store double %199, double* %29
%200 = load double*, double** %19
%201 = load double, double* %200
%202 = load double, double* %29
%203 = call double @llvm.minnum.f64(double %201, double %202)
%204 = load double*, double** %19
store double %203, double* %204
%205 = load double*, double** %16
%206 = load i32, i32* %30
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds double, double* %205, i64 %207
%209 = load double, double* %208
%210 = load double, double* %33
%211 = fmul double %209, %210
%212 = load double*, double** %16
%213 = load i32, i32* %30
%214 = sub nsw i32 %213, 1
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds double, double* %212, i64 %215
store double %211, double* %216
%217 = load double*, double** %16
%218 = load i32, i32* %30
%219 = sub nsw i32 %218, 1
%220 = sext i32 %219 to i64
%221 = getelementptr inbounds double, double* %217, i64 %220
%222 = load double, double* %221
store double %222, double* %27
%223 = load double, double* %27
%224 = load double, double* %32
%225 = call double @llvm.minnum.f64(double %223, double %224)
store double %225, double* %32
br label %226
226: ; preds = %168
%227 = load i32, i32* %30
%228 = add nsw i32 %227, 4
store i32 %228, i32* %30
br label %164
229: ; preds = %164
br label %230
230: ; preds = %229, %155
%231 = load double, double* %29
%232 = load double*, double** %24
store double %231, double* %232
%233 = load double*, double** %19
%234 = load double, double* %233
%235 = load double*, double** %21
store double %234, double* %235
%236 = load i32*, i32** %15
%237 = load i32, i32* %236
%238 = sub nsw i32 %237, 2
%239 = shl i32 %238, 2
%240 = load i32*, i32** %17
%241 = load i32, i32* %240
%242 = sub nsw i32 %239, %241
store i32 %242, i32* %30
%243 = load i32, i32* %30
%244 = load i32*, i32** %17
%245 = load i32, i32* %244
%246 = shl i32 %245, 1
%247 = add nsw i32 %243, %246
%248 = sub nsw i32 %247, 1
store i32 %248, i32* %31
%249 = load double*, double** %24
%250 = load double, double* %249
%251 = load double*, double** %16
%252 = load i32, i32* %31
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds double, double* %251, i64 %253
%255 = load double, double* %254
%256 = fadd double %250, %255
%257 = load double*, double** %16
%258 = load i32, i32* %30
%259 = sub nsw i32 %258, 2
%260 = sext i32 %259 to i64
%261 = getelementptr inbounds double, double* %257, i64 %260
store double %256, double* %261
%262 = load double*, double** %16
%263 = load i32, i32* %31
%264 = add nsw i32 %263, 2
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds double, double* %262, i64 %265
%267 = load double, double* %266
%268 = load double*, double** %16
%269 = load i32, i32* %31
%270 = sext i32 %269 to i64
%271 = getelementptr inbounds double, double* %268, i64 %270
%272 = load double, double* %271
%273 = load double*, double** %16
%274 = load i32, i32* %30
%275 = sub nsw i32 %274, 2
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds double, double* %273, i64 %276
%278 = load double, double* %277
%279 = fdiv double %272, %278
%280 = fmul double %267, %279
%281 = load double*, double** %16
%282 = load i32, i32* %30
%283 = sext i32 %282 to i64
%284 = getelementptr inbounds double, double* %281, i64 %283
store double %280, double* %284
%285 = load double*, double** %16
%286 = load i32, i32* %31
%287 = add nsw i32 %286, 2
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds double, double* %285, i64 %288
%290 = load double, double* %289
%291 = load double*, double** %24
%292 = load double, double* %291
%293 = load double*, double** %16
%294 = load i32, i32* %30
%295 = sub nsw i32 %294, 2
%296 = sext i32 %295 to i64
%297 = getelementptr inbounds double, double* %293, i64 %296
%298 = load double, double* %297
%299 = fdiv double %292, %298
%300 = load double*, double** %18
%301 = load double, double* %300
%302 = fneg double %301
%303 = call double @llvm.fmuladd.f64(double %290, double %299, double %302)
%304 = load double*, double** %23
store double %303, double* %304
%305 = load double*, double** %19
%306 = load double, double* %305
%307 = load double*, double** %23
%308 = load double, double* %307
%309 = call double @llvm.minnum.f64(double %306, double %308)
%310 = load double*, double** %19
store double %309, double* %310
%311 = load double*, double** %19
%312 = load double, double* %311
%313 = load double*, double** %20
store double %312, double* %313
%314 = load i32, i32* %30
%315 = add nsw i32 %314, 4
store i32 %315, i32* %30
%316 = load i32, i32* %30
%317 = load i32*, i32** %17
%318 = load i32, i32* %317
%319 = shl i32 %318, 1
%320 = add nsw i32 %316, %319
%321 = sub nsw i32 %320, 1
store i32 %321, i32* %31
%322 = load double*, double** %23
%323 = load double, double* %322
%324 = load double*, double** %16
%325 = load i32, i32* %31
%326 = sext i32 %325 to i64
%327 = getelementptr inbounds double, double* %324, i64 %326
%328 = load double, double* %327
%329 = fadd double %323, %328
%330 = load double*, double** %16
%331 = load i32, i32* %30
%332 = sub nsw i32 %331, 2
%333 = sext i32 %332 to i64
%334 = getelementptr inbounds double, double* %330, i64 %333
store double %329, double* %334
%335 = load double*, double** %16
%336 = load i32, i32* %31
%337 = add nsw i32 %336, 2
%338 = sext i32 %337 to i64
%339 = getelementptr inbounds double, double* %335, i64 %338
%340 = load double, double* %339
%341 = load double*, double** %16
%342 = load i32, i32* %31
%343 = sext i32 %342 to i64
%344 = getelementptr inbounds double, double* %341, i64 %343
%345 = load double, double* %344
%346 = load double*, double** %16
%347 = load i32, i32* %30
%348 = sub nsw i32 %347, 2
%349 = sext i32 %348 to i64
%350 = getelementptr inbounds double, double* %346, i64 %349
%351 = load double, double* %350
%352 = fdiv double %345, %351
%353 = fmul double %340, %352
%354 = load double*, double** %16
%355 = load i32, i32* %30
%356 = sext i32 %355 to i64
%357 = getelementptr inbounds double, double* %354, i64 %356
store double %353, double* %357
%358 = load double*, double** %16
%359 = load i32, i32* %31
%360 = add nsw i32 %359, 2
%361 = sext i32 %360 to i64
%362 = getelementptr inbounds double, double* %358, i64 %361
%363 = load double, double* %362
%364 = load double*, double** %23
%365 = load double, double* %364
%366 = load double*, double** %16
%367 = load i32, i32* %30
%368 = sub nsw i32 %367, 2
%369 = sext i32 %368 to i64
%370 = getelementptr inbounds double, double* %366, i64 %369
%371 = load double, double* %370
%372 = fdiv double %365, %371
%373 = load double*, double** %18
%374 = load double, double* %373
%375 = fneg double %374
%376 = call double @llvm.fmuladd.f64(double %363, double %372, double %375)
%377 = load double*, double** %22
store double %376, double* %377
%378 = load double*, double** %19
%379 = load double, double* %378
%380 = load double*, double** %22
%381 = load double, double* %380
%382 = call double @llvm.minnum.f64(double %379, double %381)
%383 = load double*, double** %19
store double %382, double* %383
br label %736
384: ; preds = %44
%385 = load i32*, i32** %17
%386 = load i32, i32* %385
%387 = icmp eq i32 %386, 0
br i1 %387, label %388, label %479
388: ; preds = %384
%389 = load i32*, i32** %15
%390 = load i32, i32* %389
%391 = sub nsw i32 %390, 3
%392 = shl i32 %391, 2
store i32 %392, i32* %26
%393 = load i32*, i32** %14
%394 = load i32, i32* %393
%395 = shl i32 %394, 2
store i32 %395, i32* %30
br label %396
396: ; preds = %475, %388
%397 = load i32, i32* %30
%398 = load i32, i32* %26
%399 = icmp sle i32 %397, %398
br i1 %399, label %400, label %478
400: ; preds = %396
%401 = load double, double* %29
%402 = load double*, double** %16
%403 = load i32, i32* %30
%404 = sub nsw i32 %403, 1
%405 = sext i32 %404 to i64
%406 = getelementptr inbounds double, double* %402, i64 %405
%407 = load double, double* %406
%408 = fadd double %401, %407
%409 = load double*, double** %16
%410 = load i32, i32* %30
%411 = sub nsw i32 %410, 2
%412 = sext i32 %411 to i64
%413 = getelementptr inbounds double, double* %409, i64 %412
store double %408, double* %413
%414 = load double, double* %29
%415 = fcmp olt double %414, 0.000000e+00
br i1 %415, label %416, label %417
416: ; preds = %400
store i32 0, i32* %13
br label %754
417: ; preds = %400
%418 = load double*, double** %16
%419 = load i32, i32* %30
%420 = add nsw i32 %419, 1
%421 = sext i32 %420 to i64
%422 = getelementptr inbounds double, double* %418, i64 %421
%423 = load double, double* %422
%424 = load double*, double** %16
%425 = load i32, i32* %30
%426 = sub nsw i32 %425, 1
%427 = sext i32 %426 to i64
%428 = getelementptr inbounds double, double* %424, i64 %427
%429 = load double, double* %428
%430 = load double*, double** %16
%431 = load i32, i32* %30
%432 = sub nsw i32 %431, 2
%433 = sext i32 %432 to i64
%434 = getelementptr inbounds double, double* %430, i64 %433
%435 = load double, double* %434
%436 = fdiv double %429, %435
%437 = fmul double %423, %436
%438 = load double*, double** %16
%439 = load i32, i32* %30
%440 = sext i32 %439 to i64
%441 = getelementptr inbounds double, double* %438, i64 %440
store double %437, double* %441
%442 = load double*, double** %16
%443 = load i32, i32* %30
%444 = add nsw i32 %443, 1
%445 = sext i32 %444 to i64
%446 = getelementptr inbounds double, double* %442, i64 %445
%447 = load double, double* %446
%448 = load double, double* %29
%449 = load double*, double** %16
%450 = load i32, i32* %30
%451 = sub nsw i32 %450, 2
%452 = sext i32 %451 to i64
%453 = getelementptr inbounds double, double* %449, i64 %452
%454 = load double, double* %453
%455 = fdiv double %448, %454
%456 = load double*, double** %18
%457 = load double, double* %456
%458 = fneg double %457
%459 = call double @llvm.fmuladd.f64(double %447, double %455, double %458)
store double %459, double* %29
br label %460
460: ; preds = %417
%461 = load double*, double** %19
%462 = load double, double* %461
%463 = load double, double* %29
%464 = call double @llvm.minnum.f64(double %462, double %463)
%465 = load double*, double** %19
store double %464, double* %465
%466 = load double, double* %32
store double %466, double* %27
%467 = load double*, double** %16
%468 = load i32, i32* %30
%469 = sext i32 %468 to i64
%470 = getelementptr inbounds double, double* %467, i64 %469
%471 = load double, double* %470
store double %471, double* %28
%472 = load double, double* %27
%473 = load double, double* %28
%474 = call double @llvm.minnum.f64(double %472, double %473)
store double %474, double* %32
br label %475
475: ; preds = %460
%476 = load i32, i32* %30
%477 = add nsw i32 %476, 4
store i32 %477, i32* %30
br label %396
478: ; preds = %396
br label %570
479: ; preds = %384
%480 = load i32*, i32** %15
%481 = load i32, i32* %480
%482 = sub nsw i32 %481, 3
%483 = shl i32 %482, 2
store i32 %483, i32* %26
%484 = load i32*, i32** %14
%485 = load i32, i32* %484
%486 = shl i32 %485, 2
store i32 %486, i32* %30
br label %487
487: ; preds = %566, %479
%488 = load i32, i32* %30
%489 = load i32, i32* %26
%490 = icmp sle i32 %488, %489
br i1 %490, label %491, label %569
491: ; preds = %487
%492 = load double, double* %29
%493 = load double*, double** %16
%494 = load i32, i32* %30
%495 = sext i32 %494 to i64
%496 = getelementptr inbounds double, double* %493, i64 %495
%497 = load double, double* %496
%498 = fadd double %492, %497
%499 = load double*, double** %16
%500 = load i32, i32* %30
%501 = sub nsw i32 %500, 3
%502 = sext i32 %501 to i64
%503 = getelementptr inbounds double, double* %499, i64 %502
store double %498, double* %503
%504 = load double, double* %29
%505 = fcmp olt double %504, 0.000000e+00
br i1 %505, label %506, label %507
506: ; preds = %491
store i32 0, i32* %13
br label %754
507: ; preds = %491
%508 = load double*, double** %16
%509 = load i32, i32* %30
%510 = add nsw i32 %509, 2
%511 = sext i32 %510 to i64
%512 = getelementptr inbounds double, double* %508, i64 %511
%513 = load double, double* %512
%514 = load double*, double** %16
%515 = load i32, i32* %30
%516 = sext i32 %515 to i64
%517 = getelementptr inbounds double, double* %514, i64 %516
%518 = load double, double* %517
%519 = load double*, double** %16
%520 = load i32, i32* %30
%521 = sub nsw i32 %520, 3
%522 = sext i32 %521 to i64
%523 = getelementptr inbounds double, double* %519, i64 %522
%524 = load double, double* %523
%525 = fdiv double %518, %524
%526 = fmul double %513, %525
%527 = load double*, double** %16
%528 = load i32, i32* %30
%529 = sub nsw i32 %528, 1
%530 = sext i32 %529 to i64
%531 = getelementptr inbounds double, double* %527, i64 %530
store double %526, double* %531
%532 = load double*, double** %16
%533 = load i32, i32* %30
%534 = add nsw i32 %533, 2
%535 = sext i32 %534 to i64
%536 = getelementptr inbounds double, double* %532, i64 %535
%537 = load double, double* %536
%538 = load double, double* %29
%539 = load double*, double** %16
%540 = load i32, i32* %30
%541 = sub nsw i32 %540, 3
%542 = sext i32 %541 to i64
%543 = getelementptr inbounds double, double* %539, i64 %542
%544 = load double, double* %543
%545 = fdiv double %538, %544
%546 = load double*, double** %18
%547 = load double, double* %546
%548 = fneg double %547
%549 = call double @llvm.fmuladd.f64(double %537, double %545, double %548)
store double %549, double* %29
br label %550
550: ; preds = %507
%551 = load double*, double** %19
%552 = load double, double* %551
%553 = load double, double* %29
%554 = call double @llvm.minnum.f64(double %552, double %553)
%555 = load double*, double** %19
store double %554, double* %555
%556 = load double, double* %32
store double %556, double* %27
%557 = load double*, double** %16
%558 = load i32, i32* %30
%559 = sub nsw i32 %558, 1
%560 = sext i32 %559 to i64
%561 = getelementptr inbounds double, double* %557, i64 %560
%562 = load double, double* %561
store double %562, double* %28
%563 = load double, double* %27
%564 = load double, double* %28
%565 = call double @llvm.minnum.f64(double %563, double %564)
store double %565, double* %32
br label %566
566: ; preds = %550
%567 = load i32, i32* %30
%568 = add nsw i32 %567, 4
store i32 %568, i32* %30
br label %487
569: ; preds = %487
br label %570
570: ; preds = %569, %478
%571 = load double, double* %29
%572 = load double*, double** %24
store double %571, double* %572
%573 = load double*, double** %19
%574 = load double, double* %573
%575 = load double*, double** %21
store double %574, double* %575
%576 = load i32*, i32** %15
%577 = load i32, i32* %576
%578 = sub nsw i32 %577, 2
%579 = shl i32 %578, 2
%580 = load i32*, i32** %17
%581 = load i32, i32* %580
%582 = sub nsw i32 %579, %581
store i32 %582, i32* %30
%583 = load i32, i32* %30
%584 = load i32*, i32** %17
%585 = load i32, i32* %584
%586 = shl i32 %585, 1
%587 = add nsw i32 %583, %586
%588 = sub nsw i32 %587, 1
store i32 %588, i32* %31
%589 = load double*, double** %24
%590 = load double, double* %589
%591 = load double*, double** %16
%592 = load i32, i32* %31
%593 = sext i32 %592 to i64
%594 = getelementptr inbounds double, double* %591, i64 %593
%595 = load double, double* %594
%596 = fadd double %590, %595
%597 = load double*, double** %16
%598 = load i32, i32* %30
%599 = sub nsw i32 %598, 2
%600 = sext i32 %599 to i64
%601 = getelementptr inbounds double, double* %597, i64 %600
store double %596, double* %601
%602 = load double*, double** %24
%603 = load double, double* %602
%604 = fcmp olt double %603, 0.000000e+00
br i1 %604, label %605, label %606
605: ; preds = %570
store i32 0, i32* %13
br label %754
606: ; preds = %570
%607 = load double*, double** %16
%608 = load i32, i32* %31
%609 = add nsw i32 %608, 2
%610 = sext i32 %609 to i64
%611 = getelementptr inbounds double, double* %607, i64 %610
%612 = load double, double* %611
%613 = load double*, double** %16
%614 = load i32, i32* %31
%615 = sext i32 %614 to i64
%616 = getelementptr inbounds double, double* %613, i64 %615
%617 = load double, double* %616
%618 = load double*, double** %16
%619 = load i32, i32* %30
%620 = sub nsw i32 %619, 2
%621 = sext i32 %620 to i64
%622 = getelementptr inbounds double, double* %618, i64 %621
%623 = load double, double* %622
%624 = fdiv double %617, %623
%625 = fmul double %612, %624
%626 = load double*, double** %16
%627 = load i32, i32* %30
%628 = sext i32 %627 to i64
%629 = getelementptr inbounds double, double* %626, i64 %628
store double %625, double* %629
%630 = load double*, double** %16
%631 = load i32, i32* %31
%632 = add nsw i32 %631, 2
%633 = sext i32 %632 to i64
%634 = getelementptr inbounds double, double* %630, i64 %633
%635 = load double, double* %634
%636 = load double*, double** %24
%637 = load double, double* %636
%638 = load double*, double** %16
%639 = load i32, i32* %30
%640 = sub nsw i32 %639, 2
%641 = sext i32 %640 to i64
%642 = getelementptr inbounds double, double* %638, i64 %641
%643 = load double, double* %642
%644 = fdiv double %637, %643
%645 = load double*, double** %18
%646 = load double, double* %645
%647 = fneg double %646
%648 = call double @llvm.fmuladd.f64(double %635, double %644, double %647)
%649 = load double*, double** %23
store double %648, double* %649
br label %650
650: ; preds = %606
%651 = load double*, double** %19
%652 = load double, double* %651
%653 = load double*, double** %23
%654 = load double, double* %653
%655 = call double @llvm.minnum.f64(double %652, double %654)
%656 = load double*, double** %19
store double %655, double* %656
%657 = load double*, double** %19
%658 = load double, double* %657
%659 = load double*, double** %20
store double %658, double* %659
%660 = load i32, i32* %30
%661 = add nsw i32 %660, 4
store i32 %661, i32* %30
%662 = load i32, i32* %30
%663 = load i32*, i32** %17
%664 = load i32, i32* %663
%665 = shl i32 %664, 1
%666 = add nsw i32 %662, %665
%667 = sub nsw i32 %666, 1
store i32 %667, i32* %31
%668 = load double*, double** %23
%669 = load double, double* %668
%670 = load double*, double** %16
%671 = load i32, i32* %31
%672 = sext i32 %671 to i64
%673 = getelementptr inbounds double, double* %670, i64 %672
%674 = load double, double* %673
%675 = fadd double %669, %674
%676 = load double*, double** %16
%677 = load i32, i32* %30
%678 = sub nsw i32 %677, 2
%679 = sext i32 %678 to i64
%680 = getelementptr inbounds double, double* %676, i64 %679
store double %675, double* %680
%681 = load double*, double** %23
%682 = load double, double* %681
%683 = fcmp olt double %682, 0.000000e+00
br i1 %683, label %684, label %685
684: ; preds = %650
store i32 0, i32* %13
br label %754
685: ; preds = %650
%686 = load double*, double** %16
%687 = load i32, i32* %31
%688 = add nsw i32 %687, 2
%689 = sext i32 %688 to i64
%690 = getelementptr inbounds double, double* %686, i64 %689
%691 = load double, double* %690
%692 = load double*, double** %16
%693 = load i32, i32* %31
%694 = sext i32 %693 to i64
%695 = getelementptr inbounds double, double* %692, i64 %694
%696 = load double, double* %695
%697 = load double*, double** %16
%698 = load i32, i32* %30
%699 = sub nsw i32 %698, 2
%700 = sext i32 %699 to i64
%701 = getelementptr inbounds double, double* %697, i64 %700
%702 = load double, double* %701
%703 = fdiv double %696, %702
%704 = fmul double %691, %703
%705 = load double*, double** %16
%706 = load i32, i32* %30
%707 = sext i32 %706 to i64
%708 = getelementptr inbounds double, double* %705, i64 %707
store double %704, double* %708
%709 = load double*, double** %16
%710 = load i32, i32* %31
%711 = add nsw i32 %710, 2
%712 = sext i32 %711 to i64
%713 = getelementptr inbounds double, double* %709, i64 %712
%714 = load double, double* %713
%715 = load double*, double** %23
%716 = load double, double* %715
%717 = load double*, double** %16
%718 = load i32, i32* %30
%719 = sub nsw i32 %718, 2
%720 = sext i32 %719 to i64
%721 = getelementptr inbounds double, double* %717, i64 %720
%722 = load double, double* %721
%723 = fdiv double %716, %722
%724 = load double*, double** %18
%725 = load double, double* %724
%726 = fneg double %725
%727 = call double @llvm.fmuladd.f64(double %714, double %723, double %726)
%728 = load double*, double** %22
store double %727, double* %728
br label %729
729: ; preds = %685
%730 = load double*, double** %19
%731 = load double, double* %730
%732 = load double*, double** %22
%733 = load double, double* %732
%734 = call double @llvm.minnum.f64(double %731, double %733)
%735 = load double*, double** %19
store double %734, double* %735
br label %736
736: ; preds = %729, %230
%737 = load double*, double** %22
%738 = load double, double* %737
%739 = load double*, double** %16
%740 = load i32, i32* %30
%741 = add nsw i32 %740, 2
%742 = sext i32 %741 to i64
%743 = getelementptr inbounds double, double* %739, i64 %742
store double %738, double* %743
%744 = load double, double* %32
%745 = load double*, double** %16
%746 = load i32*, i32** %15
%747 = load i32, i32* %746
%748 = shl i32 %747, 2
%749 = load i32*, i32** %17
%750 = load i32, i32* %749
%751 = sub nsw i32 %748, %750
%752 = sext i32 %751 to i64
%753 = getelementptr inbounds double, double* %745, i64 %752
store double %744, double* %753
store i32 0, i32* %13
br label %754
754: ; preds = %736, %684, %605, %506, %416, %43
%755 = load i32, i32* %13
ret i32 %755
}

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