user: 请将以下的汇编代码转换成C语言代码:

```asm
<PrecessToEpoch>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  movq   %xmm0,%r15
  mov    %rdi,%rbp
  mov    %rsi,%rbx
  movsd  D195(%rip),%xmm7
  mulsd  (%rdi),%xmm7
  movsd  %xmm7,0x8(%rsp)
  movsd  D195(%rip),%xmm3
  mulsd  (%rsi),%xmm3
  movapd %xmm3,%xmm0
  lea    0x38(%rsp),%r13
  lea    0x30(%rsp),%r14
  divsd  D66(%rip),%xmm0
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <sincos@plt>
  mov    0x30(%rsp),%r12
  movsd  0x38(%rsp),%xmm6
  movsd  %xmm6,0x20(%rsp)
  mov    $0x0,%eax
  call   <JDNow@plt>
  movsd  D63(%rip),%xmm4
  movapd %xmm0,%xmm2
  subsd  %xmm4,%xmm2
  movsd  D235(%rip),%xmm3
  divsd  %xmm3,%xmm2
  movq   %r15,%xmm1
  subsd  D350(%rip),%xmm1
  mulsd  D286(%rip),%xmm1
  addsd  %xmm4,%xmm1
  subsd  %xmm0,%xmm1
  divsd  %xmm3,%xmm1
  movapd %xmm2,%xmm4
  mulsd  D298(%rip),%xmm4
  addsd  D316(%rip),%xmm4
  movapd %xmm2,%xmm3
  mulsd  D233(%rip),%xmm3
  movapd %xmm3,%xmm0
  mulsd  %xmm2,%xmm0
  subsd  %xmm0,%xmm4
  mulsd  %xmm1,%xmm4
  movapd %xmm2,%xmm3
  mulsd  D290(%rip),%xmm3
  movapd %xmm2,%xmm5
  mulsd  D127(%rip),%xmm5
  movsd  D349(%rip),%xmm0
  subsd  %xmm5,%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm4,%xmm0
  movapd %xmm1,%xmm5
  mulsd  D163(%rip),%xmm5
  mulsd  %xmm1,%xmm5
  mulsd  %xmm1,%xmm5
  addsd  %xmm5,%xmm0
  movapd %xmm0,%xmm5
  mulsd  D195(%rip),%xmm5
  movsd  %xmm5,0x10(%rsp)
  movapd %xmm2,%xmm0
  mulsd  D24(%rip),%xmm0
  addsd  D275(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm4,%xmm0
  movapd %xmm1,%xmm4
  mulsd  D219(%rip),%xmm4
  mulsd  %xmm1,%xmm4
  mulsd  %xmm1,%xmm4
  addsd  %xmm4,%xmm0
  mulsd  D195(%rip),%xmm0
  movapd %xmm0,%xmm4
  divsd  D96(%rip),%xmm4
  movsd  %xmm4,0x18(%rsp)
  movapd %xmm2,%xmm4
  mulsd  D97(%rip),%xmm4
  movsd  D364(%rip),%xmm0
  subsd  %xmm4,%xmm0
  mulsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D266(%rip),%xmm2
  subsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm2
  mulsd  %xmm1,%xmm2
  addsd  %xmm2,%xmm0
  movapd %xmm1,%xmm2
  mulsd  D101(%rip),%xmm2
  mulsd  %xmm1,%xmm2
  mulsd  %xmm2,%xmm1
  addsd  %xmm1,%xmm0
  mulsd  D195(%rip),%xmm0
  divsd  D96(%rip),%xmm0
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <sincos@plt>
  movsd  0x30(%rsp),%xmm6
  movsd  %xmm6,0x28(%rsp)
  mov    0x38(%rsp),%r15
  movsd  0x8(%rsp),%xmm0
  divsd  D67(%rip),%xmm0
  movsd  0x10(%rsp),%xmm1
  divsd  D96(%rip),%xmm1
  addsd  %xmm1,%xmm0
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <sincos@plt>
  movsd  0x30(%rsp),%xmm0
  movq   %r12,%xmm3
  mulsd  0x38(%rsp),%xmm3
  movsd  %xmm3,0x8(%rsp)
  movsd  0x28(%rsp),%xmm6
  movapd %xmm6,%xmm1
  mulsd  %xmm0,%xmm1
  movq   %r12,%xmm5
  mulsd  %xmm5,%xmm1
  movq   %r15,%xmm2
  movsd  0x20(%rsp),%xmm7
  mulsd  %xmm7,%xmm2
  subsd  %xmm2,%xmm1
  movsd  %xmm1,0x10(%rsp)
  movq   %r15,%xmm3
  mulsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm7,%xmm6
  addsd  %xmm6,%xmm0
  comisd D381(%rip),%xmm0
  ja     L38
  movsd  D356(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L6
  movsd  0x10(%rsp),%xmm7
  movapd %xmm7,%xmm1
  mulsd  %xmm7,%xmm1
  movsd  0x8(%rsp),%xmm7
  movapd %xmm7,%xmm0
  mulsd  %xmm7,%xmm0
  addsd  %xmm1,%xmm0
  call   <sqrt@plt>
  mov    %eax,%edi
  call   <acos@plt>
  xorpd  D111(%rip),%xmm0
  movq   %xmm0,%r12
L57:
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  call   <atan2@plt>
  addsd  0x18(%rsp),%xmm0
  mulsd  D67(%rip),%xmm0
  movsd  D195(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %r12,%xmm2
  mulsd  D66(%rip),%xmm2
  divsd  %xmm1,%xmm2
  movq   %xmm2,%r12
  comisd D318(%rip),%xmm2
  jbe    L28
  movsd  D66(%rip),%xmm1
  subsd  %xmm2,%xmm1
  movq   %xmm1,%r12
  addsd  D67(%rip),%xmm0
L28:
  movsd  D1(%rip),%xmm1
  movq   %r12,%xmm6
  comisd %xmm6,%xmm1
  jbe    L53
  movsd  D116(%rip),%xmm1
  subsd  %xmm6,%xmm1
  movq   %xmm1,%r12
  addsd  D67(%rip),%xmm0
L53:
  call   <Map24@plt>
  movsd  %xmm0,0x0(%rbp)
  mov    %r12,(%rbx)
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L38:
  movsd  0x10(%rsp),%xmm6
  movapd %xmm6,%xmm1
  mulsd  %xmm6,%xmm1
  movsd  0x8(%rsp),%xmm7
  movapd %xmm7,%xmm0
  mulsd  %xmm7,%xmm0
  addsd  %xmm1,%xmm0
  call   <sqrt@plt>
  mov    %eax,%edi
  call   <acos@plt>
  movq   %xmm0,%r12
  jmp    L57
L6:
  call   <asin@plt>
  movq   %xmm0,%r12
  jmp    L57
```

