user: Translate the below assembly code into C programming language:

```asm
<WebRtcIsac_Dir2Lat>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %rdi,%rbx
  mov    %esi,%r12d
  mov    %rdx,%r14
  mov    %rcx,%r15
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  movslq %esi,%rax
  lea    0x0(,%rax,4),%rbp
  pxor   %xmm0,%xmm0
  cvtsd2ss (%rdi,%rax,8),%xmm0
  movss  %xmm0,-0x4(%rdx,%rbp,1)
  mulss  %xmm0,%xmm0
  movss  D3(%rip),%xmm1
  subss  %xmm0,%xmm1
  movss  %xmm1,0xc(%rsp)
  movaps %xmm1,%xmm0
  call   <sqrt@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0x4(%r15,%rbp,1)
  lea    -0x1(%r12),%eax
  test   %eax,%eax
  jle    L76
  mov    %eax,%r13d
  sub    $0x2,%r12d
  cltq
  lea    0x0(,%rax,4),%rbp
  jmp    L30
L85:
  movss  0x10(%rsp,%rbp,1),%xmm0
  movss  %xmm0,-0x4(%r14,%rbp,1)
  mulss  %xmm0,%xmm0
  movss  D3(%rip),%xmm6
  subss  %xmm0,%xmm6
  movss  %xmm6,0xc(%rsp)
  movaps %xmm6,%xmm0
  call   <sqrt@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0x4(%r15,%rbp,1)
  test   %r12d,%r12d
  jg     L52
L76:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L20
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L52:
  sub    $0x1,%r13d
  sub    $0x1,%r12d
  sub    $0x4,%rbp
L30:
  mov    %r13d,%esi
  movss  D3(%rip),%xmm2
  divss  0xc(%rsp),%xmm2
  test   %r13d,%r13d
  jle    L32
  movss  (%r14,%rbp,1),%xmm3
  lea    (%rbx,%rbp,2),%rdx
  mov    %r12d,%ecx
  add    $0x2,%rcx
  mov    $0x1,%eax
L66:
  pxor   %xmm0,%xmm0
  cvtsd2ss (%rbx,%rax,8),%xmm0
  pxor   %xmm1,%xmm1
  cvtsd2ss (%rdx),%xmm1
  mulss  %xmm3,%xmm1
  subss  %xmm1,%xmm0
  mulss  %xmm2,%xmm0
  movss  %xmm0,0x10(%rsp,%rax,4)
  add    $0x1,%rax
  sub    $0x8,%rdx
  cmp    %rcx,%rax
  jne    L66
L32:
  cmp    $0x1,%esi
  jle    L85
  lea    -0x1(%r12),%edx
  add    $0x2,%rdx
  mov    $0x1,%eax
  lea    0x10(%rsp),%rcx
L35:
  pxor   %xmm0,%xmm0
  cvtss2sd (%rcx,%rax,4),%xmm0
  movsd  %xmm0,(%rbx,%rax,8)
  add    $0x1,%rax
  cmp    %rdx,%rax
  jne    L35
  movss  0x10(%rsp,%rbp,1),%xmm0
  movss  %xmm0,-0x4(%r14,%rbp,1)
  mulss  %xmm0,%xmm0
  movss  D3(%rip),%xmm4
  subss  %xmm0,%xmm4
  movss  %xmm4,0xc(%rsp)
  movaps %xmm4,%xmm0
  call   <sqrt@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0x4(%r15,%rbp,1)
  jmp    L52
L20:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D3
type_guessed: byte[4]

tool: {"D3": [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);
  }
}
```