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

```asm
<EllipticToRectangular>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  movsd  %xmm0,0x8(%rsp)
  movsd  %xmm1,0x38(%rsp)
  mov    %rdi,%rbx
  mov    %rsi,%r12
  movsd  0x8(%rdi),%xmm0
  movsd  D39(%rip),%xmm1
  call   <fmod@plt>
  movq   %xmm0,%rbp
  lea    0x48(%rsp),%rdi
  lea    0x40(%rsp),%rsi
  call   <sincos@plt>
  movsd  0x48(%rsp),%xmm0
  mulsd  0x10(%rbx),%xmm0
  movq   %rbp,%xmm1
  subsd  %xmm0,%xmm1
  movsd  0x40(%rsp),%xmm0
  mulsd  0x18(%rbx),%xmm0
  addsd  %xmm0,%xmm1
  movsd  %xmm1,(%rsp)
L4:
  lea    0x48(%rsp),%rdi
  lea    0x40(%rsp),%rsi
  movsd  (%rsp),%xmm0
  call   <sincos@plt>
  movsd  0x40(%rsp),%xmm3
  movsd  0x48(%rsp),%xmm4
  movsd  0x10(%rbx),%xmm2
  movsd  0x18(%rbx),%xmm1
  movq   %rbp,%xmm6
  movsd  (%rsp),%xmm7
  subsd  %xmm7,%xmm6
  movapd %xmm6,%xmm0
  movapd %xmm2,%xmm5
  mulsd  %xmm4,%xmm5
  addsd  %xmm5,%xmm0
  movapd %xmm1,%xmm5
  mulsd  %xmm3,%xmm5
  subsd  %xmm5,%xmm0
  mulsd  %xmm3,%xmm2
  movsd  D14(%rip),%xmm3
  subsd  %xmm2,%xmm3
  mulsd  %xmm4,%xmm1
  movapd %xmm3,%xmm2
  subsd  %xmm1,%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm7
  movsd  %xmm7,(%rsp)
  call   <fabs@plt>
  test   %eax,%eax
  jg     L4
  lea    0x48(%rsp),%rdi
  lea    0x40(%rsp),%rsi
  movsd  (%rsp),%xmm0
  call   <sincos@plt>
  mov    0x40(%rsp),%r13
  mov    0x48(%rsp),%rbp
  movsd  0x10(%rbx),%xmm4
  movsd  %xmm4,(%rsp)
  movsd  0x18(%rbx),%xmm6
  movsd  %xmm6,0x10(%rsp)
  movq   %rbp,%xmm0
  mulsd  %xmm4,%xmm0
  movq   %r13,%xmm1
  mulsd  %xmm6,%xmm1
  subsd  %xmm0,%xmm1
  movq   %xmm1,%r14
  movapd %xmm4,%xmm1
  mulsd  %xmm4,%xmm1
  movsd  D14(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movapd %xmm6,%xmm1
  mulsd  %xmm6,%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L15
  sqrtsd %xmm0,%xmm0
L45:
  movsd  D14(%rip),%xmm1
  addsd  %xmm1,%xmm0
  movapd %xmm1,%xmm4
  divsd  %xmm0,%xmm4
  movsd  %xmm4,0x18(%rsp)
  movq   %r14,%xmm0
  mulsd  %xmm4,%xmm0
  movq   %r13,%xmm2
  movsd  (%rsp),%xmm4
  subsd  %xmm4,%xmm2
  movsd  0x10(%rsp),%xmm6
  movapd %xmm6,%xmm3
  mulsd  %xmm0,%xmm3
  subsd  %xmm3,%xmm2
  movsd  0x8(%rsp),%xmm7
  mulsd  %xmm7,%xmm2
  movsd  %xmm2,0x10(%rsp)
  movq   %rbp,%xmm2
  subsd  %xmm6,%xmm2
  mulsd  %xmm4,%xmm0
  addsd  %xmm0,%xmm2
  mulsd  %xmm7,%xmm2
  movsd  %xmm2,0x20(%rsp)
  mov    0x20(%rbx),%r14
  movq   %r14,%xmm7
  mulsd  %xmm7,%xmm7
  movsd  %xmm7,0x28(%rsp)
  movsd  0x28(%rbx),%xmm4
  movq   %xmm4,%r15
  mulsd  %xmm4,%xmm4
  movsd  %xmm4,0x30(%rsp)
  subsd  %xmm7,%xmm1
  movsd  %xmm1,(%rsp)
  movapd %xmm1,%xmm0
  subsd  %xmm4,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L24
  sqrtsd %xmm0,%xmm0
L35:
  addsd  %xmm0,%xmm0
  movsd  D14(%rip),%xmm7
  movapd %xmm7,%xmm4
  movsd  0x30(%rsp),%xmm6
  subsd  %xmm6,%xmm4
  subsd  %xmm6,%xmm4
  movsd  (%rsp),%xmm5
  subsd  0x28(%rsp),%xmm5
  movq   %r15,%xmm2
  addsd  %xmm2,%xmm2
  movq   %r14,%xmm6
  mulsd  %xmm6,%xmm2
  movsd  0x10(%rsp),%xmm6
  movapd %xmm6,%xmm1
  mulsd  %xmm4,%xmm1
  movsd  0x20(%rsp),%xmm10
  movapd %xmm10,%xmm3
  mulsd  %xmm2,%xmm3
  addsd  %xmm3,%xmm1
  movsd  %xmm1,(%r12)
  movapd %xmm6,%xmm1
  mulsd  %xmm2,%xmm1
  movapd %xmm10,%xmm3
  mulsd  %xmm5,%xmm3
  addsd  %xmm3,%xmm1
  movsd  %xmm1,0x8(%r12)
  movq   D34(%rip),%xmm8
  mulsd  0x28(%rbx),%xmm6
  movapd %xmm10,%xmm1
  mulsd  0x20(%rbx),%xmm1
  subsd  %xmm6,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%r12)
  movsd  0x10(%rbx),%xmm1
  movsd  0x18(%rbx),%xmm9
  movapd %xmm1,%xmm3
  xorpd  %xmm8,%xmm3
  movq   %r13,%xmm6
  mulsd  %xmm6,%xmm3
  movq   %rbp,%xmm6
  mulsd  %xmm9,%xmm6
  subsd  %xmm6,%xmm3
  movsd  0x8(%rsp),%xmm6
  mulsd  0x38(%rsp),%xmm6
  addsd  %xmm3,%xmm7
  divsd  %xmm7,%xmm6
  movsd  0x18(%rsp),%xmm7
  mulsd  %xmm3,%xmm7
  movq   %rbp,%xmm3
  xorpd  %xmm8,%xmm3
  mulsd  %xmm7,%xmm9
  subsd  %xmm9,%xmm3
  mulsd  %xmm6,%xmm3
  mulsd  %xmm7,%xmm1
  movq   %r13,%xmm7
  addsd  %xmm7,%xmm1
  mulsd  %xmm6,%xmm1
  mulsd  %xmm3,%xmm4
  movapd %xmm2,%xmm6
  mulsd  %xmm1,%xmm6
  addsd  %xmm6,%xmm4
  movsd  %xmm4,0x18(%r12)
  mulsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm5
  addsd  %xmm5,%xmm2
  movsd  %xmm2,0x20(%r12)
  mulsd  0x28(%rbx),%xmm3
  mulsd  0x20(%rbx),%xmm1
  subsd  %xmm3,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x28(%r12)
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L15:
  call   <sqrt@plt>
  jmp    L45
L24:
  call   <sqrt@plt>
  jmp    L35
```

