user: 下面的汇编指令对应的C源代码是什么：

```asm
<mat_mul_3>:
  endbr64
  movq   $0x0,(%rdi)
  movsd  (%rsi),%xmm2
  pxor   %xmm0,%xmm0
  mulsd  (%rdx),%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,(%rdi)
  movsd  0x18(%rsi),%xmm1
  mulsd  0x8(%rdx),%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,(%rdi)
  movsd  0x30(%rsi),%xmm2
  mulsd  0x10(%rdx),%xmm2
  movq   $0x0,0x8(%rdi)
  addsd  %xmm1,%xmm2
  movsd  %xmm2,(%rdi)
  movsd  0x8(%rsi),%xmm2
  mulsd  (%rdx),%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,0x8(%rdi)
  movsd  0x20(%rsi),%xmm1
  mulsd  0x8(%rdx),%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,0x8(%rdi)
  movsd  0x38(%rsi),%xmm2
  mulsd  0x10(%rdx),%xmm2
  movq   $0x0,0x10(%rdi)
  addsd  %xmm1,%xmm2
  movsd  %xmm2,0x8(%rdi)
  movsd  0x10(%rsi),%xmm2
  mulsd  (%rdx),%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,0x10(%rdi)
  movsd  0x28(%rsi),%xmm1
  mulsd  0x8(%rdx),%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,0x10(%rdi)
  movsd  0x40(%rsi),%xmm2
  mulsd  0x10(%rdx),%xmm2
  movq   $0x0,0x18(%rdi)
  addsd  %xmm1,%xmm2
  movsd  %xmm2,0x10(%rdi)
  movsd  (%rsi),%xmm2
  mulsd  0x18(%rdx),%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,0x18(%rdi)
  movsd  0x18(%rsi),%xmm1
  mulsd  0x20(%rdx),%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,0x18(%rdi)
  movsd  0x30(%rsi),%xmm2
  mulsd  0x28(%rdx),%xmm2
  movq   $0x0,0x20(%rdi)
  addsd  %xmm1,%xmm2
  movsd  %xmm2,0x18(%rdi)
  movsd  0x8(%rsi),%xmm2
  mulsd  0x18(%rdx),%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,0x20(%rdi)
  movsd  0x20(%rsi),%xmm1
  mulsd  0x20(%rdx),%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,0x20(%rdi)
  movsd  0x38(%rsi),%xmm2
  mulsd  0x28(%rdx),%xmm2
  movq   $0x0,0x28(%rdi)
  addsd  %xmm1,%xmm2
  movsd  %xmm2,0x20(%rdi)
  movsd  0x10(%rsi),%xmm2
  mulsd  0x18(%rdx),%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,0x28(%rdi)
  movsd  0x28(%rsi),%xmm1
  mulsd  0x20(%rdx),%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,0x28(%rdi)
  movsd  0x40(%rsi),%xmm2
  mulsd  0x28(%rdx),%xmm2
  movq   $0x0,0x30(%rdi)
  addsd  %xmm1,%xmm2
  movsd  %xmm2,0x28(%rdi)
  movsd  (%rsi),%xmm2
  mulsd  0x30(%rdx),%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,0x30(%rdi)
  movsd  0x18(%rsi),%xmm1
  mulsd  0x38(%rdx),%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,0x30(%rdi)
  movsd  0x30(%rsi),%xmm2
  mulsd  0x40(%rdx),%xmm2
  movq   $0x0,0x38(%rdi)
  addsd  %xmm1,%xmm2
  movsd  %xmm2,0x30(%rdi)
  movsd  0x8(%rsi),%xmm2
  mulsd  0x30(%rdx),%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,0x38(%rdi)
  movsd  0x20(%rsi),%xmm1
  mulsd  0x38(%rdx),%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,0x38(%rdi)
  movsd  0x38(%rsi),%xmm2
  mulsd  0x40(%rdx),%xmm2
  movq   $0x0,0x40(%rdi)
  addsd  %xmm1,%xmm2
  movsd  %xmm2,0x38(%rdi)
  movsd  0x10(%rsi),%xmm1
  mulsd  0x30(%rdx),%xmm1
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x40(%rdi)
  movsd  0x28(%rsi),%xmm0
  mulsd  0x38(%rdx),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,0x40(%rdi)
  movsd  0x40(%rsi),%xmm1
  mulsd  0x40(%rdx),%xmm1
  addsd  %xmm0,%xmm1
  movsd  %xmm1,0x40(%rdi)
  ret
```

assistant: ```c
void mat_mul_3(double Out[3][3], double A[3][3], double B[3][3]) {
  int i, j, k;
  for (j = 0; j < 3; j++)
    for (k = 0; k < 3; k++) {
      Out[j][k] = 0.0;
      for (i = 0; i < 3; i++)
        Out[j][k] += A[i][k] * B[j][i];
    }
  return;
}
```