void kern_r8_fma_u1_f(double *restrict o0, double *restrict o1,
                      double *restrict o2, double *restrict o3,
                      double *restrict o4, double *restrict o5,
                      double *restrict o6, double *restrict o7, double *i0,
                      double *i1, double *i2, double *i3, double *i4,
                      double *i5, double *i6, double *i7, double *w, double *w2,
                      long bsize, long blocks) {
  long i;
  for (i = 0; i < blocks; i++) {
    double wr1, wi1;
    double wr2, wi2;
    double wr3, wi3;
    double wr4, wi4;
    double wr5, wi5;
    double wr6, wi6;
    double wr7, wi7;
    double pr2, pi2;
    double pr4, pi4;
    double pr5, pi5;
    double pr6, pi6;
    double pr7, pi7;
    double sr1, si1;
    double sr3, si3;
    double sr5, si5;
    double sr7, si7;
    double qr0, qi0;
    double qr1, qi1;
    double qr2, qi2;
    double qr3, qi3;
    double qr4, qi4;
    double qr5, qi5;
    double qr6, qi6;
    double qr7, qi7;
    double tr0, ti0;
    double tr1, ti1;
    double tr2, ti2;
    double tr3, ti3;
    double tr4, ti4;
    double tr5, ti5;
    double tr6, ti6;
    double tr7, ti7;
    wr4 = w[8 * i];
    wi4 = w[8 * i + 1];
    wr2 = w[4 * i];
    wi2 = w[4 * i + 1];
    wr6 = w2[4 * i];
    wi6 = w2[4 * i + 1];
    wr1 = w[2 * i];
    wi1 = w[2 * i + 1];
    wr3 = w2[2 * i];
    wi3 = w2[2 * i + 1];
    wr5 = w[2 * i + 2 * blocks];
    wi5 = w[2 * i + 2 * blocks + 1];
    wr7 = w2[2 * i + 2 * blocks];
    wi7 = w2[2 * i + 2 * blocks + 1];
    pr5 = i5[16 * i] * wr4 + i5[16 * i + 1];
    pi5 = i5[16 * i + 1] * wr4 - i5[16 * i];
    pr7 = i7[16 * i] * wr4 + i7[16 * i + 1];
    pi7 = i7[16 * i + 1] * wr4 - i7[16 * i];
    pr2 = i2[16 * i] * wr2 + i2[16 * i + 1];
    pi2 = i2[16 * i + 1] * wr2 - i2[16 * i];
    pr4 = i4[16 * i] * wr4 + i4[16 * i + 1];
    pi4 = i4[16 * i + 1] * wr4 - i4[16 * i];
    pr6 = i6[16 * i] * wr6 + i6[16 * i + 1];
    pi6 = i6[16 * i + 1] * wr6 - i6[16 * i];
    sr1 = i1[16 * i] + pr5 * wi4;
    sr5 = i1[16 * i] - pr5 * wi4;
    si1 = i1[16 * i + 1] + pi5 * wi4;
    si5 = i1[16 * i + 1] - pi5 * wi4;
    sr3 = i3[16 * i] + pr7 * wi4;
    sr7 = i3[16 * i] - pr7 * wi4;
    si3 = i3[16 * i + 1] + pi7 * wi4;
    si7 = i3[16 * i + 1] - pi7 * wi4;
    qr0 = i0[16 * i] + pr4 * wi4;
    qr4 = i0[16 * i] - pr4 * wi4;
    qi0 = i0[16 * i + 1] + pi4 * wi4;
    qi4 = i0[16 * i + 1] - pi4 * wi4;
    qr2 = pr2 + pr6 * wi6;
    qr6 = pr2 - pr6 * wi6;
    qi2 = pi2 + pi6 * wi6;
    qi6 = pi2 - pi6 * wi6;
    qr1 = sr1 * wr1 + si1;
    qi1 = si1 * wr1 - sr1;
    qr3 = sr3 * wr3 + si3;
    qi3 = si3 * wr3 - sr3;
    qr5 = sr5 * wr5 + si5;
    qi5 = si5 * wr5 - sr5;
    qr7 = sr7 * wr7 + si7;
    qi7 = si7 * wr7 - sr7;
    tr0 = qr0 + qr2 * wi2;
    ti0 = qi0 + qi2 * wi2;
    tr2 = qr0 - qr2 * wi2;
    ti2 = qi0 - qi2 * wi2;
    tr4 = qr4 + qi6 * wi2;
    ti4 = qi4 - qr6 * wi2;
    tr6 = qr4 - qi6 * wi2;
    ti6 = qi4 + qr6 * wi2;
    tr1 = qr1 + qr3 * wi3;
    ti1 = qi1 + qi3 * wi3;
    tr3 = qr1 - qr3 * wi3;
    ti3 = qi1 - qi3 * wi3;
    tr5 = qr5 + qr7 * wi7;
    ti5 = qi5 + qi7 * wi7;
    tr7 = qr5 - qr7 * wi7;
    ti7 = qi5 - qi7 * wi7;
    o0[2 * i] = tr0 + tr1 * wi1;
    o0[2 * i + 1] = ti0 + ti1 * wi1;
    o4[2 * i] = tr0 - tr1 * wi1;
    o4[2 * i + 1] = ti0 - ti1 * wi1;
    o1[2 * i] = tr4 + tr5 * wi5;
    o1[2 * i + 1] = ti4 + ti5 * wi5;
    o5[2 * i] = tr4 - tr5 * wi5;
    o5[2 * i + 1] = ti4 - ti5 * wi5;
    o2[2 * i] = tr2 + ti3 * wi1;
    o2[2 * i + 1] = ti2 - tr3 * wi1;
    o6[2 * i] = tr2 - ti3 * wi1;
    o6[2 * i + 1] = ti2 + tr3 * wi1;
    o3[2 * i] = tr6 + ti7 * wi5;
    o3[2 * i + 1] = ti6 - tr7 * wi5;
    o7[2 * i] = tr6 - ti7 * wi5;
    o7[2 * i + 1] = ti6 + tr7 * wi5;
  }
}


