user: 下面的汇编指令对应的C源代码是什么:

```asm
<_inv_postaud>:
  endbr64
  push   %r15
  movapd %xmm0,%xmm1
  mov    %edx,%r15d
  push   %r14
  mov    %rdi,%r14
  push   %r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  lea    -0x1(%r15),%ebp
  push   %rbx
  sub    $0x28,%rsp
  divsd  D66(%rip),%xmm1
  movapd %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  addsd  D55(%rip),%xmm0
  call   <sqrt@plt>
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm1
  cvtsi2sd %rax,%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%rdi
  call   <log@plt>
  mov    D106(%rip),%r13
  test   %r13,%r13
  je     L10
  cmp    $0x1,%ebp
  jle    L31
L26:
  mov    $0x1,%ebx
  nopl   0x0(%rax)
L11:
  mov    D26(%rip),%rax
  pxor   %xmm0,%xmm0
  cvtss2sd (%r14,%rbx,4),%xmm0
  movq   %rax,%xmm1
  call   <pow@plt>
  movapd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd 0x0(%r13,%rbx,4),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%r12,%rbx,4)
  add    $0x1,%rbx
  cmp    %ebx,%ebp
  jg     L11
L31:
  movslq %ebp,%rbp
  movl   $0x0,(%r12)
  mov    %r15d,%eax
  movl   $0x0,(%r12,%rbp,4)
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L10:
  lea    0x0(,%r15,4),%edi
  mov    %eax,%ebx
  call   <malloc@plt>
  mov    %rax,D77(%rip)
  cmp    $0x1,%ebp
  jle    L31
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  lea    -0x3(%r15),%eax
  cvtsi2sd %ebx,%xmm0
  mulsd  D77(%rip),%xmm0
  mov    %rax,0x10(%rsp)
  xor    %ebx,%ebx
  cvtsi2ss %ebp,%xmm1
  cvtsd2ss %xmm0,%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,0x1c(%rsp)
  nopl   0x0(%rax)
L42:
  lea    0x1(%rbx),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  0x1c(%rsp),%xmm0
  cvtss2sd %xmm0,%xmm0
  divsd  D77(%rip),%xmm0
  movsd  %xmm0,0x8(%rsp)
  call   <exp@plt>
  movsd  0x8(%rsp),%xmm0
  xorpd  D37(%rip),%xmm0
  mov    %eax,%r13d
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  movss  D40(%rip),%xmm1
  mov    %rbx,%rcx
  sub    %eax,%r13d
  movss  D71(%rip),%xmm2
  lea    0x1(%rbx),%rax
  cvtsi2sd %r13d,%xmm0
  mulsd  D95(%rip),%xmm0
  mov    D77(%rip),%r13
  mov    %rax,%rbx
  cvtsd2ss %xmm0,%xmm0
  mulss  %xmm0,%xmm0
  addss  %xmm0,%xmm1
  addss  %xmm0,%xmm2
  divss  %xmm0,%xmm1
  addss  D92(%rip),%xmm0
  divss  %xmm0,%xmm2
  mulss  %xmm1,%xmm1
  mulss  %xmm1,%xmm2
  movss  %xmm2,0x0(%r13,%rax,4)
  cmp    %rcx,0x10(%rsp)
  jne    L42
  jmp    L26
```

tool_calls: name: parse_data
arguments: label: D66
type_infered: f64
name: parse_data
arguments: label: D55
type_infered: f64
name: parse_data
arguments: label: D26
type_infered: byte[8]
name: parse_data
arguments: label: D77
type_infered: f64
name: parse_data
arguments: label: D37
type_infered: byte[16]
name: parse_data
arguments: label: D40
type_infered: f32
name: parse_data
arguments: label: D71
type_infered: f32
name: parse_data
arguments: label: D95
type_infered: f64
name: parse_data
arguments: label: D92
type_infered: f32

tool: D66: 1200

tool: D55: 1

tool: {"D26": [0x3e,0xf8,0xe0,0x83,0x0f,0x3e,0x08,0x40]}

tool: D77: 6

tool: {"D37": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D40: 160000

tool: D71: 9610000

tool: D95: 300

tool: D92: 1440000

assistant: ```c
int _inv_postaud(float *input, float *output, int len, double srate) {
  int i, lastfilt;
  float step_barks;
  float f_bark_mid, f_hz_mid;
  float ftmp, fsq, nyqbar;
  double tmp;
  char funcname[] = "inv_postaud";
  static float *inveql = NULL;
  int nfilts = len;
  int first_good = 1;
  tmp = srate / 1200.;
  nyqbar = 6. * log((srate / 1200.) + sqrt(tmp * tmp + 1.));
  step_barks = nyqbar / (float)(nfilts - 1);
  lastfilt = nfilts - first_good;
  if (inveql == NULL) {
    inveql = (float *)malloc(nfilts * sizeof(float));
    for (i = first_good; i < lastfilt; i++) {
      f_bark_mid = i * step_barks;
      f_hz_mid = 300. * (exp((double)f_bark_mid / 6.) - exp(-(double)f_bark_mid / 6.));
      fsq = (f_hz_mid * f_hz_mid);
      ftmp = fsq + 1.6e5;
      inveql[i] = (ftmp / fsq) * (ftmp / fsq) * ((fsq + (float)9.61e6) / (fsq + (float)1.44e6));
    }
  }
  for (i = first_good; i < lastfilt; i++) {
    tmp = pow((double)input[i], 1.0 / .33);
    output[i] = tmp * inveql[i];
  }
  for (i = first_good; i > 0; i--) {
    output[i - 1] = 0;
  }
  for (i = lastfilt; i < nfilts; i++) {
    output[i] = 0;
  }
  return (nfilts);
}
```