tool_calls: name: disassemble_data
arguments: label: D195
datatype: f64
name: disassemble_data
arguments: label: D66
datatype: f64
name: disassemble_data
arguments: label: D63
datatype: f64
name: disassemble_data
arguments: label: D235
datatype: f64
name: disassemble_data
arguments: label: D350
datatype: f64
name: disassemble_data
arguments: label: D286
datatype: f64
name: disassemble_data
arguments: label: D298
datatype: f64
name: disassemble_data
arguments: label: D316
datatype: f64
name: disassemble_data
arguments: label: D233
datatype: f64
name: disassemble_data
arguments: label: D290
datatype: f64
name: disassemble_data
arguments: label: D127
datatype: f64
name: disassemble_data
arguments: label: D349
datatype: f64
name: disassemble_data
arguments: label: D163
datatype: f64
name: disassemble_data
arguments: label: D24
datatype: f64
name: disassemble_data
arguments: label: D275
datatype: f64
name: disassemble_data
arguments: label: D219
datatype: f64
name: disassemble_data
arguments: label: D96
datatype: byte[8]
name: disassemble_data
arguments: label: D97
datatype: f64
name: disassemble_data
arguments: label: D364
datatype: f64
name: disassemble_data
arguments: label: D266
datatype: byte[8]
name: disassemble_data
arguments: label: D101
datatype: byte[8]
name: disassemble_data
arguments: label: D67
datatype: f64
name: disassemble_data
arguments: label: D381
datatype: f64[2]
name: disassemble_data
arguments: label: D356
datatype: byte[8]
name: disassemble_data
arguments: label: D111
datatype: byte[16]
name: disassemble_data
arguments: label: D318
datatype: f64[2]
name: disassemble_data
arguments: label: D1
datatype: byte[8]
name: disassemble_data
arguments: label: D116
datatype: byte[8]

