void multiply44d44d44d(double *left, double *right, double *product) {
  register double rA = right[0];
  register double rB = right[4];
  register double rC = right[8];
  register double rD = right[12];
  product[0] = left[0] * rA + left[1] * rB + left[2] * rC + left[3] * rD;
  product[4] = left[4] * rA + left[5] * rB + left[6] * rC + left[7] * rD;
  product[8] = left[8] * rA + left[9] * rB + left[10] * rC + left[11] * rD;
  product[12] = left[12] * rA + left[13] * rB + left[14] * rC + left[15] * rD;
  rA = right[1];
  rB = right[5];
  rC = right[9];
  rD = right[13];
  product[1] = left[0] * rA + left[1] * rB + left[2] * rC + left[3] * rD;
  product[5] = left[4] * rA + left[5] * rB + left[6] * rC + left[7] * rD;
  product[9] = left[8] * rA + left[9] * rB + left[10] * rC + left[11] * rD;
  product[13] = left[12] * rA + left[13] * rB + left[14] * rC + left[15] * rD;
  rA = right[2];
  rB = right[6];
  rC = right[10];
  rD = right[14];
  product[2] = left[0] * rA + left[1] * rB + left[2] * rC + left[3] * rD;
  product[6] = left[4] * rA + left[5] * rB + left[6] * rC + left[7] * rD;
  product[10] = left[8] * rA + left[9] * rB + left[10] * rC + left[11] * rD;
  product[14] = left[12] * rA + left[13] * rB + left[14] * rC + left[15] * rD;
  rA = right[3];
  rB = right[7];
  rC = right[11];
  rD = right[15];
  product[3] = left[0] * rA + left[1] * rB + left[2] * rC + left[3] * rD;
  product[7] = left[4] * rA + left[5] * rB + left[6] * rC + left[7] * rD;
  product[11] = left[8] * rA + left[9] * rB + left[10] * rC + left[11] * rD;
  product[15] = left[12] * rA + left[13] * rB + left[14] * rC + left[15] * rD;
}


