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

```asm
<WebRtcIsac_AllPoleFilter>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %ecx,-0x3c(%rbp)
  mov    -0x30(%rbp),%rax
  movsd  (%rax),%xmm0
  comisd D9(%rip),%xmm0
  jbe    L64
  mov    -0x30(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D15(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L64
  movq   $0x0,-0x10(%rbp)
  jmp    L56
L33:
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movl   $0x2,-0x1c(%rbp)
  jmp    L102
L86:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x1c(%rbp),%eax
  neg    %eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  addl   $0x1,-0x1c(%rbp)
L102:
  mov    -0x1c(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jle    L86
  mov    -0x28(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    %rdx,-0x28(%rbp)
  movsd  (%rax),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addq   $0x1,-0x10(%rbp)
L56:
  mov    -0x10(%rbp),%rax
  cmp    -0x38(%rbp),%rax
  jb     L33
  jmp    L104
L64:
  mov    -0x30(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D16(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movq   $0x0,-0x10(%rbp)
  jmp    L25
L107:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  movsd  %xmm0,(%rax)
  movl   $0x1,-0x1c(%rbp)
  jmp    L106
L58:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movapd %xmm1,%xmm2
  mulsd  -0x8(%rbp),%xmm2
  mov    -0x1c(%rbp),%eax
  neg    %eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x1c(%rbp)
L106:
  mov    -0x1c(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jle    L58
  addq   $0x8,-0x28(%rbp)
  addq   $0x1,-0x10(%rbp)
L25:
  mov    -0x10(%rbp),%rax
  cmp    -0x38(%rbp),%rax
  jb     L107
  nop
L104:
  nop
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: data_label: D9
type_guessed: f64[2]
name: parse_data
arguments: data_label: D15
type_guessed: f64
name: parse_data
arguments: data_label: D16
type_guessed: f64

tool: {"D9": [0.9999,1.0001]}

tool: D15: 1.0001

tool: D16: 1

assistant: ```c
void WebRtcIsac_AllPoleFilter(double *InOut, double *Coef, size_t lengthInOut, int orderCoef) {
  double scal;
  double sum;
  size_t n;
  int k;
  if ((Coef[0] > 0.9999) && (Coef[0] < 1.0001)) {
    for (n = 0; n < lengthInOut; n++) {
      sum = Coef[1] * InOut[-1];
      for (k = 2; k <= orderCoef; k++) {
        sum += Coef[k] * InOut[-k];
      }
      *InOut++ -= sum;
    }
  } else {
    scal = 1.0 / Coef[0];
    for (n = 0; n < lengthInOut; n++) {
      *InOut *= scal;
      for (k = 1; k <= orderCoef; k++) {
        *InOut -= scal * Coef[k] * InOut[-k];
      }
      InOut++;
    }
  }
}
```