user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<matmul8x8>:
  endbr64
  push   %r15
  movslq %ecx,%rcx
  mov    %r8,%rax
  pxor   %xmm0,%xmm0
  push   %r14
  mov    %rcx,%r11
  lea    0x0(,%rcx,4),%r9d
  mov    %esi,%r15d
  push   %r13
  mov    %rdx,%r10
  push   %r12
  push   %rbp
  push   %rbx
  lea    0x10(%r8),%rbx
  sub    $0x20,%rsp
  movups %xmm0,(%r8)
  mov    %rdi,(%rsp)
  lea    0x0(,%rcx,4),%rdi
  add    %rdi,%rax
  movups %xmm0,0x10(%r8)
  movups %xmm0,(%rax)
  movups %xmm0,0x10(%rax)
  add    %rdi,%rax
  movups %xmm0,(%rax)
  movups %xmm0,0x10(%rax)
  add    %rdi,%rax
  movups %xmm0,(%rax)
  movups %xmm0,0x10(%rax)
  add    %rdi,%rax
  movups %xmm0,(%rax)
  movups %xmm0,0x10(%rax)
  add    %rdi,%rax
  mov    %esi,0xc(%rsp)
  lea    (%rcx,%rcx,2),%esi
  add    $0x1,%rcx
  movups %xmm0,(%rax)
  shl    $0x4,%rcx
  movslq %esi,%rdx
  add    %esi,%esi
  movups %xmm0,0x10(%rax)
  add    %rdi,%rax
  mov    %rcx,%r14
  lea    (%r9,%r11,1),%ecx
  movups %xmm0,(%rax)
  movslq %ecx,%rcx
  movslq %esi,%rsi
  add    $0x4,%rdx
  movups %xmm0,0x10(%rax)
  add    $0x4,%rcx
  add    $0x4,%rsi
  mov    %r8,0x10(%rsp)
  lea    (%rax,%rdi,1),%r8
  lea    0x0(,%r11,8),%eax
  mov    %rbx,-0x8(%rsp)
  mov    %eax,%ebx
  sub    %r11d,%ebx
  movups %xmm0,(%r8)
  movups %xmm0,0x10(%r8)
  test   %r15d,%r15d
  jle    L57
  mov    %r10,%r8
  cltq
  lea    (%r10,%rdi,1),%r12
  movslq %ebx,%r11
  lea    0x0(,%rax,4),%rbx
  lea    0x10(%rax,%r8,1),%rax
  movslq %r9d,%r10
  movq   $0x0,-0x18(%rsp)
  mov    %rax,-0x38(%rsp)
  lea    (%r8,%rdx,4),%rax
  lea    (%r12,%rdi,1),%rbp
  mov    %rax,-0x70(%rsp)
  lea    (%r8,%r14,1),%rax
  lea    0x4(%r11),%r13
  mov    %rax,-0x68(%rsp)
  lea    (%r8,%rcx,4),%rax
  lea    (%r8,%r13,4),%r13
  mov    %r10,-0x30(%rsp)
  lea    0x4(%r8),%r10
  mov    %rax,-0x60(%rsp)
  lea    (%r8,%rsi,4),%rax
  mov    %rbx,-0x10(%rsp)
  lea    0x0(%rbp,%rdi,1),%rbx
  mov    %r10,-0x20(%rsp)
  mov    -0x30(%rsp),%r10
  lea    (%rbx,%rdi,1),%r11
  mov    %rax,-0x50(%rsp)
  movslq %r15d,%rax
  lea    (%r11,%rdi,1),%r9
  shl    $0x2,%rax
  lea    0x10(%r10,%r8,1),%r10
  mov    %r9,-0x48(%rsp)
  add    %rdi,%r9
  mov    %rax,-0x28(%rsp)
  add    %r9,%rdi
  mov    %r10,-0x58(%rsp)
  mov    -0x48(%rsp),%r10
L50:
  mov    -0x18(%rsp),%rcx
  mov    (%rsp),%rax
  movl   $0x8,0x8(%rsp)
  mov    0x10(%rsp),%rdx
  lea    (%rax,%rcx,4),%rax
  mov    -0x8(%rsp),%rcx
