user: 请将这段汇编代码片段转换成等效的C代码：

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

assistant: ```c
void gl11_matrix_mult(float *d, const float *a, const float *b) {
  int i;
  float t[16];
  for (i = 0; i < 4; i++) {
    int j4 = 0;
    int oa = i;
    int ob = j4;
    float v = 0.0f;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    t[i + j4] = v;
    j4 = 4;
    oa = i;
    ob = j4;
    v = 0.0f;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    t[i + j4] = v;
    j4 = 8;
    oa = i;
    ob = j4;
    v = 0.0f;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    t[i + j4] = v;
    j4 = 12;
    oa = i;
    ob = j4;
    v = 0.0f;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    oa += 4;
    ob++;
    v += a[oa] * b[ob];
    t[i + j4] = v;
  }
  gl11_matrix_load(d, t);
}
```