void kern_r8_fma_u1_b(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_b>:
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_b+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
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%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
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
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%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
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
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%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
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
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%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
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
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%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
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
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
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
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
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
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
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
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
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
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
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
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
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
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
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
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
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
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
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
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  -0x1e8(%rbp),%xmm1
ff
movsd  -0x1f0(%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,0x8(%rax,%rcx,8)
movsd  -0x1e0(%rbp),%xmm1
movsd  -0x1f8(%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,(%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    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
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,(%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    -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
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
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)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1163 <kern_r8_fma_u1_b+0x63>
add    $0x1b8,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kern_r8_fma_u1_b>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0xa0(%rsp),%rax
test   %rax,%rax
jle    150d <kern_r8_fma_u1_b+0x40d>
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),%xmm9
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  0x8(%r10,%r14,2),%xmm15
movsd  0x8(%r10,%r14,1),%xmm8
movsd  0x0(%rbp,%r14,1),%xmm0
movaps %xmm0,-0x18(%rsp)
mov    0x70(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm3
movapd %xmm3,%xmm0
unpckhpd %xmm3,%xmm0
xorpd  %xmm9,%xmm0
movsd  (%r11,%r14,4),%xmm4
movsd  0x8(%r11,%r14,4),%xmm2
unpcklpd %xmm4,%xmm4
unpcklpd %xmm3,%xmm0
mulpd  %xmm4,%xmm3
addpd  %xmm0,%xmm3
mov    0x80(%rsp),%r15
movupd (%r15,%r14,8),%xmm6
movapd %xmm6,%xmm0
unpckhpd %xmm6,%xmm0
xorpd  %xmm9,%xmm0
unpcklpd %xmm6,%xmm0
mulpd  %xmm4,%xmm6
addpd  %xmm0,%xmm6
mov    0x58(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm0
movapd %xmm0,%xmm5
unpckhpd %xmm0,%xmm5
xorpd  %xmm9,%xmm5
movsd  (%r11,%r14,2),%xmm1
unpcklpd %xmm1,%xmm1
unpcklpd %xmm0,%xmm5
mulpd  %xmm0,%xmm1
addpd  %xmm5,%xmm1
mov    0x68(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm0
movapd %xmm0,%xmm5
unpckhpd %xmm0,%xmm5
xorpd  %xmm9,%xmm5
unpcklpd %xmm0,%xmm5
mulpd  %xmm0,%xmm4
addpd  %xmm5,%xmm4
mov    0x78(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm0
movapd %xmm0,%xmm7
unpckhpd %xmm0,%xmm7
xorpd  %xmm9,%xmm7
movsd  (%r10,%r14,2),%xmm5
unpcklpd %xmm5,%xmm5
unpcklpd %xmm0,%xmm7
mulpd  %xmm0,%xmm5
addpd  %xmm7,%xmm5
mov    0x50(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm0
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm3
movapd %xmm3,%xmm10
addpd  %xmm0,%xmm10
subpd  %xmm3,%xmm0
mov    0x60(%rsp),%rbx
movupd (%rbx,%r14,8),%xmm14
mulpd  %xmm2,%xmm6
movapd %xmm6,%xmm3
addpd  %xmm14,%xmm3
subpd  %xmm6,%xmm14
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  %xmm15,%xmm2
movapd %xmm1,%xmm13
subsd  %xmm2,%xmm13
movapd %xmm15,%xmm7
unpcklpd %xmm15,%xmm7
mulpd  %xmm5,%xmm7
addpd  %xmm1,%xmm7
unpckhpd %xmm5,%xmm5
unpckhpd %xmm1,%xmm1
mulsd  %xmm15,%xmm5
subsd  %xmm5,%xmm1
movapd %xmm10,%xmm2
unpckhpd %xmm10,%xmm2
xorpd  %xmm9,%xmm2
movsd  (%r11,%r14,1),%xmm5
unpcklpd %xmm5,%xmm5
unpcklpd %xmm10,%xmm2
mulpd  %xmm10,%xmm5
addpd  %xmm2,%xmm5
movapd %xmm3,%xmm2
unpckhpd %xmm3,%xmm2
xorpd  %xmm9,%xmm2
movsd  (%r10,%r14,1),%xmm4
unpcklpd %xmm4,%xmm4
unpcklpd %xmm3,%xmm2
mulpd  %xmm3,%xmm4
addpd  %xmm2,%xmm4
movapd %xmm0,%xmm2
unpckhpd %xmm0,%xmm2
xorpd  %xmm9,%xmm2
movsd  -0x8(%r12,%r14,1),%xmm6
unpcklpd %xmm6,%xmm6
unpcklpd %xmm0,%xmm2
mulpd  %xmm0,%xmm6
addpd  %xmm2,%xmm6
movapd %xmm14,%xmm2
unpckhpd %xmm14,%xmm2
xorpd  %xmm9,%xmm2
movsd  -0x8(%rbp,%r14,1),%xmm0
unpcklpd %xmm0,%xmm0
unpcklpd %xmm14,%xmm2
mulpd  %xmm14,%xmm0
movsd  0x8(%r11,%r14,2),%xmm14
addpd  %xmm2,%xmm0
unpcklpd %xmm14,%xmm14
mulpd  %xmm14,%xmm7
movapd %xmm7,%xmm10
addpd  %xmm11,%xmm10
subpd  %xmm7,%xmm11
movapd %xmm1,%xmm3
xorpd  %xmm9,%xmm3
unpcklpd %xmm13,%xmm3
xorpd  %xmm9,%xmm13
unpcklpd %xmm13,%xmm1
movsd  0x8(%r11,%r14,1),%xmm13
mulpd  %xmm14,%xmm3
addpd  %xmm12,%xmm3
mulpd  %xmm14,%xmm1
addpd  %xmm12,%xmm1
movapd %xmm4,%xmm2
mulsd  %xmm8,%xmm2
movapd %xmm5,%xmm14
subsd  %xmm2,%xmm14
movapd %xmm8,%xmm2
unpcklpd %xmm8,%xmm2
mulpd  %xmm4,%xmm2
addpd  %xmm5,%xmm2
unpckhpd %xmm4,%xmm4
unpckhpd %xmm5,%xmm5
mulsd  %xmm8,%xmm4
subsd  %xmm4,%xmm5
movapd %xmm0,%xmm4
movapd -0x18(%rsp),%xmm7
mulsd  %xmm7,%xmm4
movapd %xmm6,%xmm12
subsd  %xmm4,%xmm12
movapd %xmm7,%xmm4
unpcklpd %xmm7,%xmm4
mulpd  %xmm0,%xmm4
unpckhpd %xmm0,%xmm0
mulsd  %xmm7,%xmm0
movsd  (%r12,%r14,1),%xmm8
addpd  %xmm6,%xmm4
unpckhpd %xmm6,%xmm6
subsd  %xmm0,%xmm6
unpcklpd %xmm13,%xmm13
mulpd  %xmm13,%xmm2
movapd %xmm2,%xmm0
addpd  %xmm10,%xmm0
movupd %xmm0,(%rdi,%r14,1)
subpd  %xmm2,%xmm10
movupd %xmm10,(%r8,%r14,1)
unpcklpd %xmm8,%xmm8
mulpd  %xmm8,%xmm4
movapd %xmm4,%xmm0
addpd  %xmm3,%xmm0
movupd %xmm0,(%rsi,%r14,1)
subpd  %xmm4,%xmm3
movupd %xmm3,(%r9,%r14,1)
movapd %xmm5,%xmm0
xorpd  %xmm9,%xmm0
unpcklpd %xmm14,%xmm0
mulpd  %xmm13,%xmm0
addpd  %xmm11,%xmm0
movupd %xmm0,(%rdx,%r14,1)
xorpd  %xmm9,%xmm14
unpcklpd %xmm14,%xmm5
mulpd  %xmm13,%xmm5
addpd  %xmm11,%xmm5
movupd %xmm5,0x0(%r13,%r14,1)
movapd %xmm6,%xmm0
xorpd  %xmm9,%xmm0
unpcklpd %xmm12,%xmm0
mulpd  %xmm8,%xmm0
addpd  %xmm1,%xmm0
movupd %xmm0,(%rcx,%r14,1)
xorpd  %xmm9,%xmm12
unpcklpd %xmm12,%xmm6
mulpd  %xmm8,%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_b+0x60>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @kern_r8_fma_u1_b(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 = fneg double %211
%213 = call double @llvm.fmuladd.f64(double %204, double %205, double %212)
store double %213, double* %60
%214 = load double*, double** %34
%215 = load i64, i64* %41
%216 = mul nsw i64 16, %215
%217 = add nsw i64 %216, 1
%218 = getelementptr inbounds double, double* %214, i64 %217
%219 = load double, double* %218
%220 = load double, double* %48
%221 = load double*, double** %34
%222 = load i64, i64* %41
%223 = mul nsw i64 16, %222
%224 = getelementptr inbounds double, double* %221, i64 %223
%225 = load double, double* %224
%226 = call double @llvm.fmuladd.f64(double %219, double %220, 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 = fneg double %238
%240 = call double @llvm.fmuladd.f64(double %231, double %232, double %239)
store double %240, double* %64
%241 = load double*, double** %36
%242 = load i64, i64* %41
%243 = mul nsw i64 16, %242
%244 = add nsw i64 %243, 1
%245 = getelementptr inbounds double, double* %241, i64 %244
%246 = load double, double* %245
%247 = load double, double* %48
%248 = load double*, double** %36
%249 = load i64, i64* %41
%250 = mul nsw i64 16, %249
%251 = getelementptr inbounds double, double* %248, i64 %250
%252 = load double, double* %251
%253 = call double @llvm.fmuladd.f64(double %246, double %247, 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 = fneg double %265
%267 = call double @llvm.fmuladd.f64(double %258, double %259, double %266)
store double %267, double* %56
%268 = load double*, double** %31
%269 = load i64, i64* %41
%270 = mul nsw i64 16, %269
%271 = add nsw i64 %270, 1
%272 = getelementptr inbounds double, double* %268, i64 %271
%273 = load double, double* %272
%274 = load double, double* %44
%275 = load double*, double** %31
%276 = load i64, i64* %41
%277 = mul nsw i64 16, %276
%278 = getelementptr inbounds double, double* %275, i64 %277
%279 = load double, double* %278
%280 = call double @llvm.fmuladd.f64(double %273, double %274, 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 = fneg double %292
%294 = call double @llvm.fmuladd.f64(double %285, double %286, double %293)
store double %294, double* %58
%295 = load double*, double** %33
%296 = load i64, i64* %41
%297 = mul nsw i64 16, %296
%298 = add nsw i64 %297, 1
%299 = getelementptr inbounds double, double* %295, i64 %298
%300 = load double, double* %299
%301 = load double, double* %48
%302 = load double*, double** %33
%303 = load i64, i64* %41
%304 = mul nsw i64 16, %303
%305 = getelementptr inbounds double, double* %302, i64 %304
%306 = load double, double* %305
%307 = call double @llvm.fmuladd.f64(double %300, double %301, 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 = fneg double %319
%321 = call double @llvm.fmuladd.f64(double %312, double %313, double %320)
store double %321, double* %62
%322 = load double*, double** %35
%323 = load i64, i64* %41
%324 = mul nsw i64 16, %323
%325 = add nsw i64 %324, 1
%326 = getelementptr inbounds double, double* %322, i64 %325
%327 = load double, double* %326
%328 = load double, double* %52
%329 = load double*, double** %35
%330 = load i64, i64* %41
%331 = mul nsw i64 16, %330
%332 = getelementptr inbounds double, double* %329, i64 %331
%333 = load double, double* %332
%334 = call double @llvm.fmuladd.f64(double %327, double %328, 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 = fneg double %463
%465 = call double @llvm.fmuladd.f64(double %461, double %462, double %464)
store double %465, double* %76
%466 = load double, double* %67
%467 = load double, double* %42
%468 = load double, double* %66
%469 = call double @llvm.fmuladd.f64(double %466, double %467, double %468)
store double %469, double* %77
%470 = load double, double* %68
%471 = load double, double* %46
%472 = load double, double* %69
%473 = fneg double %472
%474 = call double @llvm.fmuladd.f64(double %470, double %471, double %473)
store double %474, double* %80
%475 = load double, double* %69
%476 = load double, double* %46
%477 = load double, double* %68
%478 = call double @llvm.fmuladd.f64(double %475, double %476, double %477)
store double %478, double* %81
%479 = load double, double* %70
%480 = load double, double* %50
%481 = load double, double* %71
%482 = fneg double %481
%483 = call double @llvm.fmuladd.f64(double %479, double %480, double %482)
store double %483, double* %84
%484 = load double, double* %71
%485 = load double, double* %50
%486 = load double, double* %70
%487 = call double @llvm.fmuladd.f64(double %484, double %485, double %486)
store double %487, double* %85
%488 = load double, double* %72
%489 = load double, double* %54
%490 = load double, double* %73
%491 = fneg double %490
%492 = call double @llvm.fmuladd.f64(double %488, double %489, double %491)
store double %492, double* %88
%493 = load double, double* %73
%494 = load double, double* %54
%495 = load double, double* %72
%496 = call double @llvm.fmuladd.f64(double %493, double %494, 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 = fneg double %516
%519 = call double @llvm.fmuladd.f64(double %518, double %517, double %515)
store double %519, double* %98
%520 = load double, double* %83
%521 = load double, double* %86
%522 = load double, double* %45
%523 = call double @llvm.fmuladd.f64(double %521, double %522, double %520)
store double %523, double* %99
%524 = load double, double* %82
%525 = load double, double* %87
%526 = load double, double* %45
%527 = call double @llvm.fmuladd.f64(double %525, double %526, double %524)
store double %527, double* %102
%528 = load double, double* %83
%529 = load double, double* %86
%530 = load double, double* %45
%531 = fneg double %529
%532 = call double @llvm.fmuladd.f64(double %531, double %530, double %528)
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 = fneg double %642
%645 = call double @llvm.fmuladd.f64(double %644, double %643, double %641)
%646 = load double*, double** %23
%647 = load i64, i64* %41
%648 = mul nsw i64 2, %647
%649 = getelementptr inbounds double, double* %646, i64 %648
store double %645, double* %649
%650 = load double, double* %95
%651 = load double, double* %96
%652 = load double, double* %43
%653 = call double @llvm.fmuladd.f64(double %651, double %652, double %650)
%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 = call double @llvm.fmuladd.f64(double %660, double %661, double %659)
%663 = load double*, double** %27
%664 = load i64, i64* %41
%665 = mul nsw i64 2, %664
%666 = getelementptr inbounds double, double* %663, i64 %665
store double %662, double* %666
%667 = load double, double* %95
%668 = load double, double* %96
%669 = load double, double* %43
%670 = fneg double %668
%671 = call double @llvm.fmuladd.f64(double %670, double %669, double %667)
%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 = fneg double %678
%681 = call double @llvm.fmuladd.f64(double %680, double %679, double %677)
%682 = load double*, double** %24
%683 = load i64, i64* %41
%684 = mul nsw i64 2, %683
%685 = getelementptr inbounds double, double* %682, i64 %684
store double %681, double* %685
%686 = load double, double* %103
%687 = load double, double* %104
%688 = load double, double* %51
%689 = call double @llvm.fmuladd.f64(double %687, double %688, double %686)
%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 = call double @llvm.fmuladd.f64(double %696, double %697, double %695)
%699 = load double*, double** %28
%700 = load i64, i64* %41
%701 = mul nsw i64 2, %700
%702 = getelementptr inbounds double, double* %699, i64 %701
store double %698, double* %702
%703 = load double, double* %103
%704 = load double, double* %104
%705 = load double, double* %51
%706 = fneg double %704
%707 = call double @llvm.fmuladd.f64(double %706, double %705, double %703)
%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_b(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 %246
22: ; preds = %20, %22
%23 = phi i64 [ %244, %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 1
%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 = insertelement <2 x double> poison, double %66, i64 0
%70 = shufflevector <2 x double> %69, <2 x double> %64, <2 x i32> <i32 0, i32 2>
%71 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %64, <2 x double> %68, <2 x double> %70)
%72 = getelementptr inbounds double, double* %15, i64 %61
%73 = bitcast double* %72 to <2 x double>*
%74 = load <2 x double>, <2 x double>* %73
%75 = extractelement <2 x double> %74, i64 1
%76 = fneg double %75
%77 = insertelement <2 x double> poison, double %76, i64 0
%78 = shufflevector <2 x double> %77, <2 x double> %74, <2 x i32> <i32 0, i32 2>
%79 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %74, <2 x double> %68, <2 x double> %78)
%80 = getelementptr inbounds double, double* %10, i64 %61
%81 = bitcast double* %80 to <2 x double>*
%82 = load <2 x double>, <2 x double>* %81
%83 = extractelement <2 x double> %82, i64 1
%84 = fneg double %83
%85 = insertelement <2 x double> poison, double %32, i64 0
%86 = shufflevector <2 x double> %85, <2 x double> poison, <2 x i32> zeroinitializer
%87 = insertelement <2 x double> poison, double %84, i64 0
%88 = shufflevector <2 x double> %87, <2 x double> %82, <2 x i32> <i32 0, i32 2>
%89 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %82, <2 x double> %86, <2 x double> %88)
%90 = getelementptr inbounds double, double* %12, i64 %61
%91 = bitcast double* %90 to <2 x double>*
%92 = load <2 x double>, <2 x double>* %91
%93 = extractelement <2 x double> %92, i64 1
%94 = fneg double %93
%95 = insertelement <2 x double> poison, double %94, i64 0
%96 = shufflevector <2 x double> %95, <2 x double> %92, <2 x i32> <i32 0, i32 2>
%97 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %92, <2 x double> %68, <2 x double> %96)
%98 = getelementptr inbounds double, double* %14, i64 %61
%99 = bitcast double* %98 to <2 x double>*
%100 = load <2 x double>, <2 x double>* %99
%101 = extractelement <2 x double> %100, i64 1
%102 = fneg double %101
%103 = insertelement <2 x double> poison, double %37, i64 0
%104 = shufflevector <2 x double> %103, <2 x double> poison, <2 x i32> zeroinitializer
%105 = insertelement <2 x double> poison, double %102, i64 0
%106 = shufflevector <2 x double> %105, <2 x double> %100, <2 x i32> <i32 0, i32 2>
%107 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %100, <2 x double> %104, <2 x double> %106)
%108 = getelementptr inbounds double, double* %9, i64 %61
%109 = bitcast double* %108 to <2 x double>*
%110 = load <2 x double>, <2 x double>* %109
%111 = insertelement <2 x double> poison, double %29, i64 0
%112 = shufflevector <2 x double> %111, <2 x double> poison, <2 x i32> zeroinitializer
%113 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %71, <2 x double> %112, <2 x double> %110)
%114 = fneg <2 x double> %71
%115 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %114, <2 x double> %112, <2 x double> %110)
%116 = getelementptr inbounds double, double* %11, i64 %61
%117 = bitcast double* %116 to <2 x double>*
%118 = load <2 x double>, <2 x double>* %117
%119 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %79, <2 x double> %112, <2 x double> %118)
%120 = fneg <2 x double> %79
%121 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %120, <2 x double> %112, <2 x double> %118)
%122 = getelementptr inbounds double, double* %8, i64 %61
%123 = bitcast double* %122 to <2 x double>*
%124 = load <2 x double>, <2 x double>* %123
%125 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %97, <2 x double> %112, <2 x double> %124)
%126 = fneg <2 x double> %97
%127 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %126, <2 x double> %112, <2 x double> %124)
%128 = extractelement <2 x double> %107, i64 0
%129 = fneg double %128
%130 = extractelement <2 x double> %89, i64 0
%131 = tail call double @llvm.fmuladd.f64(double %129, double %39, double %130)
%132 = insertelement <2 x double> poison, double %39, i64 0
%133 = shufflevector <2 x double> %132, <2 x double> poison, <2 x i32> zeroinitializer
%134 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %107, <2 x double> %133, <2 x double> %89)
%135 = extractelement <2 x double> %107, i64 1
%136 = fneg double %135
%137 = extractelement <2 x double> %89, i64 1
%138 = tail call double @llvm.fmuladd.f64(double %136, double %39, double %137)
%139 = extractelement <2 x double> %113, i64 1
%140 = fneg double %139
%141 = insertelement <2 x double> poison, double %42, i64 0
%142 = shufflevector <2 x double> %141, <2 x double> poison, <2 x i32> zeroinitializer
%143 = insertelement <2 x double> poison, double %140, i64 0
%144 = shufflevector <2 x double> %143, <2 x double> %113, <2 x i32> <i32 0, i32 2>
%145 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %113, <2 x double> %142, <2 x double> %144)
%146 = extractelement <2 x double> %119, i64 1
%147 = fneg double %146
%148 = insertelement <2 x double> poison, double %47, i64 0
%149 = shufflevector <2 x double> %148, <2 x double> poison, <2 x i32> zeroinitializer
%150 = insertelement <2 x double> poison, double %147, i64 0
%151 = shufflevector <2 x double> %150, <2 x double> %119, <2 x i32> <i32 0, i32 2>
%152 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %119, <2 x double> %149, <2 x double> %151)
%153 = extractelement <2 x double> %115, i64 1
%154 = fneg double %153
%155 = insertelement <2 x double> poison, double %53, i64 0
%156 = shufflevector <2 x double> %155, <2 x double> poison, <2 x i32> zeroinitializer
%157 = insertelement <2 x double> poison, double %154, i64 0
%158 = shufflevector <2 x double> %157, <2 x double> %115, <2 x i32> <i32 0, i32 2>
%159 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %115, <2 x double> %156, <2 x double> %158)
%160 = extractelement <2 x double> %121, i64 1
%161 = fneg double %160
%162 = insertelement <2 x double> poison, double %58, i64 0
%163 = shufflevector <2 x double> %162, <2 x double> poison, <2 x i32> zeroinitializer
%164 = insertelement <2 x double> poison, double %161, i64 0
%165 = shufflevector <2 x double> %164, <2 x double> %121, <2 x i32> <i32 0, i32 2>
%166 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %121, <2 x double> %163, <2 x double> %165)
%167 = insertelement <2 x double> poison, double %35, i64 0
%168 = shufflevector <2 x double> %167, <2 x double> poison, <2 x i32> zeroinitializer
%169 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %134, <2 x double> %168, <2 x double> %125)
%170 = fneg <2 x double> %134
%171 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %170, <2 x double> %168, <2 x double> %125)
%172 = fneg double %138
%173 = insertelement <2 x double> poison, double %172, i64 0
%174 = insertelement <2 x double> %173, double %131, i64 1
%175 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %174, <2 x double> %168, <2 x double> %127)
%176 = fneg double %131
%177 = insertelement <2 x double> poison, double %138, i64 0
%178 = insertelement <2 x double> %177, double %176, i64 1
%179 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %178, <2 x double> %168, <2 x double> %127)
%180 = insertelement <2 x double> poison, double %49, i64 0
%181 = shufflevector <2 x double> %180, <2 x double> poison, <2 x i32> zeroinitializer
%182 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %152, <2 x double> %181, <2 x double> %145)
%183 = extractelement <2 x double> %152, i64 0
%184 = fneg double %183
%185 = extractelement <2 x double> %145, i64 0
%186 = tail call double @llvm.fmuladd.f64(double %184, double %49, double %185)
%187 = extractelement <2 x double> %152, i64 1
%188 = fneg double %187
%189 = extractelement <2 x double> %145, i64 1
%190 = tail call double @llvm.fmuladd.f64(double %188, double %49, double %189)
%191 = insertelement <2 x double> poison, double %60, i64 0
%192 = shufflevector <2 x double> %191, <2 x double> poison, <2 x i32> zeroinitializer
%193 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %166, <2 x double> %192, <2 x double> %159)
%194 = extractelement <2 x double> %166, i64 0
%195 = fneg double %194
%196 = extractelement <2 x double> %159, i64 0
%197 = tail call double @llvm.fmuladd.f64(double %195, double %60, double %196)
%198 = extractelement <2 x double> %166, i64 1
%199 = fneg double %198
%200 = extractelement <2 x double> %159, i64 1
%201 = tail call double @llvm.fmuladd.f64(double %199, double %60, double %200)
%202 = getelementptr inbounds double, double* %0, i64 %40
%203 = insertelement <2 x double> poison, double %45, i64 0
%204 = shufflevector <2 x double> %203, <2 x double> poison, <2 x i32> zeroinitializer
%205 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %182, <2 x double> %204, <2 x double> %169)
%206 = bitcast double* %202 to <2 x double>*
store <2 x double> %205, <2 x double>* %206
%207 = getelementptr inbounds double, double* %4, i64 %40
%208 = fneg <2 x double> %182
%209 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %208, <2 x double> %204, <2 x double> %169)
%210 = bitcast double* %207 to <2 x double>*
store <2 x double> %209, <2 x double>* %210
%211 = getelementptr inbounds double, double* %1, i64 %40
%212 = insertelement <2 x double> poison, double %56, 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> %193, <2 x double> %213, <2 x double> %175)
%215 = bitcast double* %211 to <2 x double>*
store <2 x double> %214, <2 x double>* %215
%216 = getelementptr inbounds double, double* %5, i64 %40
%217 = fneg <2 x double> %193
%218 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %217, <2 x double> %213, <2 x double> %175)
%219 = bitcast double* %216 to <2 x double>*
store <2 x double> %218, <2 x double>* %219
%220 = fneg double %190
%221 = getelementptr inbounds double, double* %2, i64 %40
%222 = insertelement <2 x double> poison, double %220, i64 0
%223 = insertelement <2 x double> %222, double %186, i64 1
%224 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %223, <2 x double> %204, <2 x double> %171)
%225 = bitcast double* %221 to <2 x double>*
store <2 x double> %224, <2 x double>* %225
%226 = getelementptr inbounds double, double* %6, i64 %40
%227 = fneg double %186
%228 = insertelement <2 x double> poison, double %190, i64 0
%229 = insertelement <2 x double> %228, double %227, i64 1
%230 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %229, <2 x double> %204, <2 x double> %171)
%231 = bitcast double* %226 to <2 x double>*
store <2 x double> %230, <2 x double>* %231
%232 = fneg double %201
%233 = getelementptr inbounds double, double* %3, i64 %40
%234 = insertelement <2 x double> poison, double %232, i64 0
%235 = insertelement <2 x double> %234, double %197, i64 1
%236 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %235, <2 x double> %213, <2 x double> %179)
%237 = bitcast double* %233 to <2 x double>*
store <2 x double> %236, <2 x double>* %237
%238 = getelementptr inbounds double, double* %7, i64 %40
%239 = fneg double %197
%240 = insertelement <2 x double> poison, double %201, i64 0
%241 = insertelement <2 x double> %240, double %239, i64 1
%242 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %241, <2 x double> %213, <2 x double> %179)
%243 = bitcast double* %238 to <2 x double>*
store <2 x double> %242, <2 x double>* %243
%244 = add nuw nsw i64 %23, 1
%245 = icmp eq i64 %244, %19
br i1 %245, label %246, label %22
246: ; preds = %22, %20
ret void
}