x86 assembly (clang, -O0):
<multiply44d44d44d>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x48(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x68(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x48(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x68(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x48(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x68(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x48(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x68(%rax),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x78(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<multiply44d44d44d>:
movsd  (%rsi),%xmm2
movsd  0x20(%rsi),%xmm3
movsd  0x40(%rsi),%xmm0
movsd  0x60(%rsi),%xmm1
movsd  0x8(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  (%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x10(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x18(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,(%rdx)
movsd  0x28(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  0x20(%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x30(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x38(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x20(%rdx)
movsd  0x48(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  0x40(%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x50(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x58(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x40(%rdx)
mulsd  0x68(%rdi),%xmm3
mulsd  0x60(%rdi),%xmm2
addsd  %xmm3,%xmm2
mulsd  0x70(%rdi),%xmm0
addsd  %xmm2,%xmm0
mulsd  0x78(%rdi),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x60(%rdx)
movsd  0x8(%rsi),%xmm2
movsd  0x28(%rsi),%xmm3
movsd  0x48(%rsi),%xmm0
movsd  0x68(%rsi),%xmm1
movsd  0x8(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  (%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x10(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x18(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x8(%rdx)
movsd  0x28(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  0x20(%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x30(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x38(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x28(%rdx)
movsd  0x48(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  0x40(%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x50(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x58(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x48(%rdx)
mulsd  0x68(%rdi),%xmm3
mulsd  0x60(%rdi),%xmm2
addsd  %xmm3,%xmm2
mulsd  0x70(%rdi),%xmm0
addsd  %xmm2,%xmm0
mulsd  0x78(%rdi),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x68(%rdx)
movsd  0x10(%rsi),%xmm2
movsd  0x30(%rsi),%xmm3
movsd  0x50(%rsi),%xmm0
movsd  0x70(%rsi),%xmm1
movsd  0x8(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  (%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x10(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x18(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x10(%rdx)
movsd  0x28(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  0x20(%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x30(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x38(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x30(%rdx)
movsd  0x48(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  0x40(%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x50(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x58(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x50(%rdx)
mulsd  0x68(%rdi),%xmm3
mulsd  0x60(%rdi),%xmm2
addsd  %xmm3,%xmm2
mulsd  0x70(%rdi),%xmm0
addsd  %xmm2,%xmm0
mulsd  0x78(%rdi),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x70(%rdx)
movsd  0x18(%rsi),%xmm2
movsd  0x38(%rsi),%xmm3
movsd  0x58(%rsi),%xmm0
movsd  0x78(%rsi),%xmm1
movsd  0x8(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  (%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x10(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x18(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x18(%rdx)
movsd  0x28(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  0x20(%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x30(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x38(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x38(%rdx)
movsd  0x48(%rdi),%xmm4
mulsd  %xmm3,%xmm4
movsd  0x40(%rdi),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x50(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x58(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x58(%rdx)
mulsd  0x68(%rdi),%xmm3
mulsd  0x60(%rdi),%xmm2
addsd  %xmm3,%xmm2
mulsd  0x70(%rdi),%xmm0
addsd  %xmm2,%xmm0
mulsd  0x78(%rdi),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x78(%rdx)
ret

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

LLVM IR (-O2):
define void @multiply44d44d44d(double* nocapture %0, double* nocapture %1, double* nocapture writeonly %2) {
%4 = load double, double* %1
%5 = getelementptr inbounds double, double* %1, i64 4
%6 = load double, double* %5
%7 = getelementptr inbounds double, double* %1, i64 8
%8 = load double, double* %7
%9 = getelementptr inbounds double, double* %1, i64 12
%10 = load double, double* %9
%11 = load double, double* %0
%12 = getelementptr inbounds double, double* %0, i64 1
%13 = load double, double* %12
%14 = fmul double %6, %13
%15 = tail call double @llvm.fmuladd.f64(double %11, double %4, double %14)
%16 = getelementptr inbounds double, double* %0, i64 2
%17 = load double, double* %16
%18 = tail call double @llvm.fmuladd.f64(double %17, double %8, double %15)
%19 = getelementptr inbounds double, double* %0, i64 3
%20 = load double, double* %19
%21 = tail call double @llvm.fmuladd.f64(double %20, double %10, double %18)
store double %21, double* %2
%22 = getelementptr inbounds double, double* %0, i64 4
%23 = load double, double* %22
%24 = getelementptr inbounds double, double* %0, i64 5
%25 = load double, double* %24
%26 = fmul double %6, %25
%27 = tail call double @llvm.fmuladd.f64(double %23, double %4, double %26)
%28 = getelementptr inbounds double, double* %0, i64 6
%29 = load double, double* %28
%30 = tail call double @llvm.fmuladd.f64(double %29, double %8, double %27)
%31 = getelementptr inbounds double, double* %0, i64 7
%32 = load double, double* %31
%33 = tail call double @llvm.fmuladd.f64(double %32, double %10, double %30)
%34 = getelementptr inbounds double, double* %2, i64 4
store double %33, double* %34
%35 = getelementptr inbounds double, double* %0, i64 8
%36 = load double, double* %35
%37 = getelementptr inbounds double, double* %0, i64 9
%38 = load double, double* %37
%39 = fmul double %6, %38
%40 = tail call double @llvm.fmuladd.f64(double %36, double %4, double %39)
%41 = getelementptr inbounds double, double* %0, i64 10
%42 = load double, double* %41
%43 = tail call double @llvm.fmuladd.f64(double %42, double %8, double %40)
%44 = getelementptr inbounds double, double* %0, i64 11
%45 = load double, double* %44
%46 = tail call double @llvm.fmuladd.f64(double %45, double %10, double %43)
%47 = getelementptr inbounds double, double* %2, i64 8
store double %46, double* %47
%48 = getelementptr inbounds double, double* %0, i64 12
%49 = load double, double* %48
%50 = getelementptr inbounds double, double* %0, i64 13
%51 = load double, double* %50
%52 = fmul double %6, %51
%53 = tail call double @llvm.fmuladd.f64(double %49, double %4, double %52)
%54 = getelementptr inbounds double, double* %0, i64 14
%55 = load double, double* %54
%56 = tail call double @llvm.fmuladd.f64(double %55, double %8, double %53)
%57 = getelementptr inbounds double, double* %0, i64 15
%58 = load double, double* %57
%59 = tail call double @llvm.fmuladd.f64(double %58, double %10, double %56)
%60 = getelementptr inbounds double, double* %2, i64 12
store double %59, double* %60
%61 = getelementptr inbounds double, double* %1, i64 1
%62 = load double, double* %61
%63 = getelementptr inbounds double, double* %1, i64 5
%64 = load double, double* %63
%65 = getelementptr inbounds double, double* %1, i64 9
%66 = load double, double* %65
%67 = getelementptr inbounds double, double* %1, i64 13
%68 = load double, double* %67
%69 = load double, double* %0
%70 = load double, double* %12
%71 = fmul double %64, %70
%72 = tail call double @llvm.fmuladd.f64(double %69, double %62, double %71)
%73 = load double, double* %16
%74 = tail call double @llvm.fmuladd.f64(double %73, double %66, double %72)
%75 = load double, double* %19
%76 = tail call double @llvm.fmuladd.f64(double %75, double %68, double %74)
%77 = getelementptr inbounds double, double* %2, i64 1
store double %76, double* %77
%78 = load double, double* %22
%79 = load double, double* %24
%80 = fmul double %64, %79
%81 = tail call double @llvm.fmuladd.f64(double %78, double %62, double %80)
%82 = load double, double* %28
%83 = tail call double @llvm.fmuladd.f64(double %82, double %66, double %81)
%84 = load double, double* %31
%85 = tail call double @llvm.fmuladd.f64(double %84, double %68, double %83)
%86 = getelementptr inbounds double, double* %2, i64 5
store double %85, double* %86
%87 = load double, double* %35
%88 = load double, double* %37
%89 = fmul double %64, %88
%90 = tail call double @llvm.fmuladd.f64(double %87, double %62, double %89)
%91 = load double, double* %41
%92 = tail call double @llvm.fmuladd.f64(double %91, double %66, double %90)
%93 = load double, double* %44
%94 = tail call double @llvm.fmuladd.f64(double %93, double %68, double %92)
%95 = getelementptr inbounds double, double* %2, i64 9
store double %94, double* %95
%96 = load double, double* %48
%97 = load double, double* %50
%98 = fmul double %64, %97
%99 = tail call double @llvm.fmuladd.f64(double %96, double %62, double %98)
%100 = load double, double* %54
%101 = tail call double @llvm.fmuladd.f64(double %100, double %66, double %99)
%102 = load double, double* %57
%103 = tail call double @llvm.fmuladd.f64(double %102, double %68, double %101)
%104 = getelementptr inbounds double, double* %2, i64 13
store double %103, double* %104
%105 = getelementptr inbounds double, double* %1, i64 2
%106 = load double, double* %105
%107 = getelementptr inbounds double, double* %1, i64 6
%108 = load double, double* %107
%109 = getelementptr inbounds double, double* %1, i64 10
%110 = load double, double* %109
%111 = getelementptr inbounds double, double* %1, i64 14
%112 = load double, double* %111
%113 = load double, double* %0
%114 = load double, double* %12
%115 = fmul double %108, %114
%116 = tail call double @llvm.fmuladd.f64(double %113, double %106, double %115)
%117 = load double, double* %16
%118 = tail call double @llvm.fmuladd.f64(double %117, double %110, double %116)
%119 = load double, double* %19
%120 = tail call double @llvm.fmuladd.f64(double %119, double %112, double %118)
%121 = getelementptr inbounds double, double* %2, i64 2
store double %120, double* %121
%122 = load double, double* %22
%123 = load double, double* %24
%124 = fmul double %108, %123
%125 = tail call double @llvm.fmuladd.f64(double %122, double %106, double %124)
%126 = load double, double* %28
%127 = tail call double @llvm.fmuladd.f64(double %126, double %110, double %125)
%128 = load double, double* %31
%129 = tail call double @llvm.fmuladd.f64(double %128, double %112, double %127)
%130 = getelementptr inbounds double, double* %2, i64 6
store double %129, double* %130
%131 = load double, double* %35
%132 = load double, double* %37
%133 = fmul double %108, %132
%134 = tail call double @llvm.fmuladd.f64(double %131, double %106, double %133)
%135 = load double, double* %41
%136 = tail call double @llvm.fmuladd.f64(double %135, double %110, double %134)
%137 = load double, double* %44
%138 = tail call double @llvm.fmuladd.f64(double %137, double %112, double %136)
%139 = getelementptr inbounds double, double* %2, i64 10
store double %138, double* %139
%140 = load double, double* %48
%141 = load double, double* %50
%142 = fmul double %108, %141
%143 = tail call double @llvm.fmuladd.f64(double %140, double %106, double %142)
%144 = load double, double* %54
%145 = tail call double @llvm.fmuladd.f64(double %144, double %110, double %143)
%146 = load double, double* %57
%147 = tail call double @llvm.fmuladd.f64(double %146, double %112, double %145)
%148 = getelementptr inbounds double, double* %2, i64 14
store double %147, double* %148
%149 = getelementptr inbounds double, double* %1, i64 3
%150 = load double, double* %149
%151 = getelementptr inbounds double, double* %1, i64 7
%152 = load double, double* %151
%153 = getelementptr inbounds double, double* %1, i64 11
%154 = load double, double* %153
%155 = getelementptr inbounds double, double* %1, i64 15
%156 = load double, double* %155
%157 = load double, double* %0
%158 = load double, double* %12
%159 = fmul double %152, %158
%160 = tail call double @llvm.fmuladd.f64(double %157, double %150, double %159)
%161 = load double, double* %16
%162 = tail call double @llvm.fmuladd.f64(double %161, double %154, double %160)
%163 = load double, double* %19
%164 = tail call double @llvm.fmuladd.f64(double %163, double %156, double %162)
%165 = getelementptr inbounds double, double* %2, i64 3
store double %164, double* %165
%166 = load double, double* %22
%167 = load double, double* %24
%168 = fmul double %152, %167
%169 = tail call double @llvm.fmuladd.f64(double %166, double %150, double %168)
%170 = load double, double* %28
%171 = tail call double @llvm.fmuladd.f64(double %170, double %154, double %169)
%172 = load double, double* %31
%173 = tail call double @llvm.fmuladd.f64(double %172, double %156, double %171)
%174 = getelementptr inbounds double, double* %2, i64 7
store double %173, double* %174
%175 = load double, double* %35
%176 = load double, double* %37
%177 = fmul double %152, %176
%178 = tail call double @llvm.fmuladd.f64(double %175, double %150, double %177)
%179 = load double, double* %41
%180 = tail call double @llvm.fmuladd.f64(double %179, double %154, double %178)
%181 = load double, double* %44
%182 = tail call double @llvm.fmuladd.f64(double %181, double %156, double %180)
%183 = getelementptr inbounds double, double* %2, i64 11
store double %182, double* %183
%184 = load double, double* %48
%185 = load double, double* %50
%186 = fmul double %152, %185
%187 = tail call double @llvm.fmuladd.f64(double %184, double %150, double %186)
%188 = load double, double* %54
%189 = tail call double @llvm.fmuladd.f64(double %188, double %154, double %187)
%190 = load double, double* %57
%191 = tail call double @llvm.fmuladd.f64(double %190, double %156, double %189)
%192 = getelementptr inbounds double, double* %2, i64 15
store double %191, double* %192
ret void
}