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

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

assistant: ```c
void matrix_multiply4x4(float *result, const float *a, const float *b) {
  int i;
  for (i = 0; i < 4; i++) {
    const float ai0 = a[(0 << 2) + i], ai1 = a[(1 << 2) + i], ai2 = a[(2 << 2) + i], ai3 = a[(3 << 2) + i];
    result[(0 << 2) + i] = ai0 * b[(0 << 2) + 0] + ai1 * b[(0 << 2) + 1] + ai2 * b[(0 << 2) + 2] + ai3 * b[(0 << 2) + 3];
    result[(1 << 2) + i] = ai0 * b[(1 << 2) + 0] + ai1 * b[(1 << 2) + 1] + ai2 * b[(1 << 2) + 2] + ai3 * b[(1 << 2) + 3];
    result[(2 << 2) + i] = ai0 * b[(2 << 2) + 0] + ai1 * b[(2 << 2) + 1] + ai2 * b[(2 << 2) + 2] + ai3 * b[(2 << 2) + 3];
    result[(3 << 2) + i] = ai0 * b[(3 << 2) + 0] + ai1 * b[(3 << 2) + 1] + ai2 * b[(3 << 2) + 2] + ai3 * b[(3 << 2) + 3];
  }
}
```