tool_calls: name: disassemble_data
arguments: tag: D39
type_guessed: byte[8]
name: disassemble_data
arguments: tag: D14
type_guessed: f64
name: disassemble_data
arguments: tag: D34
type_guessed: byte[8]

tool: {"D39": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0x40]}

tool: D14: 1

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

assistant: ```c
void EllipticToRectangular(const double a, const double n, const double elem[6], const double dt, double xyz[]) {
  const double L = fmod(elem[1], 2.0 * 3.14159265358979323846);
  double Le = L - elem[2] * sin(L) + elem[3] * cos(L);
  for (;;) {
    const double cLe = cos(Le);
    const double sLe = sin(Le);
    const double dLe = (L - Le + elem[2] * sLe - elem[3] * cLe) / (1.0 - elem[2] * cLe - elem[3] * sLe);
    Le += dLe;
    if (fabs(dLe) <= 1e-14)
      break;
  }
  {
    const double cLe = cos(Le);
    const double sLe = sin(Le);
    const double dlf = -elem[2] * sLe + elem[3] * cLe;
    const double phi = sqrt(1.0 - elem[2] * elem[2] - elem[3] * elem[3]);
    const double psi = 1.0 / (1.0 + phi);
    const double x1 = a * (cLe - elem[2] - psi * dlf * elem[3]);
    const double y1 = a * (sLe - elem[3] + psi * dlf * elem[2]);
    const double elem_4q = elem[4] * elem[4];
    const double elem_5q = elem[5] * elem[5];
    const double dwho = 2.0 * sqrt(1.0 - elem_4q - elem_5q);
    const double rtp = 1.0 - elem_5q - elem_5q;
    const double rtq = 1.0 - elem_4q - elem_4q;
    const double rdg = 2.0 * elem[5] * elem[4];
    xyz[0] = x1 * rtp + y1 * rdg;
    xyz[1] = x1 * rdg + y1 * rtq;
    xyz[2] = (-x1 * elem[5] + y1 * elem[4]) * dwho;
    const double rsam1 = -elem[2] * cLe - elem[3] * sLe;
    const double h = a * n / (1.0 + rsam1);
    const double vx1 = h * (-sLe - psi * rsam1 * elem[3]);
    const double vy1 = h * (cLe + psi * rsam1 * elem[2]);
    xyz[3] = vx1 * rtp + vy1 * rdg;
    xyz[4] = vx1 * rdg + vy1 * rtq;
    xyz[5] = (-vx1 * elem[5] + vy1 * elem[4]) * dwho;
  }
}
```