void matrix_ft_atimes(const double *x, double *y, double ex, double ey,
                      double ez, double xa, double ya, double yb, double xc,
                      double yc) {
  double a1, a2;
  double b1;
  double c1, c2;
  double b1x, b1y, b1z;
  double exx, eyy, ezz, exy, eyz, exz;
  a1 = ya;
  a2 = xa - ya;
  b1 = yb;
  c1 = yc;
  c2 = xc - yc;
  exx = ex * ex;
  eyy = ey * ey;
  ezz = ez * ez;
  exy = ex * ey;
  eyz = ey * ez;
  exz = ez * ex;
  b1x = b1 * ex;
  b1y = b1 * ey;
  b1z = b1 * ez;
  y[0] += x[0] * (a1 + a2 * exx);
  y[1] += x[1] * (a1 + a2 * eyy);
  y[2] += x[2] * (a1 + a2 * ezz);
  y[0] += x[1] * (a2 * exy);
  y[1] += x[0] * (a2 * exy);
  y[1] += x[2] * (a2 * eyz);
  y[2] += x[1] * (a2 * eyz);
  y[2] += x[0] * (a2 * exz);
  y[0] += x[2] * (a2 * exz);
  y[3] += x[1] * (+b1z);
  y[3] += x[2] * (-b1y);
  y[4] += x[0] * (-b1z);
  y[4] += x[2] * (+b1x);
  y[5] += x[0] * (+b1y);
  y[5] += x[1] * (-b1x);
  y[1] -= x[3] * (+b1z);
  y[2] -= x[3] * (-b1y);
  y[0] -= x[4] * (-b1z);
  y[2] -= x[4] * (+b1x);
  y[0] -= x[5] * (+b1y);
  y[1] -= x[5] * (-b1x);
  y[3] += x[3] * (c1 + c2 * exx);
  y[4] += x[4] * (c1 + c2 * eyy);
  y[5] += x[5] * (c1 + c2 * ezz);
  y[3] += x[4] * (c2 * exy);
  y[4] += x[3] * (c2 * exy);
  y[4] += x[5] * (c2 * eyz);
  y[5] += x[4] * (c2 * eyz);
  y[5] += x[3] * (c2 * exz);
  y[3] += x[5] * (c2 * exz);
}


