user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<SKP_Silk_schur>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xa8,%rsp
  mov    %rdi,%r14
  mov    %rsi,%rbx
  mov    %edx,%r13d
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  mov    (%rsi),%edi
  call   <SKP_Silk_CLZ32@plt>
  cmp    $0x1,%eax
  jle    L163
  cmp    $0x2,%eax
  jg     L42
  test   %r13d,%r13d
  js     L140
  mov    %rbx,%rdx
  lea    0x14(%rsp),%rax
  mov    %r13d,%ecx
  lea    0x4(%rbx,%rcx,4),%rsi
L76:
  mov    (%rdx),%ecx
  mov    %ecx,(%rax)
  mov    %ecx,-0x4(%rax)
  add    $0x4,%rdx
  add    $0x8,%rax
  cmp    %rsi,%rdx
  jne    L76
  jmp    L140
L163:
  test   %r13d,%r13d
  js     L140
  mov    %rbx,%rcx
  lea    0x14(%rsp),%rdx
  mov    %r13d,%eax
  lea    0x4(%rbx,%rax,4),%rsi
L56:
  mov    (%rcx),%eax
  sar    %eax
  mov    %eax,(%rdx)
  mov    %eax,-0x4(%rdx)
  add    $0x4,%rcx
  add    $0x8,%rdx
  cmp    %rsi,%rcx
  jne    L56
L140:
  lea    -0x1(%r13),%r15d
  mov    %r13d,%eax
  mov    %rax,(%rsp)
  mov    $0x0,%ebx
  lea    0x1c(%rsp),%rax
  mov    %rax,0x8(%rsp)
  test   %r13d,%r13d
  jg     L25
L0:
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L94
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L42:
  lea    -0x2(%rax),%ecx
  test   %r13d,%r13d
  js     L140
  mov    %rbx,%rsi
  lea    0x14(%rsp),%rdx
  mov    %r13d,%eax
  lea    0x4(%rbx,%rax,4),%rdi
L106:
  mov    (%rsi),%eax
  shl    %cl,%eax
  mov    %eax,(%rdx)
  mov    %eax,-0x4(%rdx)
  add    $0x4,%rsi
  add    $0x8,%rdx
  cmp    %rdi,%rsi
  jne    L106
  jmp    L140
L165:
  mov    %dx,(%r14,%rbx,2)
  mov    %r13d,%eax
  sub    %r12d,%eax
  test   %eax,%eax
  jle    L34
  lea    0x14(%rsp),%rcx
  mov    %r15d,%eax
  sub    %r12d,%eax
  mov    0x8(%rsp),%rdi
  lea    (%rdi,%rax,8),%rdi
  movswl %dx,%esi
L157:
  mov    0x4(%rcx,%rbx,8),%edx
  mov    (%rcx),%r8d
  lea    (%r8,%r8,1),%r9d
  movzwl %r9w,%eax
  imul   %esi,%eax
  sar    $0x10,%eax
  sar    $0x10,%r9d
  imul   %esi,%r9d
  add    %r9d,%eax
  add    %edx,%eax
  mov    %eax,0x4(%rcx,%rbx,8)
  add    %edx,%edx
  movzwl %dx,%eax
  imul   %esi,%eax
  sar    $0x10,%eax
  sar    $0x10,%edx
  imul   %esi,%edx
  add    %edx,%eax
  add    %r8d,%eax
  mov    %eax,(%rcx)
  add    $0x8,%rcx
  cmp    %rdi,%rcx
  jne    L157
L34:
  add    $0x1,%rbx
  cmp    (%rsp),%rbx
  je     L0
L25:
  mov    %ebx,%r12d
  mov    0x18(%rsp,%rbx,8),%ebp
  mov    0x14(%rsp),%edi
  sar    $0xf,%edi
  mov    $0x1,%esi
  call   <SKP_max_32@plt>
  mov    %eax,%ecx
  mov    %ebp,%eax
  cltd
  idiv   %ecx
  mov    $0x7fff,%edx
  cmp    $0xffff8001,%eax
  jl     L165
  neg    %eax
  mov    %eax,%edx
  mov    $0xffff8000,%eax
  cmp    %eax,%edx
  cmovl  %eax,%edx
  jmp    L165
L94:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void SKP_Silk_schur(short *rc_Q15, const int *c, const int order) {
  int k, n, lz;
  int C[16 + 1][2];
  int Ctmp1, Ctmp2, rc_tmp_Q15;
  lz = SKP_Silk_CLZ32(c[0]);
  if (lz < 2) {
    for (k = 0; k < order + 1; k++) {
      C[k][0] = C[k][1] = ((c[k]) >> (1));
    }
  } else if (lz > 2) {
    lz -= 2;
    for (k = 0; k < order + 1; k++) {
      C[k][0] = C[k][1] = ((c[k]) << (lz));
    }
  } else {
    for (k = 0; k < order + 1; k++) {
      C[k][0] = C[k][1] = c[k];
    }
  }
  for (k = 0; k < order; k++) {
    rc_tmp_Q15 = -((int)((C[k + 1][0]) / (SKP_max_32(((C[0][1]) >> (15)), 1))));
    rc_tmp_Q15 = ((rc_tmp_Q15) > 0x7FFF ? 0x7FFF : ((rc_tmp_Q15) < ((short)0x8000) ? ((short)0x8000) : (rc_tmp_Q15)));
    rc_Q15[k] = (short)rc_tmp_Q15;
    for (n = 0; n < order - k; n++) {
      Ctmp1 = C[n + k + 1][0];
      Ctmp2 = C[n][1];
      C[n + k + 1][0] = ((Ctmp1) + ((((((Ctmp2) << (1))) >> 16) * (int)((short)(rc_tmp_Q15))) + ((((((Ctmp2) << (1))) & 0x0000FFFF) * (int)((short)(rc_tmp_Q15))) >> 16)));
      C[n][1] = ((Ctmp2) + ((((((Ctmp1) << (1))) >> 16) * (int)((short)(rc_tmp_Q15))) + ((((((Ctmp1) << (1))) & 0x0000FFFF) * (int)((short)(rc_tmp_Q15))) >> 16)));
    }
  }
}
```