x86 assembly (clang, -O0):
<kern_r8_fma_u1_f>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1b8,%rsp
mov    0x78(%rbp),%rax
mov    0x70(%rbp),%rax
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
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,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    0x78(%rbp),%rax
jge    217d <kern_r8_fma_u1_f+0x107d>
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x3,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x3,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x2,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x2,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x68(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x2,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x68(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x2,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x68(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x68(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
mov    0x78(%rbp),%rdx
shl    $0x1,%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
mov    0x78(%rbp),%rdx
shl    $0x1,%rdx
add    %rdx,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    0x68(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
mov    0x78(%rbp),%rdx
shl    $0x1,%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x68(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
mov    0x78(%rbp),%rdx
shl    $0x1,%rdx
add    %rdx,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x48(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    0x48(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    0x48(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    0x48(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    0x58(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    0x58(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    0x58(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    0x58(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x50(%rbp),%xmm2
mov    0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  -0x50(%rbp),%xmm2
mov    0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    0x40(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    0x40(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    0x40(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    0x40(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    0x50(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x90(%rbp),%xmm2
ff
mov    0x50(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    0x50(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm0
movsd  -0x90(%rbp),%xmm2
ff
mov    0x50(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
mov    0x38(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    0x38(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    0x38(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    0x38(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    0x20(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    0x20(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
mov    0x20(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    0x20(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x4,%rcx
movsd  0x8(%rax,%rcx,8),%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0x108(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0x100(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0x118(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0x110(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x120(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm2
movsd  -0x128(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm2
movsd  -0x120(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x138(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x130(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x140(%rbp),%xmm1
ff
movsd  -0x160(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x148(%rbp),%xmm1
ff
movsd  -0x168(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x140(%rbp),%xmm1
ff
movsd  -0x160(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1e0(%rbp)
ff
movsd  -0x148(%rbp),%xmm1
ff
movsd  -0x168(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1e8(%rbp)
ff
movsd  -0x180(%rbp),%xmm1
ff
movsd  -0x1a8(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x200(%rbp)
ff
movsd  -0x188(%rbp),%xmm1
ff
movsd  -0x1a0(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x208(%rbp)
ff
movsd  -0x180(%rbp),%xmm1
ff
movsd  -0x1a8(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x220(%rbp)
ff
movsd  -0x188(%rbp),%xmm1
ff
movsd  -0x1a0(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x228(%rbp)
ff
movsd  -0x150(%rbp),%xmm1
ff
movsd  -0x170(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0x158(%rbp),%xmm1
ff
movsd  -0x178(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1d8(%rbp)
ff
movsd  -0x150(%rbp),%xmm1
ff
movsd  -0x170(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1f0(%rbp)
ff
movsd  -0x158(%rbp),%xmm1
ff
movsd  -0x178(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1f8(%rbp)
ff
movsd  -0x190(%rbp),%xmm1
ff
movsd  -0x1b0(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x210(%rbp)
ff
movsd  -0x198(%rbp),%xmm1
ff
movsd  -0x1b8(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x218(%rbp)
ff
movsd  -0x190(%rbp),%xmm1
ff
movsd  -0x1b0(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x230(%rbp)
ff
movsd  -0x198(%rbp),%xmm1
ff
movsd  -0x1b8(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x238(%rbp)
ff
movsd  -0x1c0(%rbp),%xmm1
ff
movsd  -0x1d0(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x1c8(%rbp),%xmm1
ff
movsd  -0x1d8(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,0x8(%rax,%rcx,8)
movsd  -0x1c0(%rbp),%xmm1
ff
movsd  -0x1d0(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x1c8(%rbp),%xmm1
ff
movsd  -0x1d8(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,0x8(%rax,%rcx,8)
movsd  -0x200(%rbp),%xmm1
ff
movsd  -0x210(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x208(%rbp),%xmm1
ff
movsd  -0x218(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,0x8(%rax,%rcx,8)
movsd  -0x200(%rbp),%xmm1
ff
movsd  -0x210(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x208(%rbp),%xmm1
ff
movsd  -0x218(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,0x8(%rax,%rcx,8)
movsd  -0x1e0(%rbp),%xmm1
ff
movsd  -0x1f8(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x1e8(%rbp),%xmm1
ff
movsd  -0x1f0(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,0x8(%rax,%rcx,8)
movsd  -0x1e0(%rbp),%xmm1
movsd  -0x1f8(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x1e8(%rbp),%xmm1
ff
movsd  -0x1f0(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,0x8(%rax,%rcx,8)
movsd  -0x220(%rbp),%xmm1
ff
movsd  -0x238(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x228(%rbp),%xmm1
ff
movsd  -0x230(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,0x8(%rax,%rcx,8)
movsd  -0x220(%rbp),%xmm1
ff
movsd  -0x238(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x228(%rbp),%xmm1
ff
movsd  -0x230(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
mov    -0x38(%rbp),%rcx
shl    $0x1,%rcx
movsd  %xmm0,0x8(%rax,%rcx,8)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1163 <kern_r8_fma_u1_f+0x63>
add    $0x1b8,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kern_r8_fma_u1_f>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0xa0(%rsp),%rax
test   %rax,%rax
jle    14e4 <kern_r8_fma_u1_f+0x3e4>
mov    0x90(%rsp),%r10
mov    0x88(%rsp),%r11
mov    0x38(%rsp),%r13
mov    %rax,%rbp
shl    $0x4,%rbp
lea    (%r11,%rbp,1),%r12
add    $0x8,%r12
add    %r10,%rbp
add    $0x8,%rbp
xor    %r14d,%r14d
movapd 0xeae(%rip),%xmm10
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  0x8(%r10,%r14,2),%xmm14
movsd  0x8(%r10,%r14,1),%xmm9
movsd  0x0(%rbp,%r14,1),%xmm8
mov    0x70(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm3
movapd %xmm3,%xmm0
xorpd  %xmm10,%xmm0
movsd  (%r11,%r14,4),%xmm4
movsd  0x8(%r11,%r14,4),%xmm2
unpcklpd %xmm4,%xmm4
movapd %xmm3,%xmm1
shufpd $0x1,%xmm0,%xmm1
mulpd  %xmm4,%xmm3
addpd  %xmm1,%xmm3
mov    0x80(%rsp),%r15
movupd (%r15,%r14,8),%xmm6
movapd %xmm6,%xmm0
xorpd  %xmm10,%xmm0
movapd %xmm6,%xmm1
shufpd $0x1,%xmm0,%xmm1
mulpd  %xmm4,%xmm6
addpd  %xmm1,%xmm6
mov    0x58(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm0
movsd  (%r11,%r14,2),%xmm1
unpcklpd %xmm1,%xmm1
movapd %xmm0,%xmm5
mulpd  %xmm0,%xmm1
xorpd  %xmm10,%xmm0
shufpd $0x1,%xmm0,%xmm5
addpd  %xmm5,%xmm1
mov    0x68(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm0
movapd %xmm0,%xmm5
mulpd  %xmm0,%xmm4
xorpd  %xmm10,%xmm0
shufpd $0x1,%xmm0,%xmm5
addpd  %xmm5,%xmm4
mov    0x78(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm0
movsd  (%r10,%r14,2),%xmm5
unpcklpd %xmm5,%xmm5
movapd %xmm0,%xmm7
mulpd  %xmm0,%xmm5
xorpd  %xmm10,%xmm0
shufpd $0x1,%xmm0,%xmm7
addpd  %xmm7,%xmm5
mov    0x50(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm15
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm3
movapd %xmm3,%xmm0
addpd  %xmm15,%xmm0
subpd  %xmm3,%xmm15
mov    0x60(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm3
mulpd  %xmm2,%xmm6
movapd %xmm6,%xmm7
addpd  %xmm3,%xmm7
subpd  %xmm6,%xmm3
mov    0x48(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm12
mulpd  %xmm4,%xmm2
movapd %xmm2,%xmm11
addpd  %xmm12,%xmm11
subpd  %xmm2,%xmm12
movapd %xmm5,%xmm2
mulsd  %xmm14,%xmm2
movapd %xmm1,%xmm13
subsd  %xmm2,%xmm13
movapd %xmm14,%xmm2
unpcklpd %xmm14,%xmm2
mulpd  %xmm5,%xmm2
addpd  %xmm1,%xmm2
unpckhpd %xmm5,%xmm5
unpckhpd %xmm1,%xmm1
mulsd  %xmm14,%xmm5
subsd  %xmm5,%xmm1
movsd  (%r11,%r14,1),%xmm5
unpcklpd %xmm5,%xmm5
movapd %xmm0,%xmm4
mulpd  %xmm0,%xmm5
xorpd  %xmm10,%xmm0
shufpd $0x1,%xmm0,%xmm4
addpd  %xmm4,%xmm5
movsd  (%r10,%r14,1),%xmm4
unpcklpd %xmm4,%xmm4
movapd %xmm7,%xmm0
mulpd  %xmm7,%xmm4
xorpd  %xmm10,%xmm7
shufpd $0x1,%xmm7,%xmm0
addpd  %xmm0,%xmm4
movsd  -0x8(%r12,%r14,1),%xmm6
unpcklpd %xmm6,%xmm6
movapd %xmm15,%xmm0
mulpd  %xmm15,%xmm6
xorpd  %xmm10,%xmm15
shufpd $0x1,%xmm15,%xmm0
addpd  %xmm0,%xmm6
movsd  -0x8(%rbp,%r14,1),%xmm7
unpcklpd %xmm7,%xmm7
movapd %xmm3,%xmm0
mulpd  %xmm3,%xmm7
xorpd  %xmm10,%xmm3
shufpd $0x1,%xmm3,%xmm0
movsd  0x8(%r11,%r14,2),%xmm3
addpd  %xmm0,%xmm7
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm2
movapd %xmm2,%xmm14
addpd  %xmm11,%xmm14
subpd  %xmm2,%xmm11
movapd %xmm1,%xmm0
xorpd  %xmm10,%xmm1
unpcklpd %xmm13,%xmm1
xorpd  %xmm10,%xmm13
unpcklpd %xmm13,%xmm0
movsd  0x8(%r11,%r14,1),%xmm13
mulpd  %xmm3,%xmm0
addpd  %xmm12,%xmm0
mulpd  %xmm3,%xmm1
addpd  %xmm12,%xmm1
movapd %xmm4,%xmm2
mulsd  %xmm9,%xmm2
movapd %xmm5,%xmm12
subsd  %xmm2,%xmm12
movapd %xmm9,%xmm2
unpcklpd %xmm9,%xmm2
mulpd  %xmm4,%xmm2
addpd  %xmm5,%xmm2
unpckhpd %xmm4,%xmm4
unpckhpd %xmm5,%xmm5
mulsd  %xmm9,%xmm4
subsd  %xmm4,%xmm5
movapd %xmm7,%xmm3
mulsd  %xmm8,%xmm3
movapd %xmm6,%xmm9
subsd  %xmm3,%xmm9
movapd %xmm8,%xmm3
unpcklpd %xmm8,%xmm3
mulpd  %xmm7,%xmm3
unpckhpd %xmm7,%xmm7
mulsd  %xmm8,%xmm7
movsd  (%r12,%r14,1),%xmm4
addpd  %xmm6,%xmm3
unpckhpd %xmm6,%xmm6
subsd  %xmm7,%xmm6
unpcklpd %xmm13,%xmm13
mulpd  %xmm13,%xmm2
movapd %xmm2,%xmm7
addpd  %xmm14,%xmm7
movupd %xmm7,(%rdi,%r14,1)
subpd  %xmm2,%xmm14
movupd %xmm14,(%r8,%r14,1)
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm3
movapd %xmm3,%xmm2
addpd  %xmm0,%xmm2
movupd %xmm2,(%rsi,%r14,1)
subpd  %xmm3,%xmm0
movupd %xmm0,(%r9,%r14,1)
movapd %xmm5,%xmm0
xorpd  %xmm10,%xmm5
unpcklpd %xmm12,%xmm5
xorpd  %xmm10,%xmm12
unpcklpd %xmm12,%xmm0
mulpd  %xmm13,%xmm0
addpd  %xmm11,%xmm0
movupd %xmm0,(%rdx,%r14,1)
mulpd  %xmm13,%xmm5
addpd  %xmm11,%xmm5
movupd %xmm5,0x0(%r13,%r14,1)
movapd %xmm6,%xmm0
xorpd  %xmm10,%xmm6
unpcklpd %xmm9,%xmm6
xorpd  %xmm10,%xmm9
unpcklpd %xmm9,%xmm0
mulpd  %xmm4,%xmm0
addpd  %xmm1,%xmm0
movupd %xmm0,(%rcx,%r14,1)
mulpd  %xmm4,%xmm6
addpd  %xmm1,%xmm6
mov    0x40(%rsp),%rbx
movupd %xmm6,(%rbx,%r14,1)
add    $0x10,%r14
add    $0xffffffffffffffff,%rax
jne    1160 <kern_r8_fma_u1_f+0x60>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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