user: Converte this assembly snippet into its equivalent C code:

```asm
<DoDFTQuick>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %edx,-0x54(%rbp)
  mov    %rcx,-0x60(%rbp)
  mov    %r8d,-0x58(%rbp)
  mov    %r9d,-0x64(%rbp)
  movss  %xmm0,-0x68(%rbp)
  movss  %xmm1,-0x6c(%rbp)
  movl   $0x0,-0x3c(%rbp)
  jmp    L42
L31:
  movl   $0x0,-0x34(%rbp)
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x30(%rbp)
  movss  -0x1c(%rbp),%xmm0
  mulss  -0x68(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x58(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x1c(%rbp),%xmm1
  movsd  D8(%rip),%xmm0
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x18(%rbp),%xmm0
  divss  -0x6c(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,%edi
  call   <floor@plt>
  mov    %eax,-0x20(%rbp)
  cmpl   $0x0,-0x20(%rbp)
  jne    L30
  movl   $0x1,-0x20(%rbp)
L30:
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x20(%rbp),%xmm0
  movss  -0x14(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movl   $0x0,-0x38(%rbp)
  jmp    L33
L40:
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0xc(%rbp)
  mov    -0x2c(%rbp),%eax
  sub    -0x20(%rbp),%eax
  mov    %eax,%edx
  mov    -0x64(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x64(%rbp)
  mov    %edx,-0x2c(%rbp)
  mov    -0x30(%rbp),%eax
  movd   %eax,%xmm0
  call   <sinf@plt>
  movss  -0xc(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  mov    -0x30(%rbp),%eax
  movd   %eax,%xmm0
  call   <cosf@plt>
  movss  -0xc(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0x28(%rbp),%xmm0
  addss  -0x8(%rbp),%xmm0
  movss  %xmm0,-0x28(%rbp)
  movss  -0x24(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,-0x24(%rbp)
  movss  -0x30(%rbp),%xmm0
  addss  -0x14(%rbp),%xmm0
  movss  %xmm0,-0x30(%rbp)
  addl   $0x1,-0x34(%rbp)
  mov    -0x20(%rbp),%eax
  add    %eax,-0x38(%rbp)
L33:
  mov    -0x38(%rbp),%eax
  cmp    -0x18(%rbp),%eax
  jle    L40
  movss  -0x28(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  %xmm0,%xmm1
  movss  -0x24(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  addss  %xmm0,%xmm1
  movd   %xmm1,%eax
  movd   %eax,%xmm0
  call   <sqrtf@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x10(%rbp)
  movss  -0x10(%rbp),%xmm0
  divss  -0x1c(%rbp),%xmm0
  movaps %xmm0,%xmm1
  divss  -0x68(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x20(%rbp),%xmm0
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x3c(%rbp)
L42:
  mov    -0x3c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L31
  nop
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D8
datatype: byte[8]

tool: {"D8": [0x6e,0x86,0x1b,0xf0,0xf9,0x21,0x19,0x40]}

assistant: ```c
void DoDFTQuick(float *outbins, float *frequencies, int bins, const float *databuffer, int place_in_data_buffer, int size_of_data_buffer, float q, float speedup) {
  int i, j;
  for (i = 0; i < bins; i++) {
    int flirts = 0;
    float freq = frequencies[i];
    float phi = 0;
    int ftq = freq * q;
    int sampleplace = place_in_data_buffer;
    float advance = 3.14159 * 2.0 / freq;
    float binqtys = 0;
    float binqtyc = 0;
    int skip = floor(ftq / speedup);
    if (skip == 0)
      skip = 1;
    advance *= skip;
    for (j = 0; j <= ftq; j += skip) {
      float sample = databuffer[sampleplace];
      sampleplace = (sampleplace - skip + size_of_data_buffer) % size_of_data_buffer;
      float sv = sinf(phi) * sample;
      float cv = cosf(phi) * sample;
      binqtys += sv;
      binqtyc += cv;
      phi += advance;
      flirts++;
    }
    float amp = sqrtf(binqtys * binqtys + binqtyc * binqtyc);
    outbins[i] = amp / freq / q * skip;
  }
}
```