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

```asm
<heliocorr>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x70,%rsp
  movsd  %xmm1,0x68(%rsp)
  movapd %xmm0,%xmm1
  lea    0x60(%rsp),%rsi
  subsd  D12(%rip),%xmm1
  movsd  %xmm0,0x18(%rsp)
  lea    0x68(%rsp),%rdi
  lea    0x58(%rsp),%rbp
  movsd  D98(%rip),%xmm0
  lea    0x50(%rsp),%r12
  movsd  %xmm2,0x60(%rsp)
  call   <precess@plt>
  movsd  0x60(%rsp),%xmm0
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <sincos@plt>
  movsd  0x50(%rsp),%xmm5
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movsd  0x68(%rsp),%xmm0
  movsd  %xmm5,0x48(%rsp)
  movsd  0x58(%rsp),%xmm5
  movsd  %xmm5,0x8(%rsp)
  call   <sincos@plt>
  movsd  0x18(%rsp),%xmm3
  mov    %r12,%rsi
  subsd  D23(%rip),%xmm3
  movsd  0x58(%rsp),%xmm2
  movsd  0x50(%rsp),%xmm7
  mov    %rbp,%rdi
  movsd  D146(%rip),%xmm0
  movsd  D102(%rip),%xmm4
  movsd  %xmm2,0x40(%rsp)
  movapd %xmm3,%xmm5
  movsd  D138(%rip),%xmm2
  mulsd  D18(%rip),%xmm5
  movsd  %xmm7,0x10(%rsp)
  mulsd  %xmm3,%xmm2
  movsd  %xmm3,0x30(%rsp)
  addsd  %xmm5,%xmm0
  subsd  %xmm2,%xmm4
  mulsd  D68(%rip),%xmm4
  divsd  D161(%rip),%xmm4
  movsd  %xmm4,0x38(%rsp)
  movsd  %xmm0,0x18(%rsp)
  call   <sincos@plt>
  movsd  0x18(%rsp),%xmm0
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movsd  0x50(%rsp),%xmm3
  movsd  0x58(%rsp),%xmm7
  addsd  %xmm0,%xmm0
  movsd  %xmm3,0x28(%rsp)
  movsd  %xmm7,0x20(%rsp)
  call   <sincos@plt>
  movsd  0x20(%rsp),%xmm7
  mov    %r12,%rsi
  movsd  0x30(%rsp),%xmm1
  mulsd  D26(%rip),%xmm7
  movsd  0x50(%rsp),%xmm6
  mov    %rbp,%rdi
  mulsd  D128(%rip),%xmm1
  movsd  D144(%rip),%xmm0
  addsd  D64(%rip),%xmm1
  mulsd  0x58(%rsp),%xmm0
  movsd  %xmm6,0x18(%rsp)
  addsd  %xmm7,%xmm1
  addsd  %xmm1,%xmm0
  call   <sincos@plt>
  movsd  0x28(%rsp),%xmm3
  mulsd  D137(%rip),%xmm3
  movsd  0x18(%rsp),%xmm6
  mulsd  D2(%rip),%xmm6
  movsd  0x38(%rsp),%xmm4
  movsd  %xmm4,0x20(%rsp)
  movapd %xmm3,%xmm0
  movsd  D71(%rip),%xmm3
  subsd  %xmm0,%xmm3
  movapd %xmm4,%xmm0
  subsd  %xmm6,%xmm3
  movsd  %xmm3,0x28(%rsp)
  call   <cos@plt>
  movsd  0x20(%rsp),%xmm4
  movsd  %xmm0,0x18(%rsp)
  movapd %xmm4,%xmm0
  call   <tan@plt>
  movsd  0x48(%rsp),%xmm5
  movsd  0x40(%rsp),%xmm2
  mulsd  0x8(%rsp),%xmm0
  movsd  0x28(%rsp),%xmm3
  mulsd  %xmm5,%xmm2
  movsd  0x18(%rsp),%xmm6
  mulsd  %xmm3,%xmm6
  mulsd  0x50(%rsp),%xmm3
  movapd %xmm2,%xmm1
  addsd  %xmm0,%xmm1
  movsd  0x58(%rsp),%xmm0
  mulsd  %xmm6,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  0x10(%rsp),%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm0,%xmm1
  mulsd  D19(%rip),%xmm1
  movsd  %xmm1,(%rbx)
  add    $0x70,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

tool_calls: name: parse_data
arguments: label: D12
datatype: f64
name: parse_data
arguments: label: D98
datatype: byte[8]
name: parse_data
arguments: label: D23
datatype: f64
name: parse_data
arguments: label: D146
datatype: byte[8]
name: parse_data
arguments: label: D102
datatype: f64
name: parse_data
arguments: label: D138
datatype: f64
name: parse_data
arguments: label: D18
datatype: byte[8]
name: parse_data
arguments: label: D68
datatype: f64
name: parse_data
arguments: label: D161
datatype: f64
name: parse_data
arguments: label: D26
datatype: byte[8]
name: parse_data
arguments: label: D128
datatype: byte[8]
name: parse_data
arguments: label: D144
datatype: byte[8]
name: parse_data
arguments: label: D64
datatype: byte[8]
name: parse_data
arguments: label: D137
datatype: f64
name: parse_data
arguments: label: D2
datatype: f64
name: parse_data
arguments: label: D71
datatype: f64
name: parse_data
arguments: label: D19
datatype: f64

tool: D12: 2415020

tool: {"D98": [0x00,0x00,0x00,0x00,0xa0,0xd5,0xe1,0x40]}

tool: D23: 2451545

tool: {"D146": [0x40,0x46,0x42,0x3f,0xcd,0xf5,0x18,0x40]}

tool: D102: 23.439

tool: D138: 4e-07

tool: {"D18": [0x36,0xfa,0x35,0xb0,0x64,0x9d,0x91,0x3f]}

tool: D68: 3.141592653589793

tool: D161: 180

tool: {"D26": [0x6b,0xf1,0xd2,0xa1,0xd3,0x1c,0xa1,0x3f]}

tool: {"D128": [0x1a,0x74,0xec,0xda,0x9b,0x9d,0x91,0x3f]}

tool: {"D144": [0x91,0x81,0x5f,0x69,0x5a,0xe0,0x36,0x3f]}

tool: {"D64": [0x90,0x82,0x4d,0x75,0x72,0x94,0x13,0x40]}

tool: D137: 0.01671

tool: D2: 0.00014

tool: D71: 1.00014

tool: D19: 0.0057755

assistant: ```c
void heliocorr(double jd, double ra, double dec, double *hcp) {
  double e;
  double n;
  double g;
  double L;
  double l;
  double R;
  double X, Y;
  double cdec, sdec;
  double cra, sra;
  precess((2451545.0 - 2415020.0), jd - 2415020.0, &ra, &dec);
  cdec = cos(dec);
  sdec = sin(dec);
  cra = cos(ra);
  sra = sin(ra);
  n = jd - 2451545.0;
  e = ((23.439 - 0.0000004 * n) * 3.141592653589793 / 180.);
  g = ((357.528) * 3.141592653589793 / 180.) + ((0.9856003) * 3.141592653589793 / 180.) * n;
  L = ((280.461) * 3.141592653589793 / 180.) + ((0.9856474) * 3.141592653589793 / 180.) * n;
  l = L + ((1.915) * 3.141592653589793 / 180.) * sin(g) + ((0.02) * 3.141592653589793 / 180.) * sin(2.0 * g);
  R = 1.00014 - 0.01671 * cos(g) - 0.00014 * cos(2.0 * g);
  X = R * cos(l);
  Y = R * cos(e) * sin(l);
  *hcp = 0.0057755 * (cdec * cra * X + (cdec * sra + tan(e) * sdec) * Y);
}
```