user: 请将以下的汇编代码转换成C语言代码:

```asm
<SKP_Silk_MA>:
  endbr64
  test   %r8d,%r8d
  jle    L19
  push   %r15
  movslq %r9d,%rax
  xor    %r10d,%r10d
  push   %r14
  lea    (%rsi,%rax,2),%r15
  lea    -0x4(%rdx,%rax,4),%rax
  push   %r13
  mov    %rcx,%r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %rsi,%rdi
  lea    -0x1(%r9),%esi
  mov    %rax,-0x28(%rsp)
  movslq %r8d,%rax
  mov    %rax,-0x20(%rsp)
  lea    -0x2(%r9),%eax
  mov    %eax,-0x18(%rsp)
  mov    %esi,%eax
  shr    $0x3,%eax
  mov    %esi,-0x10(%rsp)
  and    $0xfffffff8,%esi
  sub    $0x1,%eax
  mov    %esi,-0x14(%rsp)
  shl    $0x5,%rax
  lea    0x20(%rdx,%rax,1),%r11
  lea    0x1(%rsi),%eax
  mov    %eax,-0xc(%rsp)
  nopl   0x0(%rax,%rax,1)
L44:
  movswl (%rbx,%r10,2),%esi
  movswl (%rdi),%eax
  imul   %esi,%eax
  add    (%rdx),%eax
  sar    $0xc,%eax
  add    $0x1,%eax
  sar    %eax
  cmp    $0x1,%r9d
  jle    L54
  cmpl   $0x6,-0x18(%rsp)
  jbe    L136
  movd   %esi,%xmm3
  lea    0x2(%rdi),%r8
  mov    %rdx,%rcx
  punpcklwd %xmm3,%xmm3
  pshufd $0x0,%xmm3,%xmm3
  xchg   %ax,%ax
L60:
  movdqu (%r8),%xmm1
  movdqu (%r8),%xmm0
  add    $0x20,%rcx
  add    $0x10,%r8
  movdqu -0xc(%rcx),%xmm4
  pmullw %xmm3,%xmm1
  pmulhw %xmm3,%xmm0
  movdqa %xmm1,%xmm2
  punpcklwd %xmm0,%xmm1
  punpckhwd %xmm0,%xmm2
  movdqu -0x1c(%rcx),%xmm0
  paddd  %xmm4,%xmm2
  paddd  %xmm1,%xmm0
  movups %xmm2,-0x10(%rcx)
  movups %xmm0,-0x20(%rcx)
  cmp    %r11,%rcx
  jne    L60
  mov    -0x10(%rsp),%r14d
  cmp    %r14d,-0x14(%rsp)
  je     L54
  mov    -0xc(%rsp),%r8d
L35:
  movslq %r8d,%rbp
  lea    0x0(,%rbp,4),%rcx
  lea    0x0(%rbp,%rbp,1),%r12
  movswl (%rdi,%rbp,2),%ebp
  lea    (%rdx,%rcx,1),%r14
  imul   %esi,%ebp
  add    (%r14),%ebp
  mov    %ebp,-0x4(%rdx,%rcx,1)
  lea    0x1(%r8),%ebp
  cmp    %ebp,%r9d
  jle    L54
  movswl 0x2(%rdi,%r12,1),%ebp
  imul   %esi,%ebp
  add    0x4(%rdx,%rcx,1),%ebp
  mov    %ebp,(%r14)
  lea    0x2(%r8),%ebp
  cmp    %ebp,%r9d
  jle    L54
  movswl 0x4(%rdi,%r12,1),%ebp
  lea    0x8(%rdx,%rcx,1),%r14
  imul   %esi,%ebp
  add    (%r14),%ebp
  mov    %ebp,0x4(%rdx,%rcx,1)
  lea    0x3(%r8),%ebp
  cmp    %ebp,%r9d
  jle    L54
  movswl 0x6(%rdi,%r12,1),%ebp
  imul   %esi,%ebp
  add    0xc(%rdx,%rcx,1),%ebp
  mov    %ebp,(%r14)
  lea    0x4(%r8),%ebp
  cmp    %ebp,%r9d
  jle    L54
  movswl 0x8(%rdi,%r12,1),%ebp
  lea    0x10(%rdx,%rcx,1),%r14
  imul   %esi,%ebp
  add    (%r14),%ebp
  mov    %ebp,0xc(%rdx,%rcx,1)
  lea    0x5(%r8),%ebp
  cmp    %ebp,%r9d
  jle    L54
  movswl 0xa(%rdi,%r12,1),%ebp
  add    $0x6,%r8d
  imul   %esi,%ebp
  add    0x14(%rdx,%rcx,1),%ebp
  mov    %ebp,(%r14)
  cmp    %r8d,%r9d
  jle    L54
  movswl 0xc(%rdi,%r12,1),%r8d
  imul   %esi,%r8d
  add    0x18(%rdx,%rcx,1),%r8d
  mov    %r8d,0x14(%rdx,%rcx,1)
L54:
  movswl (%r15),%ecx
  imul   %esi,%ecx
  mov    -0x28(%rsp),%rsi
  mov    %ecx,(%rsi)
  mov    $0x7fff,%ecx
  cmp    $0x7fff,%eax
  jg     L88
  cmp    $0xffff8000,%eax
  mov    $0xffff8000,%ecx
  cmovge %eax,%ecx
L88:
  mov    %cx,0x0(%r13,%r10,2)
  add    $0x1,%r10
  cmp    -0x20(%rsp),%r10
  jne    L44
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L136:
  mov    $0x1,%r8d
  jmp    L35
L19:
  ret
```

assistant: ```c
void SKP_Silk_MA(const short *in, const short *B, int *S, short *out, const int len, const int order) {
  int k, d, in16;
  int out32;
  for (k = 0; k < len; k++) {
    in16 = in[k];
    out32 = ((S[0]) + ((int)((short)(in16))) * (int)((short)(B[0])));
    out32 = ((13) == 1 ? ((out32) >> 1) + ((out32)&1) : (((out32) >> ((13) - 1)) + 1) >> 1);
    for (d = 1; d < order; d++) {
      S[d - 1] = ((S[d]) + ((int)((short)(in16))) * (int)((short)(B[d])));
    }
    S[order - 1] = ((int)((short)(in16)) * (int)((short)(B[order])));
    out[k] = (short)((out32) > 0x7FFF ? 0x7FFF : ((out32) < ((short)0x8000) ? ((short)0x8000) : (out32)));
  }
}
```