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

```asm
<gl11_matrix_mult>:
  endbr64
  push   %r15
  push   %r14
  push   %rbx
  sub    $0x50,%rsp
  mov    %fs:0x28,%rcx
  mov    %rcx,0x48(%rsp)
  xor    %ecx,%ecx
  mov    (%rdx),%r8d
  movss  0x4(%rdx),%xmm7
  movd   %xmm7,%r14d
  mov    0x8(%rdx),%ebx
  movss  0xc(%rdx),%xmm15
  movss  0x10(%rdx),%xmm14
  movss  0x14(%rdx),%xmm13
  movss  0x18(%rdx),%xmm12
  movss  0x1c(%rdx),%xmm11
  movss  0x20(%rdx),%xmm10
  mov    0x24(%rdx),%r9d
  mov    0x28(%rdx),%r10d
  mov    0x2c(%rdx),%r11d
  movss  0x30(%rdx),%xmm7
  movd   %xmm7,%r15d
  movss  0x34(%rdx),%xmm9
  movss  0x38(%rdx),%xmm8
  movss  0x3c(%rdx),%xmm7
  mov    %rsi,%rdx
  mov    %rsp,%rax
  lea    0x10(%rsp),%rcx
  pxor   %xmm6,%xmm6
  movd   %xmm8,%esi
  movd   %ebx,%xmm8
  movd   %xmm7,%ebx
  movd   %r8d,%xmm7
L19:
  movss  (%rdx),%xmm3
  movaps %xmm3,%xmm1
  mulss  %xmm7,%xmm1
  addss  %xmm6,%xmm1
  movss  0x10(%rdx),%xmm2
  movd   %r14d,%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  0x20(%rdx),%xmm1
  movaps %xmm1,%xmm5
  mulss  %xmm8,%xmm5
  addss  %xmm0,%xmm5
  movss  0x30(%rdx),%xmm0
  movaps %xmm0,%xmm4
  mulss  %xmm15,%xmm4
  addss  %xmm5,%xmm4
  movss  %xmm4,(%rax)
  movaps %xmm3,%xmm5
  mulss  %xmm14,%xmm5
  addss  %xmm6,%xmm5
  movaps %xmm2,%xmm4
  mulss  %xmm13,%xmm4
  addss  %xmm4,%xmm5
  movaps %xmm1,%xmm4
  mulss  %xmm12,%xmm4
  addss  %xmm4,%xmm5
  movaps %xmm0,%xmm4
  mulss  %xmm11,%xmm4
  addss  %xmm5,%xmm4
  movss  %xmm4,0x10(%rax)
  movaps %xmm3,%xmm5
  mulss  %xmm10,%xmm5
  addss  %xmm6,%xmm5
  movd   %r9d,%xmm4
  mulss  %xmm2,%xmm4
  addss  %xmm4,%xmm5
  movd   %r10d,%xmm4
  mulss  %xmm1,%xmm4
  addss  %xmm4,%xmm5
  movd   %r11d,%xmm4
  mulss  %xmm0,%xmm4
  addss  %xmm5,%xmm4
  movss  %xmm4,0x20(%rax)
  movd   %r15d,%xmm5
  mulss  %xmm5,%xmm3
  addss  %xmm6,%xmm3
  mulss  %xmm9,%xmm2
  addss  %xmm3,%xmm2
  movd   %esi,%xmm3
  mulss  %xmm3,%xmm1
  addss  %xmm2,%xmm1
  movd   %ebx,%xmm2
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,0x30(%rax)
  add    $0x4,%rdx
  add    $0x4,%rax
  cmp    %rcx,%rax
  jne    L19
  mov    %rsp,%rsi
  call   <gl11_matrix_load@plt>
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L13
  add    $0x50,%rsp
  pop    %rbx
  pop    %r14
  pop    %r15
  ret
L13:
  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);
}
```