x86 assembly (clang, -O0):
<matrix_ft_atimes>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
movsd  -0x68(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x58(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x58(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  -0xb0(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  -0xb0(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  -0xb8(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  -0xb8(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  -0xc0(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  -0xc0(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x90(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x88(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x80(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x90(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rdx
xor    %rdx,%rcx
movq   %rcx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm1
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rdx
xor    %rdx,%rcx
movq   %rcx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rdx
xor    %rdx,%rcx
movq   %rcx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x80(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm1
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rdx
xor    %rdx,%rcx
movq   %rcx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x88(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rdx
xor    %rdx,%rcx
movq   %rcx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x80(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rdx
xor    %rdx,%rcx
movq   %rcx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  -0xb0(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  -0xb0(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  -0xb8(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  -0xb8(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  -0xc0(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  -0xc0(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<matrix_ft_atimes>:
movsd  %xmm7,-0x8(%rsp)
movsd  %xmm6,-0x10(%rsp)
movapd %xmm0,%xmm13
subsd  %xmm4,%xmm3
movapd %xmm0,%xmm6
mulsd  %xmm0,%xmm6
movapd %xmm1,%xmm12
mulsd  %xmm1,%xmm12
movapd %xmm2,%xmm10
mulsd  %xmm2,%xmm10
movapd %xmm0,%xmm11
mulsd  %xmm1,%xmm11
movapd %xmm1,%xmm7
mulsd  %xmm2,%xmm7
movapd %xmm0,%xmm8
mulsd  %xmm2,%xmm8
mulsd  %xmm5,%xmm13
movapd %xmm3,%xmm14
mulsd  %xmm6,%xmm14
addsd  %xmm4,%xmm14
mulsd  (%rdi),%xmm14
mulsd  %xmm5,%xmm1
addsd  (%rsi),%xmm14
movsd  %xmm14,(%rsi)
movapd %xmm3,%xmm0
mulsd  %xmm12,%xmm0
addsd  %xmm4,%xmm0
mulsd  0x8(%rdi),%xmm0
mulsd  %xmm5,%xmm2
addsd  0x8(%rsi),%xmm0
movsd  %xmm0,0x8(%rsi)
movapd %xmm3,%xmm5
mulsd  %xmm10,%xmm5
addsd  %xmm4,%xmm5
mulsd  0x10(%rdi),%xmm5
addsd  0x10(%rsi),%xmm5
movsd  %xmm5,0x10(%rsi)
movapd %xmm11,%xmm4
mulsd  %xmm3,%xmm4
movsd  0x8(%rdi),%xmm15
mulsd  %xmm4,%xmm15
addsd  %xmm14,%xmm15
movsd  %xmm15,(%rsi)
mulsd  (%rdi),%xmm4
addsd  %xmm0,%xmm4
movsd  %xmm4,0x8(%rsi)
movapd %xmm7,%xmm9
mulsd  %xmm3,%xmm9
movsd  0x10(%rdi),%xmm14
mulsd  %xmm9,%xmm14
addsd  %xmm4,%xmm14
movsd  %xmm14,0x8(%rsi)
mulsd  0x8(%rdi),%xmm9
addsd  %xmm5,%xmm9
movsd  %xmm9,0x10(%rsi)
mulsd  %xmm8,%xmm3
movsd  (%rdi),%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm9,%xmm0
movsd  %xmm0,0x10(%rsi)
mulsd  0x10(%rdi),%xmm3
addsd  %xmm15,%xmm3
movsd  %xmm3,(%rsi)
movsd  0x8(%rdi),%xmm9
mulsd  %xmm2,%xmm9
addsd  0x18(%rsi),%xmm9
movsd  %xmm9,0x18(%rsi)
movsd  0x10(%rdi),%xmm4
mulsd  %xmm1,%xmm4
subsd  %xmm4,%xmm9
movsd  %xmm9,0x18(%rsi)
movsd  (%rdi),%xmm4
mulsd  %xmm2,%xmm4
movsd  0x20(%rsi),%xmm5
subsd  %xmm4,%xmm5
movsd  %xmm5,0x20(%rsi)
movsd  0x10(%rdi),%xmm15
mulsd  %xmm13,%xmm15
addsd  %xmm5,%xmm15
movsd  %xmm15,0x20(%rsi)
movsd  (%rdi),%xmm4
mulsd  %xmm1,%xmm4
addsd  0x28(%rsi),%xmm4
movsd  %xmm4,0x28(%rsi)
movsd  0x8(%rdi),%xmm5
mulsd  %xmm13,%xmm5
subsd  %xmm5,%xmm4
movsd  %xmm4,0x28(%rsi)
movsd  0x18(%rdi),%xmm5
mulsd  %xmm2,%xmm5
subsd  %xmm5,%xmm14
movsd  %xmm14,0x8(%rsi)
movsd  0x18(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm0,%xmm5
movsd  %xmm5,0x10(%rsi)
mulsd  0x20(%rdi),%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,(%rsi)
movsd  0x20(%rdi),%xmm0
mulsd  %xmm13,%xmm0
subsd  %xmm0,%xmm5
movsd  %xmm5,0x10(%rsi)
mulsd  0x28(%rdi),%xmm1
subsd  %xmm1,%xmm2
movsd  %xmm2,(%rsi)
mulsd  0x28(%rdi),%xmm13
addsd  %xmm14,%xmm13
movsd  %xmm13,0x8(%rsi)
movsd  -0x10(%rsp),%xmm2
movsd  -0x8(%rsp),%xmm0
subsd  %xmm0,%xmm2
mulsd  %xmm2,%xmm6
addsd  %xmm0,%xmm6
mulsd  0x18(%rdi),%xmm6
addsd  %xmm9,%xmm6
movsd  %xmm6,0x18(%rsi)
mulsd  %xmm2,%xmm12
addsd  %xmm0,%xmm12
mulsd  0x20(%rdi),%xmm12
addsd  %xmm15,%xmm12
mulsd  %xmm2,%xmm10
addsd  %xmm0,%xmm10
movsd  %xmm12,0x20(%rsi)
mulsd  0x28(%rdi),%xmm10
addsd  %xmm4,%xmm10
movsd  %xmm10,0x28(%rsi)
mulsd  %xmm2,%xmm11
movsd  0x20(%rdi),%xmm0
mulsd  %xmm11,%xmm0
addsd  %xmm6,%xmm0
movsd  %xmm0,0x18(%rsi)
mulsd  0x18(%rdi),%xmm11
addsd  %xmm12,%xmm11
movsd  %xmm11,0x20(%rsi)
mulsd  %xmm2,%xmm7
movsd  0x28(%rdi),%xmm1
mulsd  %xmm7,%xmm1
addsd  %xmm11,%xmm1
movsd  %xmm1,0x20(%rsi)
mulsd  0x20(%rdi),%xmm7
addsd  %xmm10,%xmm7
movsd  %xmm7,0x28(%rsi)
mulsd  %xmm2,%xmm8
movsd  0x18(%rdi),%xmm1
mulsd  %xmm8,%xmm1
addsd  %xmm7,%xmm1
movsd  %xmm1,0x28(%rsi)
mulsd  0x28(%rdi),%xmm8
addsd  %xmm0,%xmm8
movsd  %xmm8,0x18(%rsi)
ret

LLVM IR (-O0):
define void @matrix_ft_atimes(double* %0, double* %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9) {
%11 = alloca double*
%12 = alloca double*
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%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
store double* %0, double** %11
store double* %1, double** %12
store double %2, double* %13
store double %3, double* %14
store double %4, double* %15
store double %5, double* %16
store double %6, double* %17
store double %7, double* %18
store double %8, double* %19
store double %9, double* %20
%35 = load double, double* %17
store double %35, double* %21
%36 = load double, double* %16
%37 = load double, double* %17
%38 = fsub double %36, %37
store double %38, double* %22
%39 = load double, double* %18
store double %39, double* %23
%40 = load double, double* %20
store double %40, double* %24
%41 = load double, double* %19
%42 = load double, double* %20
%43 = fsub double %41, %42
store double %43, double* %25
%44 = load double, double* %13
%45 = load double, double* %13
%46 = fmul double %44, %45
store double %46, double* %29
%47 = load double, double* %14
%48 = load double, double* %14
%49 = fmul double %47, %48
store double %49, double* %30
%50 = load double, double* %15
%51 = load double, double* %15
%52 = fmul double %50, %51
store double %52, double* %31
%53 = load double, double* %13
%54 = load double, double* %14
%55 = fmul double %53, %54
store double %55, double* %32
%56 = load double, double* %14
%57 = load double, double* %15
%58 = fmul double %56, %57
store double %58, double* %33
%59 = load double, double* %15
%60 = load double, double* %13
%61 = fmul double %59, %60
store double %61, double* %34
%62 = load double, double* %23
%63 = load double, double* %13
%64 = fmul double %62, %63
store double %64, double* %26
%65 = load double, double* %23
%66 = load double, double* %14
%67 = fmul double %65, %66
store double %67, double* %27
%68 = load double, double* %23
%69 = load double, double* %15
%70 = fmul double %68, %69
store double %70, double* %28
%71 = load double*, double** %11
%72 = getelementptr inbounds double, double* %71, i64 0
%73 = load double, double* %72
%74 = load double, double* %21
%75 = load double, double* %22
%76 = load double, double* %29
%77 = call double @llvm.fmuladd.f64(double %75, double %76, double %74)
%78 = load double*, double** %12
%79 = getelementptr inbounds double, double* %78, i64 0
%80 = load double, double* %79
%81 = call double @llvm.fmuladd.f64(double %73, double %77, double %80)
store double %81, double* %79
%82 = load double*, double** %11
%83 = getelementptr inbounds double, double* %82, i64 1
%84 = load double, double* %83
%85 = load double, double* %21
%86 = load double, double* %22
%87 = load double, double* %30
%88 = call double @llvm.fmuladd.f64(double %86, double %87, double %85)
%89 = load double*, double** %12
%90 = getelementptr inbounds double, double* %89, i64 1
%91 = load double, double* %90
%92 = call double @llvm.fmuladd.f64(double %84, double %88, double %91)
store double %92, double* %90
%93 = load double*, double** %11
%94 = getelementptr inbounds double, double* %93, i64 2
%95 = load double, double* %94
%96 = load double, double* %21
%97 = load double, double* %22
%98 = load double, double* %31
%99 = call double @llvm.fmuladd.f64(double %97, double %98, double %96)
%100 = load double*, double** %12
%101 = getelementptr inbounds double, double* %100, i64 2
%102 = load double, double* %101
%103 = call double @llvm.fmuladd.f64(double %95, double %99, double %102)
store double %103, double* %101
%104 = load double*, double** %11
%105 = getelementptr inbounds double, double* %104, i64 1
%106 = load double, double* %105
%107 = load double, double* %22
%108 = load double, double* %32
%109 = fmul double %107, %108
%110 = load double*, double** %12
%111 = getelementptr inbounds double, double* %110, i64 0
%112 = load double, double* %111
%113 = call double @llvm.fmuladd.f64(double %106, double %109, double %112)
store double %113, double* %111
%114 = load double*, double** %11
%115 = getelementptr inbounds double, double* %114, i64 0
%116 = load double, double* %115
%117 = load double, double* %22
%118 = load double, double* %32
%119 = fmul double %117, %118
%120 = load double*, double** %12
%121 = getelementptr inbounds double, double* %120, i64 1
%122 = load double, double* %121
%123 = call double @llvm.fmuladd.f64(double %116, double %119, double %122)
store double %123, double* %121
%124 = load double*, double** %11
%125 = getelementptr inbounds double, double* %124, i64 2
%126 = load double, double* %125
%127 = load double, double* %22
%128 = load double, double* %33
%129 = fmul double %127, %128
%130 = load double*, double** %12
%131 = getelementptr inbounds double, double* %130, i64 1
%132 = load double, double* %131
%133 = call double @llvm.fmuladd.f64(double %126, double %129, double %132)
store double %133, double* %131
%134 = load double*, double** %11
%135 = getelementptr inbounds double, double* %134, i64 1
%136 = load double, double* %135
%137 = load double, double* %22
%138 = load double, double* %33
%139 = fmul double %137, %138
%140 = load double*, double** %12
%141 = getelementptr inbounds double, double* %140, i64 2
%142 = load double, double* %141
%143 = call double @llvm.fmuladd.f64(double %136, double %139, double %142)
store double %143, double* %141
%144 = load double*, double** %11
%145 = getelementptr inbounds double, double* %144, i64 0
%146 = load double, double* %145
%147 = load double, double* %22
%148 = load double, double* %34
%149 = fmul double %147, %148
%150 = load double*, double** %12
%151 = getelementptr inbounds double, double* %150, i64 2
%152 = load double, double* %151
%153 = call double @llvm.fmuladd.f64(double %146, double %149, double %152)
store double %153, double* %151
%154 = load double*, double** %11
%155 = getelementptr inbounds double, double* %154, i64 2
%156 = load double, double* %155
%157 = load double, double* %22
%158 = load double, double* %34
%159 = fmul double %157, %158
%160 = load double*, double** %12
%161 = getelementptr inbounds double, double* %160, i64 0
%162 = load double, double* %161
%163 = call double @llvm.fmuladd.f64(double %156, double %159, double %162)
store double %163, double* %161
%164 = load double*, double** %11
%165 = getelementptr inbounds double, double* %164, i64 1
%166 = load double, double* %165
%167 = load double, double* %28
%168 = load double*, double** %12
%169 = getelementptr inbounds double, double* %168, i64 3
%170 = load double, double* %169
%171 = call double @llvm.fmuladd.f64(double %166, double %167, double %170)
store double %171, double* %169
%172 = load double*, double** %11
%173 = getelementptr inbounds double, double* %172, i64 2
%174 = load double, double* %173
%175 = load double, double* %27
%176 = fneg double %175
%177 = load double*, double** %12
%178 = getelementptr inbounds double, double* %177, i64 3
%179 = load double, double* %178
%180 = call double @llvm.fmuladd.f64(double %174, double %176, double %179)
store double %180, double* %178
%181 = load double*, double** %11
%182 = getelementptr inbounds double, double* %181, i64 0
%183 = load double, double* %182
%184 = load double, double* %28
%185 = fneg double %184
%186 = load double*, double** %12
%187 = getelementptr inbounds double, double* %186, i64 4
%188 = load double, double* %187
%189 = call double @llvm.fmuladd.f64(double %183, double %185, double %188)
store double %189, double* %187
%190 = load double*, double** %11
%191 = getelementptr inbounds double, double* %190, i64 2
%192 = load double, double* %191
%193 = load double, double* %26
%194 = load double*, double** %12
%195 = getelementptr inbounds double, double* %194, i64 4
%196 = load double, double* %195
%197 = call double @llvm.fmuladd.f64(double %192, double %193, double %196)
store double %197, double* %195
%198 = load double*, double** %11
%199 = getelementptr inbounds double, double* %198, i64 0
%200 = load double, double* %199
%201 = load double, double* %27
%202 = load double*, double** %12
%203 = getelementptr inbounds double, double* %202, i64 5
%204 = load double, double* %203
%205 = call double @llvm.fmuladd.f64(double %200, double %201, double %204)
store double %205, double* %203
%206 = load double*, double** %11
%207 = getelementptr inbounds double, double* %206, i64 1
%208 = load double, double* %207
%209 = load double, double* %26
%210 = fneg double %209
%211 = load double*, double** %12
%212 = getelementptr inbounds double, double* %211, i64 5
%213 = load double, double* %212
%214 = call double @llvm.fmuladd.f64(double %208, double %210, double %213)
store double %214, double* %212
%215 = load double*, double** %11
%216 = getelementptr inbounds double, double* %215, i64 3
%217 = load double, double* %216
%218 = load double, double* %28
%219 = load double*, double** %12
%220 = getelementptr inbounds double, double* %219, i64 1
%221 = load double, double* %220
%222 = fneg double %217
%223 = call double @llvm.fmuladd.f64(double %222, double %218, double %221)
store double %223, double* %220
%224 = load double*, double** %11
%225 = getelementptr inbounds double, double* %224, i64 3
%226 = load double, double* %225
%227 = load double, double* %27
%228 = fneg double %227
%229 = load double*, double** %12
%230 = getelementptr inbounds double, double* %229, i64 2
%231 = load double, double* %230
%232 = fneg double %226
%233 = call double @llvm.fmuladd.f64(double %232, double %228, double %231)
store double %233, double* %230
%234 = load double*, double** %11
%235 = getelementptr inbounds double, double* %234, i64 4
%236 = load double, double* %235
%237 = load double, double* %28
%238 = fneg double %237
%239 = load double*, double** %12
%240 = getelementptr inbounds double, double* %239, i64 0
%241 = load double, double* %240
%242 = fneg double %236
%243 = call double @llvm.fmuladd.f64(double %242, double %238, double %241)
store double %243, double* %240
%244 = load double*, double** %11
%245 = getelementptr inbounds double, double* %244, i64 4
%246 = load double, double* %245
%247 = load double, double* %26
%248 = load double*, double** %12
%249 = getelementptr inbounds double, double* %248, i64 2
%250 = load double, double* %249
%251 = fneg double %246
%252 = call double @llvm.fmuladd.f64(double %251, double %247, double %250)
store double %252, double* %249
%253 = load double*, double** %11
%254 = getelementptr inbounds double, double* %253, i64 5
%255 = load double, double* %254
%256 = load double, double* %27
%257 = load double*, double** %12
%258 = getelementptr inbounds double, double* %257, i64 0
%259 = load double, double* %258
%260 = fneg double %255
%261 = call double @llvm.fmuladd.f64(double %260, double %256, double %259)
store double %261, double* %258
%262 = load double*, double** %11
%263 = getelementptr inbounds double, double* %262, i64 5
%264 = load double, double* %263
%265 = load double, double* %26
%266 = fneg double %265
%267 = load double*, double** %12
%268 = getelementptr inbounds double, double* %267, i64 1
%269 = load double, double* %268
%270 = fneg double %264
%271 = call double @llvm.fmuladd.f64(double %270, double %266, double %269)
store double %271, double* %268
%272 = load double*, double** %11
%273 = getelementptr inbounds double, double* %272, i64 3
%274 = load double, double* %273
%275 = load double, double* %24
%276 = load double, double* %25
%277 = load double, double* %29
%278 = call double @llvm.fmuladd.f64(double %276, double %277, double %275)
%279 = load double*, double** %12
%280 = getelementptr inbounds double, double* %279, i64 3
%281 = load double, double* %280
%282 = call double @llvm.fmuladd.f64(double %274, double %278, double %281)
store double %282, double* %280
%283 = load double*, double** %11
%284 = getelementptr inbounds double, double* %283, i64 4
%285 = load double, double* %284
%286 = load double, double* %24
%287 = load double, double* %25
%288 = load double, double* %30
%289 = call double @llvm.fmuladd.f64(double %287, double %288, double %286)
%290 = load double*, double** %12
%291 = getelementptr inbounds double, double* %290, i64 4
%292 = load double, double* %291
%293 = call double @llvm.fmuladd.f64(double %285, double %289, double %292)
store double %293, double* %291
%294 = load double*, double** %11
%295 = getelementptr inbounds double, double* %294, i64 5
%296 = load double, double* %295
%297 = load double, double* %24
%298 = load double, double* %25
%299 = load double, double* %31
%300 = call double @llvm.fmuladd.f64(double %298, double %299, double %297)
%301 = load double*, double** %12
%302 = getelementptr inbounds double, double* %301, i64 5
%303 = load double, double* %302
%304 = call double @llvm.fmuladd.f64(double %296, double %300, double %303)
store double %304, double* %302
%305 = load double*, double** %11
%306 = getelementptr inbounds double, double* %305, i64 4
%307 = load double, double* %306
%308 = load double, double* %25
%309 = load double, double* %32
%310 = fmul double %308, %309
%311 = load double*, double** %12
%312 = getelementptr inbounds double, double* %311, i64 3
%313 = load double, double* %312
%314 = call double @llvm.fmuladd.f64(double %307, double %310, double %313)
store double %314, double* %312
%315 = load double*, double** %11
%316 = getelementptr inbounds double, double* %315, i64 3
%317 = load double, double* %316
%318 = load double, double* %25
%319 = load double, double* %32
%320 = fmul double %318, %319
%321 = load double*, double** %12
%322 = getelementptr inbounds double, double* %321, i64 4
%323 = load double, double* %322
%324 = call double @llvm.fmuladd.f64(double %317, double %320, double %323)
store double %324, double* %322
%325 = load double*, double** %11
%326 = getelementptr inbounds double, double* %325, i64 5
%327 = load double, double* %326
%328 = load double, double* %25
%329 = load double, double* %33
%330 = fmul double %328, %329
%331 = load double*, double** %12
%332 = getelementptr inbounds double, double* %331, i64 4
%333 = load double, double* %332
%334 = call double @llvm.fmuladd.f64(double %327, double %330, double %333)
store double %334, double* %332
%335 = load double*, double** %11
%336 = getelementptr inbounds double, double* %335, i64 4
%337 = load double, double* %336
%338 = load double, double* %25
%339 = load double, double* %33
%340 = fmul double %338, %339
%341 = load double*, double** %12
%342 = getelementptr inbounds double, double* %341, i64 5
%343 = load double, double* %342
%344 = call double @llvm.fmuladd.f64(double %337, double %340, double %343)
store double %344, double* %342
%345 = load double*, double** %11
%346 = getelementptr inbounds double, double* %345, i64 3
%347 = load double, double* %346
%348 = load double, double* %25
%349 = load double, double* %34
%350 = fmul double %348, %349
%351 = load double*, double** %12
%352 = getelementptr inbounds double, double* %351, i64 5
%353 = load double, double* %352
%354 = call double @llvm.fmuladd.f64(double %347, double %350, double %353)
store double %354, double* %352
%355 = load double*, double** %11
%356 = getelementptr inbounds double, double* %355, i64 5
%357 = load double, double* %356
%358 = load double, double* %25
%359 = load double, double* %34
%360 = fmul double %358, %359
%361 = load double*, double** %12
%362 = getelementptr inbounds double, double* %361, i64 3
%363 = load double, double* %362
%364 = call double @llvm.fmuladd.f64(double %357, double %360, double %363)
store double %364, double* %362
ret void
}

LLVM IR (-O2):
define void @matrix_ft_atimes(double* nocapture %0, double* nocapture %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9) {
%11 = fsub double %5, %6
%12 = fsub double %8, %9
%13 = fmul double %2, %2
%14 = fmul double %3, %3
%15 = fmul double %4, %4
%16 = fmul double %2, %3
%17 = fmul double %3, %4
%18 = fmul double %2, %4
%19 = fmul double %2, %7
%20 = fmul double %3, %7
%21 = fmul double %4, %7
%22 = load double, double* %0
%23 = tail call double @llvm.fmuladd.f64(double %11, double %13, double %6)
%24 = load double, double* %1
%25 = tail call double @llvm.fmuladd.f64(double %22, double %23, double %24)
store double %25, double* %1
%26 = getelementptr inbounds double, double* %0, i64 1
%27 = load double, double* %26
%28 = tail call double @llvm.fmuladd.f64(double %11, double %14, double %6)
%29 = getelementptr inbounds double, double* %1, i64 1
%30 = load double, double* %29
%31 = tail call double @llvm.fmuladd.f64(double %27, double %28, double %30)
store double %31, double* %29
%32 = getelementptr inbounds double, double* %0, i64 2
%33 = load double, double* %32
%34 = tail call double @llvm.fmuladd.f64(double %11, double %15, double %6)
%35 = getelementptr inbounds double, double* %1, i64 2
%36 = load double, double* %35
%37 = tail call double @llvm.fmuladd.f64(double %33, double %34, double %36)
store double %37, double* %35
%38 = load double, double* %26
%39 = fmul double %16, %11
%40 = tail call double @llvm.fmuladd.f64(double %38, double %39, double %25)
store double %40, double* %1
%41 = load double, double* %0
%42 = tail call double @llvm.fmuladd.f64(double %41, double %39, double %31)
store double %42, double* %29
%43 = load double, double* %32
%44 = fmul double %17, %11
%45 = tail call double @llvm.fmuladd.f64(double %43, double %44, double %42)
store double %45, double* %29
%46 = load double, double* %26
%47 = tail call double @llvm.fmuladd.f64(double %46, double %44, double %37)
store double %47, double* %35
%48 = load double, double* %0
%49 = fmul double %18, %11
%50 = tail call double @llvm.fmuladd.f64(double %48, double %49, double %47)
store double %50, double* %35
%51 = load double, double* %32
%52 = tail call double @llvm.fmuladd.f64(double %51, double %49, double %40)
store double %52, double* %1
%53 = load double, double* %26
%54 = getelementptr inbounds double, double* %1, i64 3
%55 = load double, double* %54
%56 = tail call double @llvm.fmuladd.f64(double %53, double %21, double %55)
store double %56, double* %54
%57 = load double, double* %32
%58 = fneg double %20
%59 = tail call double @llvm.fmuladd.f64(double %57, double %58, double %56)
store double %59, double* %54
%60 = load double, double* %0
%61 = fneg double %21
%62 = getelementptr inbounds double, double* %1, i64 4
%63 = load double, double* %62
%64 = tail call double @llvm.fmuladd.f64(double %60, double %61, double %63)
store double %64, double* %62
%65 = load double, double* %32
%66 = tail call double @llvm.fmuladd.f64(double %65, double %19, double %64)
store double %66, double* %62
%67 = load double, double* %0
%68 = getelementptr inbounds double, double* %1, i64 5
%69 = load double, double* %68
%70 = tail call double @llvm.fmuladd.f64(double %67, double %20, double %69)
store double %70, double* %68
%71 = load double, double* %26
%72 = fneg double %19
%73 = tail call double @llvm.fmuladd.f64(double %71, double %72, double %70)
store double %73, double* %68
%74 = getelementptr inbounds double, double* %0, i64 3
%75 = load double, double* %74
%76 = fneg double %75
%77 = tail call double @llvm.fmuladd.f64(double %76, double %21, double %45)
store double %77, double* %29
%78 = load double, double* %74
%79 = tail call double @llvm.fmuladd.f64(double %78, double %20, double %50)
store double %79, double* %35
%80 = getelementptr inbounds double, double* %0, i64 4
%81 = load double, double* %80
%82 = tail call double @llvm.fmuladd.f64(double %81, double %21, double %52)
store double %82, double* %1
%83 = load double, double* %80
%84 = fneg double %83
%85 = tail call double @llvm.fmuladd.f64(double %84, double %19, double %79)
store double %85, double* %35
%86 = getelementptr inbounds double, double* %0, i64 5
%87 = load double, double* %86
%88 = fneg double %87
%89 = tail call double @llvm.fmuladd.f64(double %88, double %20, double %82)
store double %89, double* %1
%90 = load double, double* %86
%91 = tail call double @llvm.fmuladd.f64(double %90, double %19, double %77)
store double %91, double* %29
%92 = load double, double* %74
%93 = tail call double @llvm.fmuladd.f64(double %12, double %13, double %9)
%94 = tail call double @llvm.fmuladd.f64(double %92, double %93, double %59)
store double %94, double* %54
%95 = load double, double* %80
%96 = tail call double @llvm.fmuladd.f64(double %12, double %14, double %9)
%97 = tail call double @llvm.fmuladd.f64(double %95, double %96, double %66)
store double %97, double* %62
%98 = load double, double* %86
%99 = tail call double @llvm.fmuladd.f64(double %12, double %15, double %9)
%100 = tail call double @llvm.fmuladd.f64(double %98, double %99, double %73)
store double %100, double* %68
%101 = load double, double* %80
%102 = fmul double %16, %12
%103 = tail call double @llvm.fmuladd.f64(double %101, double %102, double %94)
store double %103, double* %54
%104 = load double, double* %74
%105 = tail call double @llvm.fmuladd.f64(double %104, double %102, double %97)
store double %105, double* %62
%106 = load double, double* %86
%107 = fmul double %17, %12
%108 = tail call double @llvm.fmuladd.f64(double %106, double %107, double %105)
store double %108, double* %62
%109 = load double, double* %80
%110 = tail call double @llvm.fmuladd.f64(double %109, double %107, double %100)
store double %110, double* %68
%111 = load double, double* %74
%112 = fmul double %18, %12
%113 = tail call double @llvm.fmuladd.f64(double %111, double %112, double %110)
store double %113, double* %68
%114 = load double, double* %86
%115 = tail call double @llvm.fmuladd.f64(double %114, double %112, double %103)
store double %115, double* %54
ret void
}