user: What would the C source look like for the assembly code provided here:

```asm
<inv_mdct>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %rdi,-0x98(%rbp)
  mov    %rsi,-0xa0(%rbp)
  mov    %edx,-0xa4(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    D32(%rip),%eax
  test   %eax,%eax
  jne    L115
  movl   $0x0,-0x88(%rbp)
  jmp    L7
L223:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x88(%rbp),%xmm1
  movsd  D202(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  D90(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  mov    -0x88(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  lea    D113(%rip),%rdx
  mov    %rax,(%rcx,%rdx,1)
  addl   $0x1,-0x88(%rbp)
L7:
  cmpl   $0x23,-0x88(%rbp)
  jle    L223
  movl   $0x0,-0x88(%rbp)
  jmp    L35
L226:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x88(%rbp),%xmm1
  movsd  D202(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  D90(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  mov    -0x88(%rbp),%edx
  movslq %edx,%rdx
  add    $0x24,%rdx
  lea    0x0(,%rdx,8),%rcx
  lea    D113(%rip),%rdx
  mov    %rax,(%rcx,%rdx,1)
  addl   $0x1,-0x88(%rbp)
L35:
  cmpl   $0x11,-0x88(%rbp)
  jle    L226
  movl   $0x12,-0x88(%rbp)
  jmp    L167
L26:
  mov    -0x88(%rbp),%eax
  cltq
  add    $0x24,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D113(%rip),%rax
  movsd  D89(%rip),%xmm0
  movsd  %xmm0,(%rdx,%rax,1)
  addl   $0x1,-0x88(%rbp)
L167:
  cmpl   $0x17,-0x88(%rbp)
  jle    L26
  movl   $0x18,-0x88(%rbp)
  jmp    L0
L99:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x88(%rbp),%xmm1
  movsd  D202(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  D38(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D158(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  mov    -0x88(%rbp),%edx
  movslq %edx,%rdx
  add    $0x24,%rdx
  lea    0x0(,%rdx,8),%rcx
  lea    D113(%rip),%rdx
  mov    %rax,(%rcx,%rdx,1)
  addl   $0x1,-0x88(%rbp)
L0:
  cmpl   $0x1d,-0x88(%rbp)
  jle    L99
  movl   $0x1e,-0x88(%rbp)
  jmp    L396
L1:
  mov    -0x88(%rbp),%eax
  cltq
  add    $0x24,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D113(%rip),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rdx,%rax,1)
  addl   $0x1,-0x88(%rbp)
L396:
  cmpl   $0x23,-0x88(%rbp)
  jle    L1
  movl   $0x0,-0x88(%rbp)
  jmp    L385
L9:
  mov    -0x88(%rbp),%eax
  cltq
  add    $0x6c,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D113(%rip),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rdx,%rax,1)
  addl   $0x1,-0x88(%rbp)
L385:
  cmpl   $0x5,-0x88(%rbp)
  jle    L9
  movl   $0x6,-0x88(%rbp)
  jmp    L212
L199:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x88(%rbp),%xmm1
  movsd  D202(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  D49(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D158(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  mov    -0x88(%rbp),%edx
  movslq %edx,%rdx
  add    $0x6c,%rdx
  lea    0x0(,%rdx,8),%rcx
  lea    D113(%rip),%rdx
  mov    %rax,(%rcx,%rdx,1)
  addl   $0x1,-0x88(%rbp)
L212:
  cmpl   $0xb,-0x88(%rbp)
  jle    L199
  movl   $0xc,-0x88(%rbp)
  jmp    L343
L120:
  mov    -0x88(%rbp),%eax
  cltq
  add    $0x6c,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D113(%rip),%rax
  movsd  D89(%rip),%xmm0
  movsd  %xmm0,(%rdx,%rax,1)
  addl   $0x1,-0x88(%rbp)
L343:
  cmpl   $0x11,-0x88(%rbp)
  jle    L120
  movl   $0x12,-0x88(%rbp)
  jmp    L28
L72:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x88(%rbp),%xmm1
  movsd  D202(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  D90(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  mov    -0x88(%rbp),%edx
  movslq %edx,%rdx
  add    $0x6c,%rdx
  lea    0x0(,%rdx,8),%rcx
  lea    D113(%rip),%rdx
  mov    %rax,(%rcx,%rdx,1)
  addl   $0x1,-0x88(%rbp)
L28:
  cmpl   $0x23,-0x88(%rbp)
  jle    L72
  movl   $0x0,-0x88(%rbp)
  jmp    L138
L145:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x88(%rbp),%xmm1
  movsd  D202(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  D158(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  mov    -0x88(%rbp),%edx
  movslq %edx,%rdx
  add    $0x48,%rdx
  lea    0x0(,%rdx,8),%rcx
  lea    D113(%rip),%rdx
  mov    %rax,(%rcx,%rdx,1)
  addl   $0x1,-0x88(%rbp)
L138:
  cmpl   $0xb,-0x88(%rbp)
  jle    L145
  movl   $0xc,-0x88(%rbp)
  jmp    L151
L341:
  mov    -0x88(%rbp),%eax
  cltq
  add    $0x48,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D113(%rip),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rdx,%rax,1)
  addl   $0x1,-0x88(%rbp)
L151:
  cmpl   $0x23,-0x88(%rbp)
  jle    L341
  movl   $0x0,-0x88(%rbp)
  jmp    L273
L255:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x88(%rbp),%xmm1
  movsd  D310(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  mov    -0x88(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  lea    D315(%rip),%rdx
  mov    %rax,(%rcx,%rdx,1)
  addl   $0x1,-0x88(%rbp)
L273:
  cmpl   $0x8f,-0x88(%rbp)
  jle    L255
  mov    D32(%rip),%eax
  add    $0x1,%eax
  mov    %eax,D205(%rip)
L115:
  movl   $0x0,-0x88(%rbp)
  jmp    L144
L131:
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x88(%rbp)
L144:
  cmpl   $0x23,-0x88(%rbp)
  jle    L131
  cmpl   $0x2,-0xa4(%rbp)
  jne    L252
  movl   $0xc,-0x7c(%rbp)
  movl   $0x0,-0x88(%rbp)
  jmp    L142
L59:
  movl   $0x0,-0x80(%rbp)
  jmp    L157
L66:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movl   $0x0,-0x84(%rbp)
  jmp    L240
L48:
  mov    -0x84(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %eax,%edx
  mov    -0x88(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm3
  movsd  %xmm3,-0xb0(%rbp)
  mov    -0x7c(%rbp),%eax
  add    %eax,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  D205(%rip),%xmm0
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  mov    -0x80(%rbp),%eax
  add    %eax,%eax
  lea    0x1(%rax),%edx
  mov    -0x7c(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  add    %edx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x84(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mulsd  -0xb0(%rbp),%xmm0
  movsd  -0x78(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  addl   $0x1,-0x84(%rbp)
L240:
  mov    -0x7c(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  cmp    %eax,-0x84(%rbp)
  jl     L48
  mov    -0x80(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xa4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D113(%rip),%rax
  movsd  (%rdx,%rax,1),%xmm0
  mulsd  -0x78(%rbp),%xmm0
  mov    -0x80(%rbp),%eax
  cltq
  movsd  %xmm0,-0x70(%rbp,%rax,8)
  addl   $0x1,-0x80(%rbp)
L157:
  mov    -0x80(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L66
  movl   $0x0,-0x80(%rbp)
  jmp    L345
L404:
  mov    -0x88(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x6,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x80(%rbp),%eax
  cltq
  movsd  -0x70(%rbp,%rax,8),%xmm0
  mov    -0x88(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x6,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x80(%rbp)
L345:
  mov    -0x80(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L404
  addl   $0x1,-0x88(%rbp)
L142:
  cmpl   $0x2,-0x88(%rbp)
  jle    L59
  jmp    L102
L252:
  movl   $0x24,-0x7c(%rbp)
  movl   $0x0,-0x80(%rbp)
  jmp    L325
L262:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movl   $0x0,-0x84(%rbp)
  jmp    L129
L288:
  mov    -0x84(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x80(%rbp),%eax
  add    %eax,%eax
  lea    0x1(%rax),%edx
  mov    -0x7c(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  add    %eax,%edx
  mov    -0x84(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  movslq %ecx,%rax
  imul   $0x38e38e39,%rax,%rax
  shr    $0x20,%rax
  sar    $0x5,%eax
  mov    %ecx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  shl    $0x3,%eax
  add    %edx,%eax
  shl    $0x4,%eax
  sub    %eax,%ecx
  mov    %ecx,%edx
  movslq %edx,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D315(%rip),%rax
  movsd  (%rdx,%rax,1),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x78(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  addl   $0x1,-0x84(%rbp)
L129:
  mov    -0x7c(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  cmp    %eax,-0x84(%rbp)
  jl     L288
  mov    -0x80(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xa4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D113(%rip),%rax
  movsd  (%rdx,%rax,1),%xmm0
  mov    -0x80(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  mulsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x80(%rbp)
L325:
  mov    -0x80(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L262
L102:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L328
  call   <__stack_chk_fail@plt>
L328:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D202
type: f64
name: extract_symbolic_data
arguments: tag: D90
type: byte[8]
name: extract_symbolic_data
arguments: tag: D89
type: f64
name: extract_symbolic_data
arguments: tag: D38
type: f32[2]
name: extract_symbolic_data
arguments: tag: D158
type: byte[8]
name: extract_symbolic_data
arguments: tag: D49
type: f32[2]
name: extract_symbolic_data
arguments: tag: D310
type: byte[8]
name: extract_symbolic_data
arguments: tag: D205
type: f64

tool: D202: 0.5

tool: {"D90": [0x81,0x44,0xe7,0x4a,0x18,0x57,0xb6,0x3f]}

tool: D89: 1

tool: {"D38": [0.0,2.78125]}

tool: {"D158": [0x61,0x73,0x2d,0x38,0x52,0xc1,0xd0,0x3f]}

tool: {"D49": [0.0,2.375]}

tool: {"D310": [0x81,0x44,0xe7,0x4a,0x18,0x57,0xa6,0x3f]}

tool: D205: 3.14159265358979

assistant: ```c
void inv_mdct(in, out, block_type) double in[18];
double out[36];
int block_type;
{
  int k, i, m, N, p;
  double tmp[12], sum;
  static double win[4][36];
  static int init = 0;
  static double COS[4 * 36];
  if (init == 0) {
    for (i = 0; i < 36; i++)
      win[0][i] = sin(3.14159265358979 / 36 * (i + 0.5));
    for (i = 0; i < 18; i++)
      win[1][i] = sin(3.14159265358979 / 36 * (i + 0.5));
    for (i = 18; i < 24; i++)
      win[1][i] = 1.0;
    for (i = 24; i < 30; i++)
      win[1][i] = sin(3.14159265358979 / 12 * (i + 0.5 - 18));
    for (i = 30; i < 36; i++)
      win[1][i] = 0.0;
    for (i = 0; i < 6; i++)
      win[3][i] = 0.0;
    for (i = 6; i < 12; i++)
      win[3][i] = sin(3.14159265358979 / 12 * (i + 0.5 - 6));
    for (i = 12; i < 18; i++)
      win[3][i] = 1.0;
    for (i = 18; i < 36; i++)
      win[3][i] = sin(3.14159265358979 / 36 * (i + 0.5));
    for (i = 0; i < 12; i++)
      win[2][i] = sin(3.14159265358979 / 12 * (i + 0.5));
    for (i = 12; i < 36; i++)
      win[2][i] = 0.0;
    for (i = 0; i < 4 * 36; i++)
      COS[i] = cos(3.14159265358979 / (2 * 36) * i);
    init++;
  }
  for (i = 0; i < 36; i++)
    out[i] = 0;
  if (block_type == 2) {
    N = 12;
    for (i = 0; i < 3; i++) {
      for (p = 0; p < N; p++) {
        sum = 0.0;
        for (m = 0; m < N / 2; m++)
          sum += in[i + 3 * m] * cos(3.14159265358979 / (2 * N) * (2 * p + 1 + N / 2) * (2 * m + 1));
        tmp[p] = sum * win[block_type][p];
      }
      for (p = 0; p < N; p++)
        out[6 * i + p + 6] += tmp[p];
    }
  } else {
    N = 36;
    for (p = 0; p < N; p++) {
      sum = 0.0;
      for (m = 0; m < N / 2; m++)
        sum += in[m] * COS[((2 * p + 1 + N / 2) * (2 * m + 1)) % (4 * 36)];
      out[p] = sum * win[block_type][p];
    }
  }
}
```