tool: D195: 3.14159265358

tool: D66: 180

tool: D63: 2451545

tool: D235: 36525

tool: D350: 2000

tool: D286: 365.25

tool: D298: 1.39656

tool: D316: 2306.2181

tool: D233: 0.000139

tool: D290: 0.000217

tool: D127: 0.000344

tool: D349: 0.30188

tool: D163: 0.017998

tool: D24: 6.6e-05

tool: D275: 1.09468

tool: D219: 0.018203

tool: {"D96": [0x00,0x00,0x00,0x00,0x80,0xc6,0x23,0x41]}

tool: D97: 0.8533

tool: D364: 2004.3109

tool: {"D266": [0x58,0xa8,0x35,0xcd,0x3b,0x4e,0xdb,0xbf]}

tool: {"D101": [0xbf,0x81,0xc9,0x8d,0x22,0x6b,0xa5,0xbf]}

tool: D67: 12

tool: {"D381": [0.9,-0.9]}

tool: {"D356": [0xcd,0xcc,0xcc,0xcc,0xcc,0xcc,0xec,0xbf]}

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

tool: {"D318": [90.0,-90.0]}

tool: {"D1": [0x00,0x00,0x00,0x00,0x00,0x80,0x56,0xc0]}

tool: {"D116": [0x00,0x00,0x00,0x00,0x00,0x80,0x66,0xc0]}

assistant: ```c
void PrecessToEpoch(double epoch, double *ra, double *dec) {
  double ra_in, dec_in, ra_out, dec_out;
  double a, b, c;
  double zeta, z, theta;
  double T, t;
  double jdfixed, jdnow;
  ra_in = *ra;
  dec_in = *dec;
  ra_in = ra_in * 3.14159265358 / 12.;
  dec_in = dec_in * 3.14159265358 / 180.;
  jdfixed = (epoch - 2000.0) * 365.25 + 2451545.0;
  jdnow = JDNow();
  T = (jdnow - 2451545.0) / 36525.0;
  t = (jdfixed - jdnow) / 36525.0;
  zeta = (2306.2181 + 1.39656 * T - 0.000139 * T * T) * t + (0.30188 - 0.000344 * T) * t * t + (0.017998) * t * t * t;
  z = (2306.2181 + 1.39656 * T - 0.000139 * T * T) * t + (1.09468 + 0.000066 * T) * t * t + (0.018203) * t * t * t;
  theta = (2004.3109 - 0.85330 * T - 0.000217 * T * T) * t + (-0.42665 - 0.000217 * T) * t * t + (-0.041833) * t * t * t;
  zeta = zeta * 3.14159265358 / (180. * 3600.);
  z = z * 3.14159265358 / (180. * 3600.);
  theta = theta * 3.14159265358 / (180. * 3600.);
  a = sin(ra_in + zeta) * cos(dec_in);
  b = cos(ra_in + zeta) * cos(theta) * cos(dec_in) - sin(theta) * sin(dec_in);
  c = cos(ra_in + zeta) * sin(theta) * cos(dec_in) + cos(theta) * sin(dec_in);
  if (c > 0.9) {
    dec_out = acos(sqrt(a * a + b * b));
  } else if (c < -0.9) {
    dec_out = -acos(sqrt(a * a + b * b));
  } else {
    dec_out = asin(c);
  }
  ra_out = atan2(a, b) + z;
  ra_out = ra_out * 12. / 3.14159265358;
  dec_out = dec_out * 180. / 3.14159265358;
  if (dec_out > 90.) {
    dec_out = 180. - dec_out;
    ra_out = ra_out + 12.;
  }
  if (dec_out < -90.) {
    dec_out = -180. - dec_out;
    ra_out = ra_out + 12.;
  }
  ra_out = Map24(ra_out);
  *ra = ra_out;
  *dec = dec_out;
}
```