user: 请从给定的汇编指令推导出C源代码：

```asm
<SKP_Silk_resample_1_3>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x7d0,%rsp
  mov    %rdi,-0x7b8(%rbp)
  mov    %rsi,-0x7c0(%rbp)
  mov    %rdx,-0x7c8(%rbp)
  mov    %ecx,-0x7cc(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x6185550,-0x7a0(%rbp)
  mov    -0x7cc(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x7a4(%rbp)
  jmp    L76
L4:
  mov    -0x7a4(%rbp),%eax
  mov    %eax,%esi
  mov    $0x50,%edi
  call   <SKP_min_int@plt>
  mov    %eax,-0x79c(%rbp)
  mov    -0x79c(%rbp),%eax
  movswl %ax,%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  mov    %eax,-0x798(%rbp)
  mov    -0x798(%rbp),%ecx
  lea    -0x3d0(%rbp),%rdx
  mov    -0x7c0(%rbp),%rsi
  mov    -0x7c8(%rbp),%rax
  mov    %rax,%rdi
  call   <SKP_Silk_lowpass_short@plt>
  movl   $0x0,-0x7a8(%rbp)
  jmp    L14
L26:
  mov    -0x7a8(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  mov    -0x3d0(%rbp,%rax,4),%edx
  mov    -0x7a8(%rbp),%eax
  cltq
  mov    %edx,-0x790(%rbp,%rax,4)
  mov    -0x7a8(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x1,%eax
  cltq
  mov    -0x3d0(%rbp,%rax,4),%edx
  mov    -0x7a8(%rbp),%eax
  cltq
  mov    %edx,-0x650(%rbp,%rax,4)
  mov    -0x7a8(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x2,%eax
  cltq
  mov    -0x3d0(%rbp,%rax,4),%edx
  mov    -0x7a8(%rbp),%eax
  cltq
  mov    %edx,-0x510(%rbp,%rax,4)
  addl   $0x1,-0x7a8(%rbp)
L14:
  mov    -0x7a8(%rbp),%eax
  cmp    -0x79c(%rbp),%eax
  jl     L26
  movzwl D45(%rip),%eax
  movswl %ax,%edx
  mov    -0x7c0(%rbp),%rax
  lea    0x4(%rax),%rsi
  mov    -0x79c(%rbp),%edi
  lea    -0x3d0(%rbp),%rcx
  lea    -0x790(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <SKP_Silk_allpass_int@plt>
  movzwl D4(%rip),%eax
  movswl %ax,%edx
  mov    -0x7c0(%rbp),%rax
  lea    0x8(%rax),%rsi
  mov    -0x79c(%rbp),%edi
  lea    -0x790(%rbp),%rcx
  lea    -0x3d0(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <SKP_Silk_allpass_int@plt>
  movzwl D5(%rip),%eax
  movswl %ax,%edx
  mov    -0x7c0(%rbp),%rax
  lea    0xc(%rax),%rsi
  mov    -0x79c(%rbp),%edi
  lea    -0x3d0(%rbp),%rcx
  lea    -0x650(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <SKP_Silk_allpass_int@plt>
  movzwl D33(%rip),%eax
  movswl %ax,%edx
  mov    -0x7c0(%rbp),%rax
  lea    0x10(%rax),%rsi
  mov    -0x79c(%rbp),%edi
  lea    -0x650(%rbp),%rcx
  lea    -0x3d0(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <SKP_Silk_allpass_int@plt>
  movzwl D51(%rip),%eax
  movswl %ax,%edx
  mov    -0x7c0(%rbp),%rax
  lea    0x14(%rax),%rsi
  mov    -0x79c(%rbp),%edi
  lea    -0x3d0(%rbp),%rcx
  lea    -0x510(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <SKP_Silk_allpass_int@plt>
  movzwl D52(%rip),%eax
  movswl %ax,%edx
  mov    -0x7c0(%rbp),%rax
  lea    0x18(%rax),%rsi
  mov    -0x79c(%rbp),%edi
  lea    -0x510(%rbp),%rcx
  lea    -0x3d0(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <SKP_Silk_allpass_int@plt>
  movl   $0x0,-0x7a8(%rbp)
  jmp    L54
L95:
  mov    -0x7a8(%rbp),%eax
  cltq
  mov    -0x790(%rbp,%rax,4),%edx
  mov    -0x7a8(%rbp),%eax
  cltq
  mov    -0x650(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x7a8(%rbp),%eax
  cltq
  mov    -0x510(%rbp,%rax,4),%eax
  add    %edx,%eax
  mov    %eax,-0x794(%rbp)
  mov    -0x794(%rbp),%eax
  sub    -0x7a0(%rbp),%eax
  test   %eax,%eax
  jle    L69
  mov    -0x7a8(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x7b8(%rbp),%rax
  add    %rdx,%rax
  movw   $0x7fff,(%rax)
  jmp    L42
L69:
  mov    -0x794(%rbp),%edx
  mov    -0x7a0(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  jns    L23
  mov    -0x7a8(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x7b8(%rbp),%rax
  add    %rdx,%rax
  movw   $0x8000,(%rax)
  jmp    L42
L23:
  mov    -0x794(%rbp),%eax
  add    $0x618,%eax
  sar    $0x10,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  shl    $0x2,%eax
  lea    (%rax,%rdx,1),%ecx
  mov    -0x794(%rbp),%eax
  add    $0x618,%eax
  movzwl %ax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  sar    $0x10,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x7a8(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rcx
  mov    -0x7b8(%rbp),%rax
  add    %rcx,%rax
  mov    %dx,(%rax)
L42:
  addl   $0x1,-0x7a8(%rbp)
L54:
  mov    -0x7a8(%rbp),%eax
  cmp    -0x79c(%rbp),%eax
  jl     L95
  mov    -0x798(%rbp),%eax
  cltq
  add    %rax,%rax
  add    %rax,-0x7c8(%rbp)
  mov    -0x79c(%rbp),%eax
  cltq
  add    %rax,%rax
  add    %rax,-0x7b8(%rbp)
  mov    -0x79c(%rbp),%eax
  sub    %eax,-0x7a4(%rbp)
L76:
  cmpl   $0x0,-0x7a4(%rbp)
  jg     L4
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L67
  call   <__stack_chk_fail@plt>
L67:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D45
type_infered: byte[2]
name: parse_data
arguments: data_tag: D4
type_infered: byte[2]
name: parse_data
arguments: data_tag: D5
type_infered: byte[2]
name: parse_data
arguments: data_tag: D33
type_infered: byte[2]
name: parse_data
arguments: data_tag: D51
type_infered: byte[2]
name: parse_data
arguments: data_tag: D52
type_infered: byte[2]

tool: {"D45": [0x0a,0x2e]}

tool: {"D4": [0x78,0x72]}

tool: {"D5": [0x4e,0x13]}

tool: {"D33": [0x4d,0x64]}

tool: {"D51": [0xed,0x06]}

tool: {"D52": [0x9a,0x45]}

assistant: ```c
void SKP_Silk_resample_1_3(short *out, int *S, const short *in, const int inLen) {
  int k, outLen, LSubFrameIn, LSubFrameOut;
  int out_tmp, limit = 102258000;
  int scratch0[3 * 80];
  int scratch10[80], scratch11[80], scratch12[80];
  const short A30[2] = {1773, 17818};
  const short A31[2] = {4942, 25677};
  const short A32[2] = {11786, 29304};
  ;
  outLen = ((int)((inLen) / (3)));
  while (outLen > 0) {
    LSubFrameOut = SKP_min_int(80, outLen);
    LSubFrameIn = ((int)((short)(3)) * (int)((short)(LSubFrameOut)));
    SKP_Silk_lowpass_short(in, S, scratch0, LSubFrameIn);
    for (k = 0; k < LSubFrameOut; k++) {
      scratch10[k] = scratch0[3 * k];
      scratch11[k] = scratch0[3 * k + 1];
      scratch12[k] = scratch0[3 * k + 2];
    }
    SKP_Silk_allpass_int(scratch10, S + 1, A32[0], scratch0, LSubFrameOut);
    SKP_Silk_allpass_int(scratch0, S + 2, A32[1], scratch10, LSubFrameOut);
    SKP_Silk_allpass_int(scratch11, S + 3, A31[0], scratch0, LSubFrameOut);
    SKP_Silk_allpass_int(scratch0, S + 4, A31[1], scratch11, LSubFrameOut);
    SKP_Silk_allpass_int(scratch12, S + 5, A30[0], scratch0, LSubFrameOut);
    SKP_Silk_allpass_int(scratch0, S + 6, A30[1], scratch12, LSubFrameOut);
    for (k = 0; k < LSubFrameOut; k++) {
      out_tmp = scratch10[k] + scratch11[k] + scratch12[k];
      if (out_tmp - limit > 0) {
        out[k] = 0x7FFF;
      } else if (out_tmp + limit < 0) {
        out[k] = ((short)0x8000);
      } else {
        out[k] = (short)((((out_tmp + 1560) >> 16) * (int)((short)(21))) + ((((out_tmp + 1560) & 0x0000FFFF) * (int)((short)(21))) >> 16));
      }
    }
    in += LSubFrameIn;
    out += LSubFrameOut;
    outLen -= LSubFrameOut;
  }
}
```