user: What would the C source look like for the assembly code provided here?

```asm
<xyz2llh>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %rdi,-0x88(%rbp)
  mov    %rsi,-0x90(%rbp)
  movsd  D33(%rip),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  D30(%rip),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  D3(%rip),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x70(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <normVect@plt>
  movsd  -0x68(%rbp),%xmm1
  comisd %xmm0,%xmm1
  jbe    L1
  mov    -0x90(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x90(%rbp),%rax
  add    $0x8,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x90(%rbp),%rax
  add    $0x10,%rax
  movsd  -0x78(%rbp),%xmm0
  movq   D37(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  jmp    L10
L1:
  mov    -0x88(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0x50(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x60(%rbp),%xmm0
  mulsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
L30:
  movsd  -0x48(%rbp),%xmm0
  addsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x38(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  -0x40(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x30(%rbp)
  movsd  -0x38(%rbp),%xmm0
  divsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x60(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x28(%rbp),%xmm1
  movsd  D53(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  movsd  -0x78(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x60(%rbp),%xmm0
  movsd  -0x28(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x80(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movq   D4(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  -0x68(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L28
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  jmp    L30
L28:
  nop
  mov    -0x40(%rbp),%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rdx
  mov    -0x38(%rbp),%rax
  movq   %rdx,%xmm1
  movq   %rax,%xmm0
  call   <atan2@plt>
  movq   %xmm0,%rax
  mov    -0x90(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x90(%rbp),%rax
  lea    0x8(%rax),%rbx
  movsd  -0x58(%rbp),%xmm0
  mov    -0x50(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <atan2@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x90(%rbp),%rax
  add    $0x10,%rax
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  nop
L10:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D33
type: f64
name: retrieve_data
arguments: tag: D30
type: f64
name: retrieve_data
arguments: tag: D3
type: byte[8]
name: retrieve_data
arguments: tag: D37
type: f32[2]
name: retrieve_data
arguments: tag: D53
type: f64
name: retrieve_data
arguments: tag: D4
type: qword

tool: D33: 6378137

tool: D30: 0.0818191908426

tool: {"D3": [0xfc,0xa9,0xf1,0xd2,0x4d,0x62,0x50,0x3f]}

tool: {"D37": [0.0,-0.0]}

tool: D53: 1

tool: D4: 9223372036854775807

assistant: ```c
void xyz2llh(const double *xyz, double *llh) {
  double a, eps, e, e2;
  double x, y, z;
  double rho2, dz, zdz, nh, slat, n, dz_new;
  a = 6378137.0;
  e = 0.0818191908426;
  eps = 1.0e-3;
  e2 = e * e;
  if (normVect(xyz) < eps) {
    llh[0] = 0.0;
    llh[1] = 0.0;
    llh[2] = -a;
    return;
  }
  x = xyz[0];
  y = xyz[1];
  z = xyz[2];
  rho2 = x * x + y * y;
  dz = e2 * z;
  while (1) {
    zdz = z + dz;
    nh = sqrt(rho2 + zdz * zdz);
    slat = zdz / nh;
    n = a / sqrt(1.0 - e2 * slat * slat);
    dz_new = n * e2 * slat;
    if (fabs(dz - dz_new) < eps)
      break;
    dz = dz_new;
  }
  llh[0] = atan2(zdz, sqrt(rho2));
  llh[1] = atan2(y, x);
  llh[2] = nh - n;
  return;
}
```