L26:
  cmp    -0x38(%rsp),%rdx
  setae  %r14b
  cmp    %rbp,%rcx
  setbe  %sil
  or     %esi,%r14d
  cmp    -0x58(%rsp),%rdx
  setae  %sil
  cmp    %r12,%rcx
  setbe  %r15b
  or     %r15d,%esi
  and    %r14d,%esi
  cmp    -0x70(%rsp),%rdx
  setae  %r14b
  cmp    %rbx,%rcx
  setbe  %r15b
  or     %r15d,%r14d
  and    %esi,%r14d
  cmp    -0x68(%rsp),%rdx
  setae  %sil
  cmp    %r11,%rcx
  setbe  %r15b
  or     %r15d,%esi
  and    %r14d,%esi
  cmp    -0x60(%rsp),%rdx
  setae  %r14b
  cmp    %r10,%rcx
  setbe  %r15b
  or     %r15d,%r14d
  and    %esi,%r14d
  cmp    -0x50(%rsp),%rdx
  setae  %sil
  cmp    %r9,%rcx
  setbe  %r15b
  or     %r15d,%esi
  and    %r14d,%esi
  cmp    %r13,%rdx
  setae  %r14b
  cmp    %rdi,%rcx
  setbe  %r15b
  or     %r15d,%r14d
  lea    0x20(%rax),%r15
  and    %r14d,%esi
  lea    0x20(%rdx),%r14
  cmp    %r14,%rax
  setae  %r14b
  cmp    %r15,%rdx
  setae  %r15b
  or     %r15d,%r14d
  test   %r14b,%sil
  je     L27
  mov    %rdx,%rsi
  sub    -0x20(%rsp),%rsi
  cmp    $0x8,%rsi
  jbe    L27
  movss  (%rax),%xmm9
  movups (%r8),%xmm0
  movups (%rdx),%xmm1
  movss  0x4(%rax),%xmm8
  shufps $0x0,%xmm9,%xmm9
  mulps  %xmm9,%xmm0
  movss  0x8(%rax),%xmm7
  movss  0xc(%rax),%xmm6
  movss  0x10(%rax),%xmm5
  movss  0x14(%rax),%xmm4
  shufps $0x0,%xmm8,%xmm8
  movss  0x18(%rax),%xmm3
  movss  0x1c(%rax),%xmm2
  shufps $0x0,%xmm7,%xmm7
  shufps $0x0,%xmm6,%xmm6
  shufps $0x0,%xmm5,%xmm5
  shufps $0x0,%xmm4,%xmm4
  mov    -0x58(%rsp),%rsi
  shufps $0x0,%xmm3,%xmm3
  shufps $0x0,%xmm2,%xmm2
  addps  %xmm1,%xmm0
  movups %xmm0,(%rdx)
  movups (%r12),%xmm1
  mulps  %xmm8,%xmm1
  addps  %xmm0,%xmm1
  movups %xmm1,(%rdx)
  movups 0x0(%rbp),%xmm0
  mulps  %xmm7,%xmm0
  addps  %xmm1,%xmm0
  movups %xmm0,(%rdx)
  movups (%rbx),%xmm1
  mulps  %xmm6,%xmm1
  addps  %xmm0,%xmm1
  movups %xmm1,(%rdx)
  movups (%r11),%xmm0
  mulps  %xmm5,%xmm0
  addps  %xmm1,%xmm0
  movups %xmm0,(%rdx)
  movups (%r10),%xmm1
  mulps  %xmm4,%xmm1
  addps  %xmm0,%xmm1
  movups %xmm1,(%rdx)
  movups (%r9),%xmm0
  mulps  %xmm3,%xmm0
  addps  %xmm1,%xmm0
  movups %xmm0,(%rdx)
  movups (%rdi),%xmm1
  mulps  %xmm2,%xmm1
  addps  %xmm1,%xmm0
  movups %xmm0,(%rdx)
  movups 0x10(%r8),%xmm0
  movups (%rcx),%xmm1
  mulps  %xmm9,%xmm0
  addps  %xmm1,%xmm0
  movups %xmm0,(%rcx)
  movups (%rsi),%xmm1
  mov    -0x38(%rsp),%rsi
  mulps  %xmm8,%xmm1
  addps  %xmm0,%xmm1
  movups %xmm1,(%rcx)
  movups (%rsi),%xmm0
  mov    -0x70(%rsp),%rsi
  mulps  %xmm7,%xmm0
  addps  %xmm1,%xmm0
  movups %xmm0,(%rcx)
  movups (%rsi),%xmm7
  mov    -0x68(%rsp),%rsi
  movaps %xmm7,%xmm1
  mulps  %xmm6,%xmm1
  addps  %xmm0,%xmm1
  movups %xmm1,(%rcx)
  movups (%rsi),%xmm6
  mov    -0x60(%rsp),%rsi
  movaps %xmm6,%xmm0
  mulps  %xmm5,%xmm0
  addps  %xmm1,%xmm0
  movups %xmm0,(%rcx)
  movups (%rsi),%xmm5
  mov    -0x50(%rsp),%rsi
  movaps %xmm5,%xmm1
  mulps  %xmm4,%xmm1
  addps  %xmm0,%xmm1
  movups %xmm1,(%rcx)
  movups (%rsi),%xmm4
  movaps %xmm4,%xmm0
  movaps %xmm4,-0x48(%rsp)
  mulps  %xmm3,%xmm0
  addps  %xmm1,%xmm0
  movups %xmm0,(%rcx)
  movups 0x0(%r13),%xmm1
  mulps  %xmm2,%xmm1
  addps  %xmm1,%xmm0
  movups %xmm0,(%rcx)
