user: Please show me the C implementation that matches the assembly code listed below:

```asm
<L3_imdct12>:
  endbr64
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rdx,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x30,%rsp
  movss  0x30(%r12),%xmm2
  movss  (%r12),%xmm0
  addss  0x24(%r12),%xmm2
  movss  0x18(%r12),%xmm1
  lea    0x8(%rsp),%rdi
  movss  D137(%rip),%xmm3
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  addss  0xc(%r12),%xmm1
  xorps  %xmm3,%xmm0
  call   <L3_idct3@plt>
  movss  0x18(%r12),%xmm2
  lea    0x18(%rsp),%rdi
  movss  0x30(%r12),%xmm1
  subss  0xc(%r12),%xmm2
  subss  0x24(%r12),%xmm1
  movss  0x3c(%r12),%xmm0
  call   <L3_idct3@plt>
  lea    0x18(%rbx),%rax
  movss  0x1c(%rsp),%xmm0
  movss  D137(%rip),%xmm3
  cmp    %rax,%rbp
  setae  %al
  cmp    %rbx,%rbp
  xorps  %xmm3,%xmm0
  setbe  %dl
  movss  %xmm0,0x1c(%rsp)
  or     %dl,%al
  je     L5
  lea    0x4(%rbp),%rax
  cmp    %rax,%rbx
  je     L5
  movq   0x8(%rsp),%xmm2
  movq   0x18(%rsp),%xmm3
  movq   D59(%rip),%xmm4
  movq   0x0(%rbp),%xmm0
  movq   D51(%rip),%xmm5
  movaps %xmm2,%xmm1
  movaps %xmm3,%xmm6
  mulps  %xmm4,%xmm1
  mulps  %xmm5,%xmm6
  mulps  %xmm4,%xmm3
  movq   D102(%rip),%xmm4
  mulps  %xmm5,%xmm2
  addps  %xmm6,%xmm1
  movss  D112(%rip),%xmm6
  subps  %xmm3,%xmm2
  movq   D112(%rip),%xmm3
  movaps %xmm1,%xmm5
  mulps  %xmm3,%xmm1
  movlps %xmm2,0x0(%rbp)
  mulps  %xmm4,%xmm5
  movaps %xmm0,%xmm2
  mulps  %xmm4,%xmm0
  movss  0x20(%rsp),%xmm4
  mulps  %xmm3,%xmm2
  movss  0x10(%rsp),%xmm3
  addps  %xmm1,%xmm0
  movaps %xmm4,%xmm1
  subps  %xmm5,%xmm2
  movss  D102(%rip),%xmm5
  mulss  %xmm6,%xmm1
  mulss  %xmm5,%xmm4
  shufps $0xe1,%xmm0,%xmm0
  movlps %xmm0,0x10(%rbx)
  movq   D133(%rip),%xmm0
  movlps %xmm2,(%rbx)
  movss  0x8(%rbp),%xmm2
  shufps $0xe0,%xmm2,%xmm2
  mulps  %xmm0,%xmm2
  movaps %xmm3,%xmm0
  mulss  %xmm5,%xmm0
  mulss  %xmm6,%xmm3
  addss  %xmm1,%xmm0
  movq   D155(%rip),%xmm1
  subss  %xmm4,%xmm3
  shufps $0xe0,%xmm0,%xmm0
  mulps  %xmm1,%xmm0
  movaps %xmm2,%xmm1
  movss  %xmm3,0x8(%rbp)
  subps  %xmm0,%xmm1
  addps  %xmm2,%xmm0
  movss  %xmm1,%xmm0
  movlps %xmm0,0x8(%rbx)
L3:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L2
  add    $0x30,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   (%rax)
L5:
  movss  0x8(%rsp),%xmm3
  movss  0x18(%rsp),%xmm6
  movaps %xmm0,%xmm10
  movss  D59(%rip),%xmm4
  movss  0x0(%rbp),%xmm1
  movss  D51(%rip),%xmm5
  movaps %xmm3,%xmm2
  movaps %xmm6,%xmm7
  movss  D124(%rip),%xmm9
  mulss  %xmm4,%xmm6
  mulss  %xmm5,%xmm7
  mulss  %xmm4,%xmm2
  mulss  %xmm5,%xmm3
  mulss  %xmm9,%xmm0
  addss  %xmm7,%xmm2
  movss  D112(%rip),%xmm7
  subss  %xmm6,%xmm3
  movss  D102(%rip),%xmm6
  movaps %xmm2,%xmm8
  movss  %xmm3,0x0(%rbp)
  mulss  %xmm6,%xmm8
  movaps %xmm1,%xmm3
  mulss  %xmm7,%xmm3
  mulss  %xmm7,%xmm2
  mulss  %xmm6,%xmm1
  subss  %xmm8,%xmm3
  movss  D23(%rip),%xmm8
  addss  %xmm2,%xmm1
  mulss  %xmm8,%xmm10
  movss  %xmm3,(%rbx)
  movss  0xc(%rsp),%xmm3
  movaps %xmm3,%xmm2
  movss  %xmm1,0x14(%rbx)
  movss  0x4(%rbp),%xmm1
  mulss  %xmm8,%xmm3
  mulss  %xmm9,%xmm2
  subss  %xmm0,%xmm3
  movaps %xmm1,%xmm0
  addss  %xmm10,%xmm2
  mulss  %xmm9,%xmm1
  mulss  %xmm8,%xmm0
  movss  %xmm3,0x4(%rbp)
  movaps %xmm2,%xmm3
  mulss  %xmm8,%xmm2
  mulss  %xmm9,%xmm3
  addss  %xmm2,%xmm1
  movss  0x20(%rsp),%xmm2
  subss  %xmm3,%xmm0
  movss  %xmm1,0x10(%rbx)
  movss  0x10(%rsp),%xmm1
  movss  %xmm0,0x4(%rbx)
  movaps %xmm2,%xmm0
  movss  0x8(%rbp),%xmm3
  mulss  %xmm6,%xmm2
  movaps %xmm1,%xmm8
  mulss  %xmm7,%xmm0
  mulss  %xmm6,%xmm8
  mulss  %xmm7,%xmm1
  addss  %xmm8,%xmm0
  subss  %xmm2,%xmm1
  movaps %xmm0,%xmm2
  movss  %xmm1,0x8(%rbp)
  mulss  %xmm4,%xmm2
  movaps %xmm3,%xmm1
  mulss  %xmm5,%xmm1
  mulss  %xmm5,%xmm0
  mulss  %xmm4,%xmm3
  subss  %xmm2,%xmm1
  addss  %xmm3,%xmm0
  movss  %xmm1,0x8(%rbx)
  movss  %xmm0,0xc(%rbx)
  jmp    L3
L2:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: tag: D137
datatype: byte[4]
name: parse_data
arguments: tag: D59
datatype: byte[8]
name: parse_data
arguments: tag: D51
datatype: byte[8]
name: parse_data
arguments: tag: D102
datatype: byte[8]
name: parse_data
arguments: tag: D112
datatype: byte[8]
name: parse_data
arguments: tag: D133
datatype: byte[8]
name: parse_data
arguments: tag: D155
datatype: byte[8]
name: parse_data
arguments: tag: D124
datatype: byte[4]
name: parse_data
arguments: tag: D23
datatype: byte[4]

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

tool: {"D59": [0xca,0xd7,0x1b,0x3f,0x15,0xef,0xc3,0x3e]}

tool: {"D51": [0x34,0x19,0x4b,0x3f,0x5e,0x83,0x6c,0x3f]}

tool: {"D102": [0xa8,0xa8,0x05,0x3e,0x15,0xef,0xc3,0x3e]}

tool: {"D112": [0x55,0xcf,0x7d,0x3f,0x5e,0x83,0x6c,0x3f]}

tool: {"D133": [0x34,0x19,0x4b,0x3f,0xca,0xd7,0x1b,0x3f]}

tool: {"D155": [0xca,0xd7,0x1b,0x3f,0x34,0x19,0x4b,0x3f]}

tool: {"D124": [0x15,0xef,0xc3,0x3e]}

tool: {"D23": [0x5e,0x83,0x6c,0x3f]}

assistant: ```c
void L3_imdct12(float *x, float *dst, float *overlap) {
  static const float g_twid3[6] = {0.79335334f, 0.92387953f, 0.99144486f, 0.60876143f, 0.38268343f, 0.13052619f};
  float co[3], si[3];
  int i;
  L3_idct3(-x[0], x[6] + x[3], x[12] + x[9], co);
  L3_idct3(x[15], x[12] - x[9], x[6] - x[3], si);
  si[1] = -si[1];
  for (i = 0; i < 3; i++) {
    float ovl = overlap[i];
    float sum = co[i] * g_twid3[3 + i] + si[i] * g_twid3[0 + i];
    overlap[i] = co[i] * g_twid3[0 + i] - si[i] * g_twid3[3 + i];
    dst[i] = ovl * g_twid3[2 - i] - sum * g_twid3[5 - i];
    dst[5 - i] = ovl * g_twid3[5 - i] + sum * g_twid3[2 - i];
  }
}
```