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

```asm
<WebRtcIsac_Dir2Lat>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %esi,-0x5c(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %rcx,-0x70(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  movss  D14(%rip),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  mov    -0x48(%rbp),%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  mov    %rax,%rdx
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rcx
  mov    -0x70(%rbp),%rax
  add    %rcx,%rax
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x5c(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x50(%rbp)
  jmp    L14
L52:
  movss  D14(%rip),%xmm0
  divss  -0x48(%rbp),%xmm0
  movss  %xmm0,-0x44(%rbp)
  movl   $0x1,-0x4c(%rbp)
  jmp    L13
L30:
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x50(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  cvtsd2ss %xmm1,%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  mulss  -0x44(%rbp),%xmm0
  mov    -0x4c(%rbp),%eax
  cltq
  movss  %xmm0,-0x40(%rbp,%rax,4)
  addl   $0x1,-0x4c(%rbp)
L13:
  mov    -0x4c(%rbp),%eax
  cmp    -0x50(%rbp),%eax
  jle    L30
  movl   $0x1,-0x4c(%rbp)
  jmp    L55
L32:
  mov    -0x4c(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm0
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  cvtss2sd %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x4c(%rbp)
L55:
  mov    -0x4c(%rbp),%eax
  cmp    -0x50(%rbp),%eax
  jl     L32
  mov    -0x50(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rax,%rdx
  mov    -0x50(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm0
  movss  %xmm0,(%rdx)
  mov    -0x50(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x50(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  movss  D14(%rip),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  mov    -0x48(%rbp),%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  mov    %rax,%rdx
  mov    -0x50(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rcx
  mov    -0x70(%rbp),%rax
  add    %rcx,%rax
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  movss  %xmm0,(%rax)
  subl   $0x1,-0x50(%rbp)
L14:
  cmpl   $0x0,-0x50(%rbp)
  jg     L52
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L25
  call   <__stack_chk_fail@plt>
L25:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D14
type: byte[4]

tool: {"D14": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void WebRtcIsac_Dir2Lat(double *a, int orderCoef, float *sth, float *cth) {
  int m, k;
  float tmp[12];
  float tmp_inv, cth2;
  sth[orderCoef - 1] = (float)a[orderCoef];
  cth2 = 1.0f - sth[orderCoef - 1] * sth[orderCoef - 1];
  cth[orderCoef - 1] = (float)sqrt(cth2);
  for (m = orderCoef - 1; m > 0; m--) {
    tmp_inv = 1.0f / cth2;
    for (k = 1; k <= m; k++) {
      tmp[k] = ((float)a[k] - sth[m] * (float)a[m - k + 1]) * tmp_inv;
    }
    for (k = 1; k < m; k++) {
      a[k] = tmp[k];
    }
    sth[m - 1] = tmp[m];
    cth2 = 1 - sth[m - 1] * sth[m - 1];
    cth[m - 1] = (float)sqrt(cth2);
  }
}
```