user: Demonstrate the C code that generates the assembly output below:

```asm
<EllipticToRectangular>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x70,%rsp
  movsd  %xmm0,0x18(%rsp)
  movsd  0x8(%rdi),%xmm0
  lea    0x68(%rsp),%r12
  lea    0x60(%rsp),%r13
  movsd  %xmm1,0x20(%rsp)
  movsd  D91(%rip),%xmm1
  call   <fmod@plt>
  mov    %r13,%rsi
  mov    %r12,%rdi
  movq   %xmm0,%r14
  call   <sincos@plt>
  movsd  0x10(%rbx),%xmm4
  movsd  0x68(%rsp),%xmm0
  movq   %r14,%xmm3
  movsd  0x18(%rbx),%xmm5
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm3
  movsd  0x60(%rsp),%xmm0
  mulsd  %xmm5,%xmm0
  addsd  %xmm0,%xmm3
  jmp    L31
  nopl   0x0(%rax,%rax,1)
L7:
  movsd  0x10(%rbx),%xmm4
  movsd  0x18(%rbx),%xmm5
L31:
  movapd %xmm3,%xmm0
  mov    %r13,%rsi
  mov    %r12,%rdi
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm4,0x8(%rsp)
  movsd  %xmm3,(%rsp)
  call   <sincos@plt>
  movsd  0x68(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm4
  movq   %r14,%xmm0
  movsd  (%rsp),%xmm3
  movsd  0x60(%rsp),%xmm2
  movapd %xmm1,%xmm6
  movsd  0x10(%rsp),%xmm5
  mulsd  %xmm4,%xmm6
  subsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm1
  addsd  %xmm6,%xmm0
  movapd %xmm2,%xmm6
  mulsd  %xmm4,%xmm2
  movsd  D30(%rip),%xmm4
  mulsd  %xmm5,%xmm6
  subsd  %xmm2,%xmm4
  subsd  %xmm6,%xmm0
  movapd %xmm4,%xmm2
  subsd  %xmm1,%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm3
  movsd  %xmm3,(%rsp)
  call   <fabs@plt>
  movsd  (%rsp),%xmm3
  test   %eax,%eax
  jg     L7
  movapd %xmm3,%xmm0
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <sincos@plt>
  movsd  0x10(%rbx),%xmm3
  movsd  0x18(%rbx),%xmm7
  pxor   %xmm8,%xmm8
  movsd  0x60(%rsp),%xmm5
  movsd  0x68(%rsp),%xmm4
  movapd %xmm3,%xmm2
  movapd %xmm7,%xmm1
  movsd  D30(%rip),%xmm0
  movq   D108(%rip),%xmm6
  mulsd  %xmm4,%xmm2
  mulsd  %xmm5,%xmm1
  subsd  %xmm2,%xmm1
  movapd %xmm3,%xmm2
  mulsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm0
  movapd %xmm7,%xmm2
  mulsd  %xmm7,%xmm2
  subsd  %xmm2,%xmm0
  ucomisd %xmm0,%xmm8
  ja     L37
  sqrtsd %xmm0,%xmm0
L51:
  addsd  D30(%rip),%xmm0
  movapd %xmm5,%xmm2
  movsd  D30(%rip),%xmm9
  subsd  %xmm3,%xmm2
  movsd  0x20(%rbx),%xmm10
  movsd  0x18(%rsp),%xmm13
  divsd  %xmm0,%xmm9
  movapd %xmm10,%xmm11
  mulsd  %xmm10,%xmm11
  mulsd  %xmm9,%xmm1
  movapd %xmm1,%xmm0
  movapd %xmm7,%xmm1
  mulsd  %xmm0,%xmm1
  mulsd  %xmm0,%xmm3
  subsd  %xmm1,%xmm2
  movapd %xmm4,%xmm1
  subsd  %xmm7,%xmm1
  movsd  D30(%rip),%xmm7
  subsd  %xmm11,%xmm7
  mulsd  %xmm13,%xmm2
  addsd  %xmm3,%xmm1
  movsd  0x28(%rbx),%xmm3
  movapd %xmm3,%xmm12
  movapd %xmm7,%xmm0
  mulsd  %xmm3,%xmm12
  mulsd  %xmm13,%xmm1
  subsd  %xmm12,%xmm0
  ucomisd %xmm0,%xmm8
  ja     L16
  sqrtsd %xmm0,%xmm0
L52:
  movsd  D30(%rip),%xmm8
  addsd  %xmm3,%xmm3
  subsd  %xmm11,%xmm7
  movapd %xmm1,%xmm11
  addsd  %xmm0,%xmm0
  subsd  %xmm12,%xmm8
  mulsd  %xmm10,%xmm3
  movapd %xmm2,%xmm10
  subsd  %xmm12,%xmm8
  mulsd  %xmm3,%xmm11
  mulsd  %xmm8,%xmm10
  addsd  %xmm11,%xmm10
  movapd %xmm1,%xmm11
  mulsd  %xmm7,%xmm11
  movsd  %xmm10,0x0(%rbp)
  movapd %xmm2,%xmm10
  mulsd  %xmm3,%xmm10
  addsd  %xmm11,%xmm10
  movsd  %xmm10,0x8(%rbp)
  mulsd  0x28(%rbx),%xmm2
  movsd  0x18(%rsp),%xmm10
  mulsd  0x20(%rbx),%xmm1
  mulsd  0x20(%rsp),%xmm10
  subsd  %xmm2,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rbp)
  movsd  0x10(%rbx),%xmm2
  movsd  0x18(%rbx),%xmm12
  movapd %xmm2,%xmm11
  movapd %xmm12,%xmm1
  mulsd  %xmm4,%xmm1
  xorpd  %xmm6,%xmm11
  xorpd  %xmm6,%xmm4
  mulsd  %xmm5,%xmm11
  subsd  %xmm1,%xmm11
  movsd  D30(%rip),%xmm1
  addsd  %xmm11,%xmm1
  mulsd  %xmm11,%xmm9
  divsd  %xmm1,%xmm10
  mulsd  %xmm9,%xmm2
  mulsd  %xmm9,%xmm12
  addsd  %xmm5,%xmm2
  subsd  %xmm12,%xmm4
  movapd %xmm2,%xmm1
  movapd %xmm3,%xmm2
  mulsd  %xmm10,%xmm4
  mulsd  %xmm10,%xmm1
  mulsd  %xmm4,%xmm8
  mulsd  %xmm1,%xmm2
  mulsd  %xmm4,%xmm3
  mulsd  %xmm1,%xmm7
  addsd  %xmm2,%xmm8
  addsd  %xmm7,%xmm3
  movsd  %xmm8,0x18(%rbp)
  movsd  %xmm3,0x20(%rbp)
  mulsd  0x28(%rbx),%xmm4
  mulsd  0x20(%rbx),%xmm1
  subsd  %xmm4,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x28(%rbp)
  add    $0x70,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L37:
  movsd  %xmm1,0x30(%rsp)
  movsd  %xmm7,0x28(%rsp)
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm4,0x8(%rsp)
  movsd  %xmm5,(%rsp)
  call   <sqrt@plt>
  movsd  0x30(%rsp),%xmm1
  movsd  (%rsp),%xmm5
  pxor   %xmm8,%xmm8
  movq   D108(%rip),%xmm6
  movsd  0x28(%rsp),%xmm7
  movsd  0x10(%rsp),%xmm3
  movsd  0x8(%rsp),%xmm4
  jmp    L51
L16:
  movsd  %xmm12,0x58(%rsp)
  movsd  %xmm11,0x50(%rsp)
  movsd  %xmm1,0x48(%rsp)
  movsd  %xmm2,0x40(%rsp)
  movsd  %xmm9,0x38(%rsp)
  movsd  %xmm7,0x30(%rsp)
  movsd  %xmm3,0x28(%rsp)
  movsd  %xmm10,0x10(%rsp)
  movsd  %xmm4,0x8(%rsp)
  movsd  %xmm5,(%rsp)
  call   <sqrt@plt>
  movsd  0x48(%rsp),%xmm1
  movsd  (%rsp),%xmm5
  movq   D108(%rip),%xmm6
  movsd  0x58(%rsp),%xmm12
  movsd  0x50(%rsp),%xmm11
  movsd  0x40(%rsp),%xmm2
  movsd  0x38(%rsp),%xmm9
  movsd  0x30(%rsp),%xmm7
  movsd  0x28(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm10
  movsd  0x8(%rsp),%xmm4
  jmp    L52
```

tool_calls: name: parse_data
arguments: tag: D91
data_type: byte[8]
name: parse_data
arguments: tag: D30
data_type: f64
name: parse_data
arguments: tag: D108
data_type: byte[8]

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

tool: D30: 1

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