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

```asm
<cmultiply_>:
  endbr64
  push   %r12
  mov    %rsi,%r12
  mov    $0x40,%esi
  push   %rbp
  mov    %rdx,%rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %r12,%rdi
  sub    $0x20,%rsp
  call   <__assume_aligned@plt>
  mov    $0x40,%esi
  mov    %rbp,%rdi
  call   <__assume_aligned@plt>
  mov    $0x40,%esi
  mov    %rbx,%rdi
  call   <__assume_aligned@plt>
  lea    0x3c0(%r12),%rsi
  mov    %rbx,%rcx
  add    $0x400,%r12
L17:
  movups -0x40(%rsi),%xmm0
  movups -0x3c0(%rsi),%xmm14
  mov    %rbp,%rax
  xor    %edx,%edx
  movups -0x380(%rsi),%xmm13
  movups -0x340(%rsi),%xmm12
  movaps %xmm0,0x10(%rsp)
  movups (%rsi),%xmm0
  movups -0x300(%rsi),%xmm11
  movups -0x2c0(%rsi),%xmm10
  movups -0x280(%rsi),%xmm9
  movups -0x240(%rsi),%xmm8
  movups -0x200(%rsi),%xmm7
  movaps %xmm0,(%rsp)
  movups -0x1c0(%rsi),%xmm6
  movups -0x180(%rsi),%xmm5
  movups -0x140(%rsi),%xmm4
  movups -0x100(%rsi),%xmm3
  movups -0xc0(%rsi),%xmm2
  movups -0x80(%rsi),%xmm1
  nopl   0x0(%rax)
L10:
  movss  (%rax),%xmm0
  movups (%rcx,%rdx,1),%xmm15
  add    $0x40,%rax
  shufps $0x0,%xmm0,%xmm0
  mulps  %xmm14,%xmm0
  addps  %xmm15,%xmm0
  movss  -0x3c(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm13,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x38(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm12,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x34(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm11,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x30(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm10,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x2c(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm9,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x28(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm8,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x24(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm7,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x20(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm6,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x1c(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm5,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x18(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm4,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x14(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm3,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x10(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm2,%xmm15
  addps  %xmm15,%xmm0
  movss  -0xc(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  %xmm1,%xmm15
  addps  %xmm15,%xmm0
  movss  -0x8(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  0x10(%rsp),%xmm15
  addps  %xmm15,%xmm0
  movss  -0x4(%rax),%xmm15
  shufps $0x0,%xmm15,%xmm15
  mulps  (%rsp),%xmm15
  addps  %xmm15,%xmm0
  movups %xmm0,(%rcx,%rdx,1)
  add    $0x40,%rdx
  cmp    $0x400,%rdx
  jne    L10
  add    $0x10,%rsi
  add    $0x10,%rcx
  cmp    %r12,%rsi
  jne    L17
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

assistant: ```c
void cmultiply_(float *restrict C, float *restrict A, float *restrict B) {
  __assume_aligned(A, 64);
  __assume_aligned(B, 64);
  __assume_aligned(C, 64);
  int i, j, k;
#pragma ivdep
#pragma vector aligned
#pragma vector always
  for (i = 0; i < 16; i++) {
    for (j = 0; j < 16; j++) {
      for (k = 0; k < 16; k++) {
        C[i + j * 16] += A[i + k * 16] * B[k + j * 16];
      }
    }
  }
}
```