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  D87(%rip),%xmm1
  movapd %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  addsd  D92(%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    D111(%rip),%r13
  test   %r13,%r13
  je     L43
  cmp    $0x1,%ebp
  jle    L44
L3:
  mov    $0x1,%ebx
  nopl   0x0(%rax)
L1:
  mov    D83(%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     L1
L44:
  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)
L43:
  lea    0x0(,%r15,4),%edi
  mov    %eax,%ebx
  call   <malloc@plt>
  mov    %rax,D97(%rip)
  cmp    $0x1,%ebp
  jle    L44
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  lea    -0x3(%r15),%eax
  cvtsi2sd %ebx,%xmm0
  mulsd  D97(%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)
L33:
  lea    0x1(%rbx),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  0x1c(%rsp),%xmm0
  cvtss2sd %xmm0,%xmm0
  divsd  D97(%rip),%xmm0
  movsd  %xmm0,0x8(%rsp)
  call   <exp@plt>
  movsd  0x8(%rsp),%xmm0
  xorpd  D122(%rip),%xmm0
  mov    %eax,%r13d
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  movss  D93(%rip),%xmm1
  mov    %rbx,%rcx
  sub    %eax,%r13d
  movss  D118(%rip),%xmm2
  lea    0x1(%rbx),%rax
  cvtsi2sd %r13d,%xmm0
  mulsd  D112(%rip),%xmm0
  mov    D97(%rip),%r13
  mov    %rax,%rbx
  cvtsd2ss %xmm0,%xmm0
  mulss  %xmm0,%xmm0
  addss  %xmm0,%xmm1
  addss  %xmm0,%xmm2
  divss  %xmm0,%xmm1
  addss  D121(%rip),%xmm0
  divss  %xmm0,%xmm2
  mulss  %xmm1,%xmm1
  mulss  %xmm1,%xmm2
  movss  %xmm2,0x0(%r13,%rax,4)
  cmp    %rcx,0x10(%rsp)
  jne    L33
  jmp    L3
```

tool_calls: name: parse_data
arguments: data_tag: D87
datatype: f64
name: parse_data
arguments: data_tag: D92
datatype: f64
name: parse_data
arguments: data_tag: D83
datatype: byte[8]
name: parse_data
arguments: data_tag: D97
datatype: f64
name: parse_data
arguments: data_tag: D122
datatype: byte[16]
name: parse_data
arguments: data_tag: D93
datatype: f32
name: parse_data
arguments: data_tag: D118
datatype: f32
name: parse_data
arguments: data_tag: D112
datatype: f64
name: parse_data
arguments: data_tag: D121
datatype: f32

tool: D87: 1200

tool: D92: 1

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

tool: D97: 6

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

tool: D93: 160000

tool: D118: 9610000

tool: D112: 300

tool: D121: 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);
}
```