user: Converte this assembly snippet into its equivalent C code:

```asm
<lla2ecef>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xc0,%rsp
  movsd  %xmm0,-0x78(%rbp)
  movsd  %xmm1,-0x80(%rbp)
  movsd  %xmm2,-0x88(%rbp)
  mov    %rdi,-0x90(%rbp)
  mov    %rsi,-0x98(%rbp)
  mov    %rdx,-0xa0(%rbp)
  fldt   0xe6b(%rip)        # 2000 <_fini+0xc98>
  fstpt  -0x70(%rbp)
  fldt   0xe72(%rip)        # 2010 <_fini+0xca8>
  fstpt  -0x60(%rbp)
  movsd  -0x78(%rbp),%xmm1
  movsd  D15(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D37(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  fldl   -0xc0(%rbp)
  fstpt  -0x50(%rbp)
  movsd  -0x80(%rbp),%xmm1
  movsd  D15(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D37(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  fldl   -0xc0(%rbp)
  fstpt  -0x40(%rbp)
  fldl   -0x88(%rbp)
  fstpt  -0x30(%rbp)
  push   -0x48(%rbp)
  push   -0x50(%rbp)
  call   <sin@plt>
  add    $0x10,%rsp
  fstpt  -0x20(%rbp)
  fldt   -0x60(%rbp)
  fldt   -0x20(%rbp)
  fmulp  %st,%st(1)
  fldt   -0x20(%rbp)
  fmulp  %st,%st(1)
  fld1
  fsubp  %st,%st(1)
  fnstcw -0xa2(%rbp)
  movzwl -0xa2(%rbp),%eax
  or     $0xc,%ah
  mov    %ax,-0xa4(%rbp)
  fldcw  -0xa4(%rbp)
  fistpl -0xc0(%rbp)
  fldcw  -0xa2(%rbp)
  mov    -0xc0(%rbp),%edi
  call   <sqrt@plt>
  fldt   -0x70(%rbp)
  fdivp  %st,%st(1)
  fstpt  -0x10(%rbp)
  fldt   -0x10(%rbp)
  fldt   -0x30(%rbp)
  faddp  %st,%st(1)
  fstpt  -0xc0(%rbp)
  push   -0x48(%rbp)
  push   -0x50(%rbp)
  call   <cos@plt>
  add    $0x10,%rsp
  fldt   -0xc0(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0xc0(%rbp)
  push   -0x38(%rbp)
  push   -0x40(%rbp)
  call   <cos@plt>
  add    $0x10,%rsp
  fldt   -0xc0(%rbp)
  fmulp  %st,%st(1)
  fstpl  -0xc0(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  mov    -0x90(%rbp),%rax
  movsd  %xmm0,(%rax)
  fldt   -0x10(%rbp)
  fldt   -0x30(%rbp)
  faddp  %st,%st(1)
  fstpt  -0xc0(%rbp)
  push   -0x48(%rbp)
  push   -0x50(%rbp)
  call   <cos@plt>
  add    $0x10,%rsp
  fldt   -0xc0(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0xc0(%rbp)
  push   -0x38(%rbp)
  push   -0x40(%rbp)
  call   <sin@plt>
  add    $0x10,%rsp
  fldt   -0xc0(%rbp)
  fmulp  %st,%st(1)
  fstpl  -0xc0(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  mov    -0x98(%rbp),%rax
  movsd  %xmm0,(%rax)
  fld1
  fldt   -0x60(%rbp)
  fsubrp %st,%st(1)
  fldt   -0x10(%rbp)
  fmulp  %st,%st(1)
  fldt   -0x30(%rbp)
  faddp  %st,%st(1)
  fstpt  -0xc0(%rbp)
  push   -0x48(%rbp)
  push   -0x50(%rbp)
  call   <sin@plt>
  add    $0x10,%rsp
  fldt   -0xc0(%rbp)
  fmulp  %st,%st(1)
  fstpl  -0xc0(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  mov    -0xa0(%rbp),%rax
  movsd  %xmm0,(%rax)
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D15
type_infered: f64
name: disassemble_data
arguments: data_tag: D37
type_infered: byte[8]

tool: D15: 3.141592653589793

tool: {"D37": [0x00,0x00,0x00,0x00,0x00,0x80,0x66,0x40]}

assistant: ```c
void lla2ecef(double lat, double lng, double alt, double *ecef_x, double *ecef_y, double *ecef_z) {
  long double n;
  long double a = 6378137.0;
  long double esqr = 6.69437999014e-3;
  long double s;
  long double llat, llng, lalt;
  llat = lat * 3.14159265358979323846 / 180;
  llng = lng * 3.14159265358979323846 / 180;
  lalt = alt;
  s = sin(llat);
  n = a / sqrt(1 - esqr * s * s);
  *ecef_x = (double)((n + lalt) * cos(llat) * cos(llng));
  *ecef_y = (double)((n + lalt) * cos(llat) * sin(llng));
  *ecef_z = (double)((n * (1 - esqr) + lalt) * sin(llat));
}
```