user: Translate the below assembly code into C programming language:

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

assistant: ```c
void mat4_multiply(float *result, float *a, float *b) {
  result[0] = a[0] * b[0] + a[4] * b[1] + a[8] * b[2] + a[12] * b[3];
  result[1] = a[1] * b[0] + a[5] * b[1] + a[9] * b[2] + a[13] * b[3];
  result[2] = a[2] * b[0] + a[6] * b[1] + a[10] * b[2] + a[14] * b[3];
  result[3] = a[3] * b[0] + a[7] * b[1] + a[11] * b[2] + a[15] * b[3];
  result[4] = a[0] * b[4] + a[4] * b[5] + a[8] * b[6] + a[12] * b[7];
  result[5] = a[1] * b[4] + a[5] * b[5] + a[9] * b[6] + a[13] * b[7];
  result[6] = a[2] * b[4] + a[6] * b[5] + a[10] * b[6] + a[14] * b[7];
  result[7] = a[3] * b[4] + a[7] * b[5] + a[11] * b[6] + a[15] * b[7];
  result[8] = a[0] * b[8] + a[4] * b[9] + a[8] * b[10] + a[12] * b[11];
  result[9] = a[1] * b[8] + a[5] * b[9] + a[9] * b[10] + a[13] * b[11];
  result[10] = a[2] * b[8] + a[6] * b[9] + a[10] * b[10] + a[14] * b[11];
  result[11] = a[3] * b[8] + a[7] * b[9] + a[11] * b[10] + a[15] * b[11];
  result[12] = a[0] * b[12] + a[4] * b[13] + a[8] * b[14] + a[12] * b[15];
  result[13] = a[1] * b[12] + a[5] * b[13] + a[9] * b[14] + a[13] * b[15];
  result[14] = a[2] * b[12] + a[6] * b[13] + a[10] * b[14] + a[14] * b[15];
  result[15] = a[3] * b[12] + a[7] * b[13] + a[11] * b[14] + a[15] * b[15];
}
```