L51:
  mov    -0x30(%rsp),%rsi
  add    -0x28(%rsp),%rax
  add    %rsi,%rdx
  add    %rsi,%rcx
  subl   $0x1,0x8(%rsp)
  jne    L26
  mov    -0x10(%rsp),%rax
  addq   $0x8,-0x18(%rsp)
  add    %rax,-0x20(%rsp)
  mov    -0x18(%rsp),%rcx
  add    %rax,-0x58(%rsp)
  add    %rax,%r8
  add    %rax,%r12
  add    %rax,%rbp
  add    %rax,-0x38(%rsp)
  add    %rax,%rbx
  add    %rax,%r11
  add    %rax,%r10
  add    %rax,-0x70(%rsp)
  add    %rax,%r9
  add    %rax,%rdi
  add    %rax,%r13
  add    %rax,-0x68(%rsp)
  add    %rax,-0x60(%rsp)
  add    %rax,-0x50(%rsp)
  cmp    %ecx,0xc(%rsp)
  jg     L50
L57:
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L27:
  mov    %rdx,%r14
  xor    %esi,%esi
  nop
L30:
  movss  (%r8,%rsi,1),%xmm0
  mulss  (%rax),%xmm0
  add    $0x4,%r14
  addss  -0x4(%r14),%xmm0
  movss  %xmm0,-0x4(%r14)
  movss  (%r12,%rsi,1),%xmm1
  mulss  0x4(%rax),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,-0x4(%r14)
  movss  0x0(%rbp,%rsi,1),%xmm0
  mulss  0x8(%rax),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%r14)
  movss  (%rbx,%rsi,1),%xmm1
  mulss  0xc(%rax),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,-0x4(%r14)
  movss  (%r11,%rsi,1),%xmm0
  mulss  0x10(%rax),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%r14)
  movss  (%r10,%rsi,1),%xmm1
  mulss  0x14(%rax),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,-0x4(%r14)
  movss  0x18(%rax),%xmm0
  mulss  (%r9,%rsi,1),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%r14)
  movss  0x1c(%rax),%xmm1
  mulss  (%rdi,%rsi,1),%xmm1
  add    $0x4,%rsi
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%r14)
  cmp    $0x20,%rsi
  jne    L30
  jmp    L51
```

assistant: ```c
void matmul8x8(float *m1, int p1, float *m2, int p2, float *mo) {
  for (int y = 0; y < 8; y++) {
    for (int x = 0; x < 8; x++) {
      *(mo + y * p2 + x) = 0.0f;
    }
  }
  for (int idx = 0; idx < p1; idx += 8) {
    for (int y = 0; y < 8; y++) {
      for (int x = 0; x < 8; x++) {
        for (int idx2 = 0; idx2 < 8; idx2++) {
          *(mo + y * p2 + x) += (*(m1 + y * p1 + (idx + idx2))) * (*(m2 + (idx + idx2) * p2 + x));
        }
      }
    }
  }
}
```