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

```asm
<mainloop>:
  endbr64
  push   %r15
  mov    $0xf,%ecx
  mov    $0xfe,%r9d
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xdc8,%rsp
  mov    %rdi,0x90(%rsp)
  lea    0x5b0(%rsp),%r15
  lea    0x4b0(%rsp),%r14
  mov    %rsi,0x98(%rsp)
  lea    0x8b0(%rsp),%r13
  lea    0xab0(%rsp),%rbx
  lea    0xc30(%rsp),%r12
  lea    0x130(%rsp),%rbp
  mov    %fs:0x28,%rax
  mov    %rax,0xdb8(%rsp)
  mov    %rdi,%rax
  lea    0x338(%rsp),%rdi
  movl   $0x1,0x330(%rsp)
  movdqu (%rax),%xmm0
  movdqu 0x10(%rax),%xmm2
  movdqu 0x20(%rax),%xmm4
  movdqu 0x30(%rax),%xmm6
  movaps %xmm0,0x2b0(%rsp)
  movdqu 0x40(%rax),%xmm0
  movaps %xmm2,0x2c0(%rsp)
  movdqu 0x50(%rax),%xmm2
  movaps %xmm4,0x2d0(%rsp)
  movdqu 0x60(%rax),%xmm4
  movaps %xmm6,0x2e0(%rsp)
  movdqu 0x70(%rax),%xmm6
  xor    %eax,%eax
  movq   $0x0,0x334(%rsp)
  movq   $0x0,0x3a8(%rsp)
  movaps %xmm0,0x2f0(%rsp)
  movaps %xmm2,0x300(%rsp)
  movaps %xmm4,0x310(%rsp)
  movaps %xmm6,(%rsp)
  movaps %xmm6,0x320(%rsp)
  rep stos %rax,%es:(%rdi)
  lea    0x3b8(%rsp),%rdi
  mov    $0x1f,%ecx
  movl   $0x1,0x3b0(%rsp)
  movq   $0x0,0x3b4(%rsp)
  movq   $0x0,0x4a8(%rsp)
  rep stos %rax,%es:(%rdi)
  lea    0x2b0(%rsp),%rax
  mov    %rax,0x50(%rsp)
  lea    0x3b0(%rsp),%rax
  mov    %rax,0x20(%rsp)
  lea    0x530(%rsp),%rax
  mov    %rax,0x68(%rsp)
  lea    0x930(%rsp),%rax
  mov    %rax,(%rsp)
  lea    0x630(%rsp),%rax
  mov    %rax,0x48(%rsp)
  lea    0x9b0(%rsp),%rax
  mov    %rax,0x40(%rsp)
  lea    0xa30(%rsp),%rax
  mov    %rax,0x28(%rsp)
  lea    0xb30(%rsp),%rax
  mov    %rax,0x18(%rsp)
  lea    0xbb0(%rsp),%rax
  mov    %rax,0x10(%rsp)
  lea    0xcb0(%rsp),%rax
  mov    %rax,0x58(%rsp)
  lea    0xd30(%rsp),%rax
  mov    %rax,0x38(%rsp)
  lea    0xb0(%rsp),%rax
  mov    %rax,0x80(%rsp)
  lea    0x1b0(%rsp),%rax
  mov    %rax,0x70(%rsp)
  lea    0x230(%rsp),%rax
  mov    %rax,0x60(%rsp)
  lea    0x6b0(%rsp),%rax
  mov    %rax,0x30(%rsp)
  lea    0x730(%rsp),%rax
  mov    %rax,0xa0(%rsp)
  lea    0x7b0(%rsp),%rax
  mov    %rax,0x78(%rsp)
  lea    0x830(%rsp),%rax
  mov    %rax,0xa8(%rsp)
  nopl   0x0(%rax)
L13:
  mov    %r9d,%eax
  mov    0x20(%rsp),%rdx
  mov    %r15,%rsi
  mov    %r14,%rdi
  mov    0x98(%rsp),%rcx
  sar    $0x3,%eax
  mov    %r9d,0x8c(%rsp)
  cltq
  movzbl (%rcx,%rax,1),%r8d
  mov    %r9d,%ecx
  and    $0x7,%ecx
  sar    %cl,%r8d
  mov    0x50(%rsp),%rcx
  and    $0x1,%r8d
  mov    %r8d,0x88(%rsp)
  call   <select@plt>
  mov    0x68(%rsp),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <add@plt>
  mov    0x68(%rsp),%rdx
  mov    (%rsp),%rdi
  mov    %r14,%rsi
  call   <sub@plt>
  mov    0x48(%rsp),%rdx
  mov    0x40(%rsp),%rdi
  mov    %r15,%rsi
  call   <add@plt>
  mov    0x48(%rsp),%rdx
  mov    0x28(%rsp),%rdi
  mov    %r15,%rsi
  call   <sub@plt>
  mov    %r13,%rsi
  mov    %rbx,%rdi
  call   <square@plt>
  mov    (%rsp),%rsi
  mov    0x18(%rsp),%rdi
  call   <square@plt>
  mov    (%rsp),%rdx
  mov    0x40(%rsp),%rsi
  mov    0x10(%rsp),%rdi
  call   <mult@plt>
  mov    0x28(%rsp),%rsi
  mov    %r13,%rdx
  mov    %r12,%rdi
  call   <mult@plt>
  mov    0x10(%rsp),%rsi
  mov    0x58(%rsp),%rdi
  mov    %r12,%rdx
  call   <add@plt>
  mov    0x10(%rsp),%rsi
  mov    0x38(%rsp),%rdi
  mov    %r12,%rdx
  call   <sub@plt>
  mov    0x38(%rsp),%rsi
  mov    0x80(%rsp),%rdi
  call   <square@plt>
  mov    0x18(%rsp),%rdx
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <sub@plt>
  mov    0x70(%rsp),%rdi
  mov    %rbp,%rsi
  call   <mult121665@plt>
  mov    0x70(%rsp),%rsi
  mov    0x60(%rsp),%rdi
  mov    %rbx,%rdx
  call   <add@plt>
  mov    0x18(%rsp),%rdx
  mov    0x30(%rsp),%rdi
  mov    %rbx,%rsi
  call   <mult@plt>
  mov    0x60(%rsp),%rdx
  mov    0xa0(%rsp),%rdi
  mov    %rbp,%rsi
  call   <mult@plt>
  mov    0x58(%rsp),%rsi
  mov    0x78(%rsp),%rdi
  call   <square@plt>
  mov    0x90(%rsp),%rdx
  mov    0x80(%rsp),%rsi
  mov    0xa8(%rsp),%rdi
  call   <mult@plt>
  mov    0x78(%rsp),%rcx
  mov    0x30(%rsp),%rdx
  mov    0x88(%rsp),%r8d
  mov    0x50(%rsp),%rsi
  mov    0x20(%rsp),%rdi
  call   <select@plt>
  mov    0x8c(%rsp),%r9d
  sub    $0x1,%r9d
  jae    L13
  mov    0x20(%rsp),%rax
  mov    0x90(%rsp),%rbx
  movdqa (%rax),%xmm0
  movdqa 0x10(%rax),%xmm2
  movdqa 0x20(%rax),%xmm4
  movdqa 0x30(%rax),%xmm6
  movups %xmm0,(%rbx)
  movdqa 0x40(%rax),%xmm0
  movups %xmm2,0x10(%rbx)
  movdqa 0x50(%rax),%xmm2
  movups %xmm4,0x20(%rbx)
  movdqa 0x60(%rax),%xmm4
  movups %xmm6,0x30(%rbx)
  movdqa 0x70(%rax),%xmm6
  movups %xmm0,0x40(%rbx)
  movdqa 0x80(%rax),%xmm0
  movups %xmm2,0x50(%rbx)
  movdqa 0x90(%rax),%xmm2
  movups %xmm4,0x60(%rbx)
  movdqa 0xa0(%rax),%xmm4
  movups %xmm6,0x70(%rbx)
  movdqa 0xb0(%rax),%xmm6
  movups %xmm0,0x80(%rbx)
  movdqa 0xc0(%rax),%xmm0
  movups %xmm2,0x90(%rbx)
  movdqa 0xd0(%rax),%xmm2
  movups %xmm4,0xa0(%rbx)
  movdqa 0xe0(%rax),%xmm4
  movups %xmm6,0xb0(%rbx)
  movups %xmm0,0xc0(%rbx)
  movups %xmm2,0xd0(%rbx)
  movups %xmm4,0xe0(%rbx)
  movdqa 0xf0(%rax),%xmm6
  movaps %xmm6,(%rsp)
  movups %xmm6,0xf0(%rbx)
  mov    0xdb8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L0
  add    $0xdc8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L0:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void mainloop(unsigned int work[64], const unsigned char e[32]) {
  unsigned int xzm1[64];
  unsigned int xzm[64];
  unsigned int xzmb[64];
  unsigned int xzm1b[64];
  unsigned int xznb[64];
  unsigned int xzn1b[64];
  unsigned int a0[64];
  unsigned int a1[64];
  unsigned int b0[64];
  unsigned int b1[64];
  unsigned int c1[64];
  unsigned int r[32];
  unsigned int s[32];
  unsigned int t[32];
  unsigned int u[32];
  unsigned int i;
  unsigned int j;
  unsigned int b;
  int pos;
  for (j = 0; j < 32; ++j)
    xzm1[j] = work[j];
  xzm1[32] = 1;
  for (j = 33; j < 64; ++j)
    xzm1[j] = 0;
  xzm[0] = 1;
  for (j = 1; j < 64; ++j)
    xzm[j] = 0;
  for (pos = 254; pos >= 0; --pos) {
    b = e[pos / 8] >> (pos & 7);
    b &= 1;
    select(xzmb, xzm1b, xzm, xzm1, b);
    add(a0, xzmb, xzmb + 32);
    sub(a0 + 32, xzmb, xzmb + 32);
    add(a1, xzm1b, xzm1b + 32);
    sub(a1 + 32, xzm1b, xzm1b + 32);
    square(b0, a0);
    square(b0 + 32, a0 + 32);
    mult(b1, a1, a0 + 32);
    mult(b1 + 32, a1 + 32, a0);
    add(c1, b1, b1 + 32);
    sub(c1 + 32, b1, b1 + 32);
    square(r, c1 + 32);
    sub(s, b0, b0 + 32);
    mult121665(t, s);
    add(u, t, b0);
    mult(xznb, b0, b0 + 32);
    mult(xznb + 32, s, u);
    square(xzn1b, c1);
    mult(xzn1b + 32, r, work);
    select(xzm, xzm1, xznb, xzn1b, b);
  }
  for (j = 0; j < 64; ++j)
    work[j] = xzm[j];
}
```