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

```asm
<lsf2a>:
  endbr64
  push   %r14
  pxor   %xmm5,%xmm5
  push   %r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x150,%rsp
  movups (%rsi),%xmm1
  movups 0x10(%rsi),%xmm4
  mov    %fs:0x28,%rax
  mov    %rax,0x148(%rsp)
  xor    %eax,%eax
  movaps D73(%rip),%xmm0
  movq   D73(%rip),%xmm2
  mulps  %xmm0,%xmm1
  mulps  %xmm4,%xmm0
  comiss %xmm1,%xmm5
  movups %xmm1,(%rsi)
  movups %xmm0,0x10(%rsi)
  movq   0x20(%rsi),%xmm0
  mulps  %xmm2,%xmm0
  movlps %xmm0,0x20(%rsi)
  shufps $0xe5,%xmm0,%xmm0
  jae    L63
  comiss D43(%rip),%xmm0
  jb     L51
  movss  D96(%rip),%xmm2
  movaps %xmm2,%xmm0
  subss  %xmm1,%xmm0
  divss  D16(%rip),%xmm0
L34:
  movss  %xmm2,0x24(%r12)
L1:
  movss  (%r12),%xmm2
  movaps %xmm0,%xmm8
  addss  %xmm0,%xmm2
  movaps %xmm2,%xmm7
  addss  %xmm0,%xmm7
  movaps %xmm7,%xmm5
  unpcklps %xmm7,%xmm2
  addss  %xmm0,%xmm5
  addss  %xmm5,%xmm8
  movaps %xmm8,%xmm1
  unpcklps %xmm8,%xmm5
  addss  %xmm0,%xmm1
  movlhps %xmm5,%xmm2
  movups %xmm2,0x4(%r12)
  movaps %xmm1,%xmm6
  addss  %xmm0,%xmm6
  movaps %xmm6,%xmm4
  unpcklps %xmm6,%xmm1
  addss  %xmm0,%xmm4
  movaps %xmm4,%xmm3
  addss  %xmm0,%xmm3
  unpcklps %xmm3,%xmm4
  addss  %xmm0,%xmm3
  movlhps %xmm4,%xmm1
  movups %xmm1,0x14(%r12)
  movss  %xmm3,0x24(%r12)
L51:
  mov    $0x14,%edx
  xor    %esi,%esi
  lea    0x50(%rsp),%r14
  xor    %ebp,%ebp
  lea    0x90(%rsp),%rdi
  lea    0x70(%rsp),%r13
  call   <memset@plt>
  lea    0xb0(%rsp),%rdi
  mov    $0x14,%edx
  xor    %esi,%esi
  call   <memset@plt>
  lea    0xd0(%rsp),%rdi
  mov    $0x14,%edx
  xor    %esi,%esi
  call   <memset@plt>
  lea    0xf0(%rsp),%rdi
  mov    $0x14,%edx
  xor    %esi,%esi
  call   <memset@plt>
  lea    0x110(%rsp),%rdi
  mov    $0x18,%edx
  xor    %esi,%esi
  call   <memset@plt>
  lea    0x130(%rsp),%rdi
  mov    $0x18,%edx
  xor    %esi,%esi
  call   <memset@plt>
L81:
  movss  D87(%rip),%xmm0
  mulss  (%r12,%rbp,2),%xmm0
  call   <cos@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,(%r14,%rbp,1)
  movss  D87(%rip),%xmm0
  mulss  0x4(%r12,%rbp,2),%xmm0
  call   <cos@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,0x0(%r13,%rbp,1)
  add    $0x4,%rbp
  cmp    $0x14,%rbp
  jne    L81
  movss  0x50(%rsp),%xmm0
  lea    0x4(%rbx),%r9
  movss  D57(%rip),%xmm7
  lea    0x2c(%rbx),%rbp
  movss  0xd0(%rsp),%xmm13
  movss  0x94(%rsp),%xmm12
  movss  0x98(%rsp),%xmm2
  movaps %xmm0,%xmm6
  movaps %xmm7,%xmm5
  movss  0xd8(%rsp),%xmm1
  addss  %xmm0,%xmm6
  movss  0x90(%rsp),%xmm0
  movss  %xmm2,0x14(%rsp)
  movss  %xmm0,0x1c(%rsp)
  mulss  %xmm6,%xmm0
  movss  %xmm6,0x44(%rsp)
  movaps %xmm7,%xmm6
  movss  %xmm1,0xc(%rsp)
  subss  %xmm0,%xmm6
  movss  0x70(%rsp),%xmm0
  addss  0xb0(%rsp),%xmm6
  addss  %xmm0,%xmm0
  movaps %xmm6,%xmm4
  movss  %xmm0,0x40(%rsp)
  mulss  %xmm13,%xmm0
  subss  %xmm0,%xmm5
  movss  0x54(%rsp),%xmm0
  addss  0xf0(%rsp),%xmm5
  addss  %xmm0,%xmm0
  movss  %xmm0,0x3c(%rsp)
  mulss  %xmm12,%xmm0
  subss  %xmm0,%xmm4
  movss  0x74(%rsp),%xmm0
  addss  0xb4(%rsp),%xmm4
  movaps %xmm0,%xmm3
  addss  %xmm0,%xmm3
  movss  0xd4(%rsp),%xmm0
  movss  %xmm0,0x24(%rsp)
  mulss  %xmm3,%xmm0
  movss  %xmm3,0x38(%rsp)
  movaps %xmm5,%xmm3
  subss  %xmm0,%xmm3
  movss  0x58(%rsp),%xmm0
  addss  0xf4(%rsp),%xmm3
  addss  %xmm0,%xmm0
  movss  %xmm0,0x28(%rsp)
  mulss  %xmm2,%xmm0
  movaps %xmm4,%xmm2
  subss  %xmm0,%xmm2
  movss  0x78(%rsp),%xmm0
  addss  0xb8(%rsp),%xmm2
  addss  %xmm0,%xmm0
  movaps %xmm2,%xmm9
  movss  %xmm0,0x2c(%rsp)
  mulss  %xmm1,%xmm0
  movaps %xmm3,%xmm1
  subss  %xmm0,%xmm1
  movss  0x5c(%rsp),%xmm0
  addss  0xf8(%rsp),%xmm1
  addss  %xmm0,%xmm0
  movaps %xmm1,%xmm8
  movaps %xmm0,%xmm10
  movss  %xmm0,0x4c(%rsp)
  movss  0x9c(%rsp),%xmm0
  movss  %xmm0,0x18(%rsp)
  mulss  %xmm10,%xmm0
  movss  0xdc(%rsp),%xmm11
  mov    D107(%rip),%r11d
  movss  %xmm7,0x8(%rsp)
  movaps %xmm7,%xmm10
  subss  %xmm0,%xmm9
  movss  0x7c(%rsp),%xmm0
  addss  0xbc(%rsp),%xmm9
  addss  %xmm0,%xmm0
  movss  %xmm0,0x48(%rsp)
  mulss  %xmm11,%xmm0
  subss  %xmm0,%xmm8
  movss  0x60(%rsp),%xmm0
  addss  0xfc(%rsp),%xmm8
  addss  %xmm0,%xmm0
  movss  %xmm0,0x30(%rsp)
  movss  0xa0(%rsp),%xmm0
  movss  %xmm0,0x10(%rsp)
  movss  0x80(%rsp),%xmm0
  addss  %xmm0,%xmm0
  movss  %xmm0,0x34(%rsp)
  movss  0xe0(%rsp),%xmm0
  movss  %xmm0,0x20(%rsp)
  movaps %xmm7,%xmm0
  jmp    L21
  nopw   0x0(%rax,%rax,1)
L66:
  movd   %r11d,%xmm0
  movaps %xmm7,%xmm8
  movaps %xmm14,%xmm9
  xor    %r11d,%r11d
  movss  %xmm10,0x8(%rsp)
  movaps %xmm15,%xmm1
  movd   %edx,%xmm2
  movd   %ecx,%xmm3
  movd   %esi,%xmm4
  movd   %edi,%xmm5
  movd   %r8d,%xmm6
  pxor   %xmm10,%xmm10
L21:
  movss  0x8(%rsp),%xmm14
  movaps %xmm10,%xmm7
  add    $0x4,%r9
  mulss  0x44(%rsp),%xmm14
  subss  %xmm14,%xmm7
  addss  0x1c(%rsp),%xmm7
  movd   %xmm7,%r8d
  movss  0x40(%rsp),%xmm7
  mulss  %xmm0,%xmm7
  movaps %xmm7,%xmm14
  movd   %r11d,%xmm7
  subss  %xmm14,%xmm7
  addss  %xmm13,%xmm7
  movd   %xmm7,%edi
  movss  0x3c(%rsp),%xmm7
  mulss  %xmm6,%xmm7
  movaps %xmm7,%xmm13
  movd   %r8d,%xmm7
  subss  %xmm13,%xmm7
  movss  0x34(%rsp),%xmm13
  mulss  %xmm8,%xmm13
  addss  %xmm12,%xmm7
  movss  0x38(%rsp),%xmm12
  mulss  %xmm5,%xmm12
  movd   %xmm7,%esi
  movd   %edi,%xmm7
  subss  %xmm12,%xmm7
  movss  0x28(%rsp),%xmm12
  addss  0x24(%rsp),%xmm7
  movss  %xmm5,0x24(%rsp)
  mulss  %xmm4,%xmm12
  movd   %xmm7,%ecx
  movd   %esi,%xmm7
  movd   %ecx,%xmm15
  subss  %xmm12,%xmm7
  addss  0x14(%rsp),%xmm7
  movss  0x48(%rsp),%xmm12
  movss  %xmm4,0x14(%rsp)
  mulss  %xmm1,%xmm12
  movd   %xmm7,%edx
  movss  0x2c(%rsp),%xmm7
  movd   %edx,%xmm14
  mulss  %xmm3,%xmm7
  subss  %xmm7,%xmm15
  movss  0x4c(%rsp),%xmm7
  addss  0xc(%rsp),%xmm15
  movss  %xmm3,0xc(%rsp)
  mulss  %xmm2,%xmm7
  subss  %xmm7,%xmm14
  movaps %xmm15,%xmm7
  addss  0x18(%rsp),%xmm14
  movss  %xmm2,0x18(%rsp)
  subss  %xmm12,%xmm7
  movaps %xmm14,%xmm12
  addss  %xmm11,%xmm7
  movss  0x30(%rsp),%xmm11
  mulss  %xmm9,%xmm11
  subss  %xmm11,%xmm12
  movaps %xmm7,%xmm11
  addss  0x10(%rsp),%xmm12
  movss  %xmm9,0x10(%rsp)
  subss  %xmm13,%xmm11
  addss  0x20(%rsp),%xmm11
  movss  0x8(%rsp),%xmm13
  movss  %xmm8,0x20(%rsp)
  movss  %xmm13,0x1c(%rsp)
  movaps %xmm0,%xmm13
  addss  %xmm12,%xmm11
  movaps %xmm6,%xmm12
  addss  %xmm11,%xmm11
  movss  %xmm11,-0x4(%r9)
  movaps %xmm1,%xmm11
  cmp    %r9,%rbp
  jne    L66
  movl   $0x3f800000,(%rbx)
  mov    0x148(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L53
  add    $0x150,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L63:
  comiss D43(%rip),%xmm0
  movss  D38(%rip),%xmm1
  movss  %xmm1,(%rsi)
  jae    L72
  subss  %xmm1,%xmm0
  divss  D16(%rip),%xmm0
  jmp    L1
L72:
  movss  D81(%rip),%xmm0
  movss  D96(%rip),%xmm2
  jmp    L34
L53:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D73
type_guessed: f32[4]
name: parse_data
arguments: label: D43
type_guessed: f32
name: parse_data
arguments: label: D96
type_guessed: f32
name: parse_data
arguments: label: D16
type_guessed: byte[4]
name: parse_data
arguments: label: D87
type_guessed: f32
name: parse_data
arguments: label: D57
type_guessed: f32
name: parse_data
arguments: label: D107
type_guessed: byte[4]
name: parse_data
arguments: label: D38
type_guessed: f32
name: parse_data
arguments: label: D81
type_guessed: byte[4]

tool: {"D73": [0.15915493667125702,0.15915493667125702,0.15915493667125702,0.15915493667125702]}

tool: D43: 0.5

tool: D96: 0.499

tool: {"D16": [0x00,0x00,0x10,0x41]}

tool: D87: 6.283185307

tool: D57: 0.25

tool: {"D107": [0x00,0x00,0x80,0xbe]}

tool: D38: 0.022

tool: {"D81": [0x87,0x16,0x59,0x3d]}

assistant: ```c
void lsf2a(float *a_coef, float *freq) {
  int i, j;
  float hlp;
  float p[(10 / 2)], q[(10 / 2)];
  float a[(10 / 2) + 1], a1[(10 / 2)], a2[(10 / 2)];
  float b[(10 / 2) + 1], b1[(10 / 2)], b2[(10 / 2)];
  for (i = 0; i < 10; i++) {
    freq[i] = freq[i] * (float)0.159154943;
  }
  if ((freq[0] <= 0.0) || (freq[10 - 1] >= 0.5)) {
    if (freq[0] <= 0.0) {
      freq[0] = (float)0.022;
    }
    if (freq[10 - 1] >= 0.5) {
      freq[10 - 1] = (float)0.499;
    }
    hlp = (freq[10 - 1] - freq[0]) / (float)(10 - 1);
    for (i = 1; i < 10; i++) {
      freq[i] = freq[i - 1] + hlp;
    }
  }
  memset(a1, 0, (10 / 2) * sizeof(float));
  memset(a2, 0, (10 / 2) * sizeof(float));
  memset(b1, 0, (10 / 2) * sizeof(float));
  memset(b2, 0, (10 / 2) * sizeof(float));
  memset(a, 0, ((10 / 2) + 1) * sizeof(float));
  memset(b, 0, ((10 / 2) + 1) * sizeof(float));
  for (i = 0; i < (10 / 2); i++) {
    p[i] = (float)cos((float)6.283185307 * freq[2 * i]);
    q[i] = (float)cos((float)6.283185307 * freq[2 * i + 1]);
  }
  a[0] = 0.25;
  b[0] = 0.25;
  for (i = 0; i < (10 / 2); i++) {
    a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i];
    b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i];
    a2[i] = a1[i];
    a1[i] = a[i];
    b2[i] = b1[i];
    b1[i] = b[i];
  }
  for (j = 0; j < 10; j++) {
    if (j == 0) {
      a[0] = 0.25;
      b[0] = -0.25;
    } else {
      a[0] = b[0] = 0.0;
    }
    for (i = 0; i < (10 / 2); i++) {
      a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i];
      b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i];
      a2[i] = a1[i];
      a1[i] = a[i];
      b2[i] = b1[i];
      b1[i] = b[i];
    }
    a_coef[j + 1] = 2 * (a[(10 / 2)] + b[(10 / 2)]);
  }
  a_coef[0] = 1.0;
}
```