user: 请从给定的汇编指令推导出C源代码:

```asm
<matmul4_c>:
  endbr64
  movss  (%rdi),%xmm0
  movss  0x10(%rdi),%xmm1
  mulss  (%rsi),%xmm0
  mulss  0x4(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x20(%rdi),%xmm1
  mulss  0x8(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x30(%rdi),%xmm1
  mulss  0xc(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rdx)
  movss  0x4(%rdi),%xmm0
  movss  0x14(%rdi),%xmm1
  mulss  (%rsi),%xmm0
  mulss  0x4(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x24(%rdi),%xmm1
  mulss  0x8(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x34(%rdi),%xmm1
  mulss  0xc(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x4(%rdx)
  movss  0x8(%rdi),%xmm0
  movss  0x18(%rdi),%xmm1
  mulss  (%rsi),%xmm0
  mulss  0x4(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x28(%rdi),%xmm1
  mulss  0x8(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x38(%rdi),%xmm1
  mulss  0xc(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x8(%rdx)
  movss  0xc(%rdi),%xmm0
  movss  0x1c(%rdi),%xmm1
  mulss  (%rsi),%xmm0
  mulss  0x4(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x2c(%rdi),%xmm1
  mulss  0x8(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x3c(%rdi),%xmm1
  mulss  0xc(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0xc(%rdx)
  movss  (%rdi),%xmm0
  movss  0x10(%rdi),%xmm1
  mulss  0x10(%rsi),%xmm0
  mulss  0x14(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x20(%rdi),%xmm1
  mulss  0x18(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x30(%rdi),%xmm1
  mulss  0x1c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x10(%rdx)
  movss  0x4(%rdi),%xmm0
  movss  0x14(%rdi),%xmm1
  mulss  0x10(%rsi),%xmm0
  mulss  0x14(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x24(%rdi),%xmm1
  mulss  0x18(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x34(%rdi),%xmm1
  mulss  0x1c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x14(%rdx)
  movss  0x8(%rdi),%xmm0
  movss  0x18(%rdi),%xmm1
  mulss  0x10(%rsi),%xmm0
  mulss  0x14(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x28(%rdi),%xmm1
  mulss  0x18(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x38(%rdi),%xmm1
  mulss  0x1c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x18(%rdx)
  movss  0xc(%rdi),%xmm0
  mulss  0x10(%rsi),%xmm0
  movss  0x1c(%rdi),%xmm1
  mulss  0x14(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x2c(%rdi),%xmm1
  mulss  0x18(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x3c(%rdi),%xmm1
  mulss  0x1c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x1c(%rdx)
  movss  (%rdi),%xmm0
  movss  0x10(%rdi),%xmm1
  mulss  0x20(%rsi),%xmm0
  mulss  0x24(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x20(%rdi),%xmm1
  mulss  0x28(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x30(%rdi),%xmm1
  mulss  0x2c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x20(%rdx)
  movss  0x4(%rdi),%xmm0
  movss  0x14(%rdi),%xmm1
  mulss  0x20(%rsi),%xmm0
  mulss  0x24(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x24(%rdi),%xmm1
  mulss  0x28(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x34(%rdi),%xmm1
  mulss  0x2c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x24(%rdx)
  movss  0x8(%rdi),%xmm0
  movss  0x18(%rdi),%xmm1
  mulss  0x20(%rsi),%xmm0
  mulss  0x24(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x28(%rdi),%xmm1
  mulss  0x28(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x38(%rdi),%xmm1
  mulss  0x2c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x28(%rdx)
  movss  0xc(%rdi),%xmm0
  movss  0x1c(%rdi),%xmm1
  mulss  0x20(%rsi),%xmm0
  mulss  0x24(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x2c(%rdi),%xmm1
  mulss  0x28(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x3c(%rdi),%xmm1
  mulss  0x2c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x2c(%rdx)
  movss  (%rdi),%xmm0
  movss  0x10(%rdi),%xmm1
  mulss  0x30(%rsi),%xmm0
  mulss  0x34(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x20(%rdi),%xmm1
  mulss  0x38(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x30(%rdi),%xmm1
  mulss  0x3c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x30(%rdx)
  movss  0x4(%rdi),%xmm0
  movss  0x14(%rdi),%xmm1
  mulss  0x30(%rsi),%xmm0
  mulss  0x34(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x24(%rdi),%xmm1
  mulss  0x38(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x34(%rdi),%xmm1
  mulss  0x3c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x34(%rdx)
  movss  0x8(%rdi),%xmm0
  mulss  0x30(%rsi),%xmm0
  movss  0x18(%rdi),%xmm1
  mulss  0x34(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x28(%rdi),%xmm1
  mulss  0x38(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x38(%rdi),%xmm1
  mulss  0x3c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x38(%rdx)
  movss  0xc(%rdi),%xmm0
  movss  0x1c(%rdi),%xmm1
  mulss  0x30(%rsi),%xmm0
  mulss  0x34(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x2c(%rdi),%xmm1
  mulss  0x38(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  0x3c(%rdi),%xmm1
  mulss  0x3c(%rsi),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x3c(%rdx)
  ret
```

assistant: ```c
void matmul4_c(float m0[16], float m1[16], float d[16]) {
  d[0] = m0[0] * m1[0] + m0[4] * m1[1] + m0[8] * m1[2] + m0[12] * m1[3];
  d[1] = m0[1] * m1[0] + m0[5] * m1[1] + m0[9] * m1[2] + m0[13] * m1[3];
  d[2] = m0[2] * m1[0] + m0[6] * m1[1] + m0[10] * m1[2] + m0[14] * m1[3];
  d[3] = m0[3] * m1[0] + m0[7] * m1[1] + m0[11] * m1[2] + m0[15] * m1[3];
  d[4] = m0[0] * m1[4] + m0[4] * m1[5] + m0[8] * m1[6] + m0[12] * m1[7];
  d[5] = m0[1] * m1[4] + m0[5] * m1[5] + m0[9] * m1[6] + m0[13] * m1[7];
  d[6] = m0[2] * m1[4] + m0[6] * m1[5] + m0[10] * m1[6] + m0[14] * m1[7];
  d[7] = m0[3] * m1[4] + m0[7] * m1[5] + m0[11] * m1[6] + m0[15] * m1[7];
  d[8] = m0[0] * m1[8] + m0[4] * m1[9] + m0[8] * m1[10] + m0[12] * m1[11];
  d[9] = m0[1] * m1[8] + m0[5] * m1[9] + m0[9] * m1[10] + m0[13] * m1[11];
  d[10] = m0[2] * m1[8] + m0[6] * m1[9] + m0[10] * m1[10] + m0[14] * m1[11];
  d[11] = m0[3] * m1[8] + m0[7] * m1[9] + m0[11] * m1[10] + m0[15] * m1[11];
  d[12] = m0[0] * m1[12] + m0[4] * m1[13] + m0[8] * m1[14] + m0[12] * m1[15];
  d[13] = m0[1] * m1[12] + m0[5] * m1[13] + m0[9] * m1[14] + m0[13] * m1[15];
  d[14] = m0[2] * m1[12] + m0[6] * m1[13] + m0[10] * m1[14] + m0[14] * m1[15];
  d[15] = m0[3] * m1[12] + m0[7] * m1[13] + m0[11] * m1[14] + m0[15] * m1[15];
}
```