user: What is the c source code of the assembly code below:

```asm
<gl11_matrix_mult>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %rsi,-0x80(%rbp)
  mov    %rdx,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x64(%rbp)
  jmp    L11
L9:
  movl   $0x0,-0x60(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x60(%rbp),%eax
  add    %edx,%eax
  cltq
  movss  -0x54(%rbp),%xmm0
  movss  %xmm0,-0x50(%rbp,%rax,4)
  movl   $0x4,-0x60(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x60(%rbp),%eax
  add    %edx,%eax
  cltq
  movss  -0x54(%rbp),%xmm0
  movss  %xmm0,-0x50(%rbp,%rax,4)
  movl   $0x8,-0x60(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x60(%rbp),%eax
  add    %edx,%eax
  cltq
  movss  -0x54(%rbp),%xmm0
  movss  %xmm0,-0x50(%rbp,%rax,4)
  movl   $0xc,-0x60(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  addl   $0x4,-0x5c(%rbp)
  addl   $0x1,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x54(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x60(%rbp),%eax
  add    %edx,%eax
  cltq
  movss  -0x54(%rbp),%xmm0
  movss  %xmm0,-0x50(%rbp,%rax,4)
  addl   $0x1,-0x64(%rbp)
L11:
  cmpl   $0x3,-0x64(%rbp)
  jle    L9
  lea    -0x50(%rbp),%rdx
  mov    -0x78(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <gl11_matrix_load@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L15
  call   <__stack_chk_fail@plt>
L15:
  leave
  ret
```

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);
}
```