user: What would the C source look like for the assembly code provided here:

```asm
<SKP_Silk_schur64>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %rdi,-0xb8(%rbp)
  mov    %rsi,-0xc0(%rbp)
  mov    %edx,-0xc4(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0xc0(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jg     L50
  mov    -0xc4(%rbp),%eax
  cltq
  shl    $0x2,%eax
  mov    %eax,%edx
  mov    -0xb8(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  mov    $0x0,%eax
  jmp    L54
L50:
  movl   $0x0,-0xa4(%rbp)
  jmp    L21
L24:
  mov    -0xa4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xc0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xa4(%rbp),%eax
  cltq
  mov    %edx,-0x8c(%rbp,%rax,8)
  mov    -0xa4(%rbp),%eax
  cltq
  mov    -0x8c(%rbp,%rax,8),%edx
  mov    -0xa4(%rbp),%eax
  cltq
  mov    %edx,-0x90(%rbp,%rax,8)
  addl   $0x1,-0xa4(%rbp)
L21:
  mov    -0xc4(%rbp),%eax
  cmp    -0xa4(%rbp),%eax
  jge    L24
  movl   $0x0,-0xa4(%rbp)
  jmp    L72
L80:
  mov    -0x8c(%rbp),%eax
  mov    -0xa4(%rbp),%edx
  add    $0x1,%edx
  movslq %edx,%rdx
  mov    -0x90(%rbp,%rdx,8),%edx
  mov    %edx,%ecx
  neg    %ecx
  mov    $0x1f,%edx
  mov    %eax,%esi
  mov    %ecx,%edi
  call   <SKP_DIV32_varQ@plt>
  mov    %eax,-0x9c(%rbp)
  mov    -0x9c(%rbp),%eax
  sar    $0xe,%eax
  lea    0x1(%rax),%edx
  mov    -0xa4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xb8(%rbp),%rax
  add    %rcx,%rax
  sar    %edx
  mov    %edx,(%rax)
  movl   $0x0,-0xa0(%rbp)
  jmp    L64
L27:
  mov    -0xa0(%rbp),%edx
  mov    -0xa4(%rbp),%eax
  add    %edx,%eax
  add    $0x1,%eax
  cltq
  mov    -0x90(%rbp,%rax,8),%eax
  mov    %eax,-0x98(%rbp)
  mov    -0xa0(%rbp),%eax
  cltq
  mov    -0x8c(%rbp,%rax,8),%eax
  mov    %eax,-0x94(%rbp)
  mov    -0x94(%rbp),%eax
  add    %eax,%eax
  movslq %eax,%rdx
  mov    -0x9c(%rbp),%eax
  cltq
  imul   %rdx,%rax
  sar    $0x20,%rax
  mov    %eax,%ecx
  mov    -0xa0(%rbp),%edx
  mov    -0xa4(%rbp),%eax
  add    %edx,%eax
  add    $0x1,%eax
  mov    -0x98(%rbp),%edx
  add    %ecx,%edx
  cltq
  mov    %edx,-0x90(%rbp,%rax,8)
  mov    -0x98(%rbp),%eax
  add    %eax,%eax
  movslq %eax,%rdx
  mov    -0x9c(%rbp),%eax
  cltq
  imul   %rdx,%rax
  sar    $0x20,%rax
  mov    %eax,%edx
  mov    -0x94(%rbp),%eax
  add    %eax,%edx
  mov    -0xa0(%rbp),%eax
  cltq
  mov    %edx,-0x8c(%rbp,%rax,8)
  addl   $0x1,-0xa0(%rbp)
L64:
  mov    -0xc4(%rbp),%eax
  sub    -0xa4(%rbp),%eax
  cmp    %eax,-0xa0(%rbp)
  jl     L27
  addl   $0x1,-0xa4(%rbp)
L72:
  mov    -0xa4(%rbp),%eax
  cmp    -0xc4(%rbp),%eax
  jl     L80
  mov    -0x8c(%rbp),%eax
L54:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L62
  call   <__stack_chk_fail@plt>
L62:
  leave
  ret
```

assistant: ```c
int SKP_Silk_schur64(int rc_Q16[], const int c[], int order) {
  int k, n;
  int C[16 + 1][2];
  int Ctmp1_Q30, Ctmp2_Q30, rc_tmp_Q31;
  if (c[0] <= 0) {
    memset((rc_Q16), (0), (order * sizeof(int)));
    return 0;
  }
  for (k = 0; k < order + 1; k++) {
    C[k][0] = C[k][1] = c[k];
  }
  for (k = 0; k < order; k++) {
    rc_tmp_Q31 = SKP_DIV32_varQ(-C[k + 1][0], C[0][1], 31);
    rc_Q16[k] = ((15) == 1 ? ((rc_tmp_Q31) >> 1) + ((rc_tmp_Q31)&1) : (((rc_tmp_Q31) >> ((15) - 1)) + 1) >> 1);
    for (n = 0; n < order - k; n++) {
      Ctmp1_Q30 = C[n + k + 1][0];
      Ctmp2_Q30 = C[n][1];
      C[n + k + 1][0] = Ctmp1_Q30 + (int)((((long long)((((Ctmp2_Q30) << (1)))) * ((rc_tmp_Q31)))) >> (32));
      C[n][1] = Ctmp2_Q30 + (int)((((long long)((((Ctmp1_Q30) << (1)))) * ((rc_tmp_Q31)))) >> (32));
    }
  }
  return (C[0][1]);
}
```