user: Converte this assembly snippet into its equivalent C code:

```asm
<mul_mtx44>:
  endbr64
  sub    $0x78,%rsp
  movss  (%rdi),%xmm13
  movss  0x4(%rdi),%xmm9
  movss  (%rsi),%xmm1
  movss  0x10(%rsi),%xmm4
  movaps %xmm13,%xmm2
  movaps %xmm9,%xmm3
  movss  0x8(%rdi),%xmm0
  movss  0x20(%rsi),%xmm6
  mulss  %xmm4,%xmm3
  movss  0xc(%rdi),%xmm11
  movss  0x30(%rsi),%xmm5
  movaps %xmm13,%xmm7
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  mulss  %xmm1,%xmm2
  movss  0x4(%rsi),%xmm14
  movaps %xmm9,%xmm8
  movss  0x34(%rsi),%xmm10
  movss  0x28(%rsi),%xmm15
  mulss  %xmm14,%xmm7
  movss  0x18(%rsi),%xmm12
  movss  %xmm10,0x10(%rsp)
  movss  %xmm12,0x18(%rsp)
  addss  %xmm3,%xmm2
  movaps %xmm0,%xmm3
  mulss  %xmm6,%xmm3
  addss  %xmm3,%xmm2
  movaps %xmm11,%xmm3
  mulss  %xmm5,%xmm3
  addss  %xmm3,%xmm2
  movss  0x14(%rsi),%xmm3
  mulss  %xmm3,%xmm8
  movss  %xmm2,0x20(%rsp)
  movss  0x24(%rsi),%xmm2
  addss  %xmm8,%xmm7
  movaps %xmm0,%xmm8
  mulss  %xmm2,%xmm8
  addss  %xmm8,%xmm7
  movaps %xmm10,%xmm8
  movaps %xmm15,%xmm10
  movss  0x38(%rsi),%xmm15
  mulss  %xmm11,%xmm8
  movss  %xmm10,0x1c(%rsp)
  movss  %xmm15,0xc(%rsp)
  movaps %xmm12,%xmm15
  movss  0x1c(%rsi),%xmm12
  mulss  %xmm9,%xmm15
  mulss  %xmm12,%xmm9
  addss  %xmm8,%xmm7
  movaps %xmm15,%xmm8
  movaps %xmm1,%xmm15
  movss  %xmm7,0x24(%rsp)
  movss  0x8(%rsi),%xmm7
  movss  %xmm7,0x14(%rsp)
  mulss  %xmm13,%xmm7
  addss  %xmm7,%xmm8
  movaps %xmm10,%xmm7
  movss  0x2c(%rsi),%xmm10
  mulss  %xmm0,%xmm7
  mulss  %xmm10,%xmm0
  addss  %xmm8,%xmm7
  movss  0xc(%rsp),%xmm8
  mulss  %xmm11,%xmm8
  addss  %xmm8,%xmm7
  movss  0x3c(%rsi),%xmm8
  mulss  %xmm8,%xmm11
  movss  %xmm7,0x28(%rsp)
  movss  0xc(%rsi),%xmm7
  mulss  %xmm7,%xmm13
  addss  %xmm13,%xmm9
  addss  %xmm9,%xmm0
  addss  %xmm11,%xmm0
  movss  %xmm0,0x2c(%rsp)
  movss  0x10(%rdi),%xmm0
  movss  0x14(%rdi),%xmm13
  movss  0x18(%rdi),%xmm11
  movss  0x1c(%rdi),%xmm9
  mulss  %xmm0,%xmm14
  mulss  %xmm13,%xmm3
  mulss  %xmm11,%xmm2
  mulss  %xmm0,%xmm15
  mulss  %xmm13,%xmm4
  mulss  0x20(%rdi),%xmm1
  addss  %xmm14,%xmm3
  mulss  %xmm13,%xmm12
  mulss  %xmm11,%xmm10
  mulss  %xmm9,%xmm8
  addss  %xmm3,%xmm2
  movss  0x10(%rsp),%xmm3
  addss  %xmm15,%xmm4
  movaps %xmm6,%xmm15
  mulss  %xmm11,%xmm15
  mulss  %xmm9,%xmm3
  mulss  0x28(%rdi),%xmm6
  addss  %xmm15,%xmm4
  movaps %xmm5,%xmm15
  addss  %xmm3,%xmm2
  movss  0x18(%rsp),%xmm3
  mulss  0x2c(%rdi),%xmm5
  mulss  %xmm9,%xmm15
  mulss  %xmm13,%xmm3
  movss  %xmm2,0x34(%rsp)
  movss  0x14(%rsp),%xmm2
  mulss  %xmm0,%xmm2
  mulss  %xmm7,%xmm0
  addss  %xmm15,%xmm4
  mulss  0x24(%rdi),%xmm7
  movss  %xmm4,0x30(%rsp)
  addss  %xmm3,%xmm2
  movss  0x1c(%rsp),%xmm3
  addss  %xmm12,%xmm0
  mulss  %xmm11,%xmm3
  addss  %xmm7,%xmm1
  addss  %xmm10,%xmm0
  addss  %xmm6,%xmm1
  addss  %xmm3,%xmm2
  movss  0xc(%rsp),%xmm3
  addss  %xmm8,%xmm0
  addss  %xmm5,%xmm1
  movdqa 0x20(%rsp),%xmm5
  mulss  %xmm9,%xmm3
  movss  %xmm0,0x3c(%rsp)
  movss  %xmm1,0x40(%rsp)
  mov    0x40(%rsp),%eax
  movups %xmm5,(%rdi)
  mov    %eax,0x20(%rdi)
  addss  %xmm3,%xmm2
  movss  %xmm2,0x38(%rsp)
  movdqa 0x30(%rsp),%xmm6
  movups %xmm6,0x10(%rdi)
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L6
  add    $0x78,%rsp
  ret
L6:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void mul_mtx44(float *a, const float *b) {
  float res[16];
  res[0] = (a[0]) * (b[0]) + (a[1]) * (b[4]) + (a[2]) * (b[8]) + (a[3]) * (b[12]);
  res[1] = (a[0]) * (b[1]) + (a[1]) * (b[5]) + (a[2]) * (b[9]) + (a[3]) * (b[13]);
  res[2] = (a[0]) * (b[2]) + (a[1]) * (b[6]) + (a[2]) * (b[10]) + (a[3]) * (b[14]);
  res[3] = (a[0]) * (b[3]) + (a[1]) * (b[7]) + (a[2]) * (b[11]) + (a[3]) * (b[15]);
  res[4] = (a[4]) * (b[0]) + (a[5]) * (b[4]) + (a[6]) * (b[8]) + (a[7]) * (b[12]);
  res[5] = (a[4]) * (b[1]) + (a[5]) * (b[5]) + (a[6]) * (b[9]) + (a[7]) * (b[13]);
  res[6] = (a[4]) * (b[2]) + (a[5]) * (b[6]) + (a[6]) * (b[10]) + (a[7]) * (b[14]);
  res[7] = (a[4]) * (b[3]) + (a[5]) * (b[7]) + (a[6]) * (b[11]) + (a[7]) * (b[15]);
  res[8] = (a[8]) * (b[0]) + (a[9]) * (b[3]) + (a[10]) * (b[8]) + (a[11]) * (b[12]);
  res[9] = (a[8]) * (b[1]) + (a[9]) * (b[4]) + (a[10]) * (b[9]) + (a[11]) * (b[13]);
  res[10] = (a[8]) * (b[2]) + (a[9]) * (b[5]) + (a[10]) * (b[10]) + (a[11]) * (b[14]);
  res[11] = (a[8]) * (b[3]) + (a[9]) * (b[6]) + (a[10]) * (b[11]) + (a[11]) * (b[15]);
  res[12] = (a[12]) * (b[0]) + (a[13]) * (b[3]) + (a[14]) * (b[8]) + (a[15]) * (b[12]);
  res[13] = (a[12]) * (b[1]) + (a[13]) * (b[4]) + (a[14]) * (b[9]) + (a[15]) * (b[13]);
  res[14] = (a[12]) * (b[2]) + (a[13]) * (b[5]) + (a[14]) * (b[10]) + (a[15]) * (b[14]);
  res[15] = (a[12]) * (b[3]) + (a[13]) * (b[6]) + (a[14]) * (b[11]) + (a[15]) * (b[15]);
  memcpy(a, &res, 9 * sizeof(float));
}
```