void precess_hiprec(double mjd1, double mjd2, double *ra, double *dec) {
  static double last_mjd1 = -213.432, last_from;
  static double last_mjd2 = -213.432, last_to;
  double zeta_A, z_A, theta_A;
  double T;
  double A, B, C;
  double alpha, delta;
  double alpha_in, delta_in;
  double from_equinox, to_equinox;
  double alpha2000, delta2000;
  if (last_mjd1 == mjd1)
    from_equinox = last_from;
  else {
    mjd_year(mjd1, &from_equinox);
    last_mjd1 = mjd1;
    last_from = from_equinox;
  }
  if (last_mjd2 == mjd2)
    to_equinox = last_to;
  else {
    mjd_year(mjd2, &to_equinox);
    last_mjd2 = mjd2;
    last_to = to_equinox;
  }
  alpha_in = ((*ra) * 180. / 3.141592653589793);
  delta_in = ((*dec) * 180. / 3.141592653589793);
  if (fabs(from_equinox - 2000.0) > .02) {
    T = (from_equinox - 2000.0) / 100.0;
    zeta_A = 0.6406161 * T + 0.0000839 * T * T + 0.0000050 * T * T * T;
    z_A = 0.6406161 * T + 0.0003041 * T * T + 0.0000051 * T * T * T;
    theta_A = 0.5567530 * T - 0.0001185 * T * T - 0.0000116 * T * T * T;
    A = sin(((alpha_in - z_A) * 3.141592653589793 / 180.)) *
        cos(((delta_in)*3.141592653589793 / 180.));
    B = cos(((alpha_in - z_A) * 3.141592653589793 / 180.)) *
            cos(((theta_A)*3.141592653589793 / 180.)) *
            cos(((delta_in)*3.141592653589793 / 180.)) +
        sin(((theta_A)*3.141592653589793 / 180.)) *
            sin(((delta_in)*3.141592653589793 / 180.));
    C = -cos(((alpha_in - z_A) * 3.141592653589793 / 180.)) *
            sin(((theta_A)*3.141592653589793 / 180.)) *
            cos(((delta_in)*3.141592653589793 / 180.)) +
        cos(((theta_A)*3.141592653589793 / 180.)) *
            sin(((delta_in)*3.141592653589793 / 180.));
    alpha2000 = ((atan2((A), (B))) * 180. / 3.141592653589793) - zeta_A;
    range(&alpha2000, 360.0);
    delta2000 = ((asin(C)) * 180. / 3.141592653589793);
  } else {
    alpha2000 = alpha_in;
    delta2000 = delta_in;
  };
  if (fabs(to_equinox - 2000.0) > .02) {
    T = (to_equinox - 2000.0) / 100.0;
    zeta_A = 0.6406161 * T + 0.0000839 * T * T + 0.0000050 * T * T * T;
    z_A = 0.6406161 * T + 0.0003041 * T * T + 0.0000051 * T * T * T;
    theta_A = 0.5567530 * T - 0.0001185 * T * T - 0.0000116 * T * T * T;
    A = sin(((alpha2000 + zeta_A) * 3.141592653589793 / 180.)) *
        cos(((delta2000)*3.141592653589793 / 180.));
    B = cos(((alpha2000 + zeta_A) * 3.141592653589793 / 180.)) *
            cos(((theta_A)*3.141592653589793 / 180.)) *
            cos(((delta2000)*3.141592653589793 / 180.)) -
        sin(((theta_A)*3.141592653589793 / 180.)) *
            sin(((delta2000)*3.141592653589793 / 180.));
    C = cos(((alpha2000 + zeta_A) * 3.141592653589793 / 180.)) *
            sin(((theta_A)*3.141592653589793 / 180.)) *
            cos(((delta2000)*3.141592653589793 / 180.)) +
        cos(((theta_A)*3.141592653589793 / 180.)) *
            sin(((delta2000)*3.141592653589793 / 180.));
    alpha = ((atan2((A), (B))) * 180. / 3.141592653589793) + z_A;
    range(&alpha, 360.0);
    delta = ((asin(C)) * 180. / 3.141592653589793);
  } else {
    alpha = alpha2000;
    delta = delta2000;
  };
  *ra = ((alpha)*3.141592653589793 / 180.);
  *dec = ((delta)*3.141592653589793 / 180.);
}


x86 assembly (clang, -O0):
<precess_hiprec>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
movsd  0x2ecb(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    11a8 <precess_hiprec+0x48>
jp     11a8 <precess_hiprec+0x48>
movsd  0x2eca(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    11d2 <precess_hiprec+0x72>
movsd  -0x8(%rbp),%xmm0
lea    -0x80(%rbp),%rdi
mov    $0x1,%al
call   1030 <mjd_year@plt>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,0x2e8b(%rip)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,0x2e96(%rip)
movsd  0x2e7e(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jne    1200 <precess_hiprec+0xa0>
jp     1200 <precess_hiprec+0xa0>
movsd  0x2e7d(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1230 <precess_hiprec+0xd0>
movsd  -0x10(%rbp),%xmm0
lea    -0x88(%rbp),%rdi
mov    $0x1,%al
call   1030 <mjd_year@plt>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,0x2e38(%rip)
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,0x2e40(%rip)
mov    -0x18(%rbp),%rax
movsd  0xddc(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  0xdc8(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0xdbb(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  0xda7(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  0xd89(%rip),%xmm1
subsd  %xmm1,%xmm0
movaps 0xde6(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xd6a(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16b6 <precess_hiprec+0x556>
movsd  -0x80(%rbp),%xmm0
movsd  0xd5b(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xdaf(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  0xd91(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  0xd67(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xd67(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  0xd36(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  0xd1c(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xd04(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  0xcd3(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xca2(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xc8a(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x70(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0xc2d(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc29(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0xc08(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xc03(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x70(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0xbcc(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbc8(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xba7(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  0xba2(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xb72(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xb6d(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xb4c(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  0xb47(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0xb26(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xb21(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xc8(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x70(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0xad2(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xace(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xa96(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  0xa91(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xa61(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xa5c(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xa3b(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  0xa36(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xa15(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xa10(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0xa8(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
call   1040 <atan2@plt>
movsd  0x9c4(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9b0(%rip),%xmm1
divsd  %xmm1,%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
lea    -0x90(%rbp),%rdi
movsd  0x9a0(%rip),%xmm0
mov    $0x1,%al
call   1070 <range@plt>
movsd  -0x58(%rbp),%xmm0
call   1060 <asin@plt>
movsd  0x97f(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x96b(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    16d0 <precess_hiprec+0x570>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  0x928(%rip),%xmm1
subsd  %xmm1,%xmm0
movaps 0x985(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0x909(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1b29 <precess_hiprec+0x9c9>
movsd  -0x88(%rbp),%xmm0
ff
movsd  0x8f7(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x94b(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  0x92d(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  0x903(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x903(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  0x8d2(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  0x8b8(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x8a0(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  0x86f(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0x83e(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x826(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x28(%rbp),%xmm0
movsd  0x7c6(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x7c2(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x128(%rbp)
ff
movsd  0x7a1(%rip),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  0x799(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x28(%rbp),%xmm0
movsd  0x75f(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x75b(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0x120(%rbp)
ff
movsd  0x73a(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  0x735(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x120(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  0x705(%rip),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  0x6fd(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0x110(%rbp)
ff
movsd  0x6dc(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  0x6d7(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x118(%rbp)
ff
movsd  0x6b6(%rip),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  0x6ae(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  -0x118(%rbp),%xmm1
ff
movsd  -0x110(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x108(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x28(%rbp),%xmm0
movsd  0x645(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x641(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0x100(%rbp)
ff
movsd  0x620(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  0x61b(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x100(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0x5eb(%rip),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  0x5e3(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  0x5c2(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  0x5bd(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1080 <cos@plt>
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  0x59c(%rip),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  0x594(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1050 <sin@plt>
movsd  -0xf8(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
call   1040 <atan2@plt>
movsd  0x548(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x534(%rip),%xmm1
divsd  %xmm1,%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
lea    -0x60(%rbp),%rdi
movsd  0x52a(%rip),%xmm0
mov    $0x1,%al
call   1070 <range@plt>
movsd  -0x58(%rbp),%xmm0
call   1060 <asin@plt>
movsd  0x509(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x4f5(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1b43 <precess_hiprec+0x9e3>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  0x4c5(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0x4c0(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0x4a4(%rip),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  0x49f(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<precess_hiprec>:
push   %r15
push   %r14
push   %rbx
sub    $0x60,%rsp
mov    %rsi,%r14
mov    %rdi,%r15
movsd  0x2ed9(%rip),%xmm2
ucomisd %xmm0,%xmm2
jne    118f <precess_hiprec+0x2f>
jp     118f <precess_hiprec+0x2f>
movsd  0x2ee1(%rip),%xmm4
movsd  %xmm4,0x50(%rsp)
jmp    11c7 <precess_hiprec+0x67>
lea    0x50(%rsp),%rdi
mov    $0x1,%al
movsd  %xmm1,(%rsp)
movsd  %xmm0,0x8(%rsp)
call   1030 <mjd_year@plt>
movsd  (%rsp),%xmm1
movsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x2e97(%rip)
movsd  0x50(%rsp),%xmm4
movsd  %xmm4,0x2ea1(%rip)
movsd  0x2e89(%rip),%xmm0
ucomisd %xmm1,%xmm0
jne    11e7 <precess_hiprec+0x87>
jp     11e7 <precess_hiprec+0x87>
movsd  0x2e91(%rip),%xmm6
movsd  %xmm6,0x48(%rsp)
jmp    121d <precess_hiprec+0xbd>
lea    0x48(%rsp),%rdi
movapd %xmm1,%xmm0
mov    $0x1,%al
movsd  %xmm1,(%rsp)
call   1030 <mjd_year@plt>
movsd  (%rsp),%xmm0
movsd  %xmm0,0x2e4f(%rip)
movsd  0x48(%rsp),%xmm6
movsd  %xmm6,0x2e59(%rip)
movsd  0x50(%rsp),%xmm4
movsd  0xdda(%rip),%xmm8
movsd  (%r15),%xmm0
mulsd  %xmm8,%xmm0
movsd  0xdd0(%rip),%xmm5
divsd  %xmm5,%xmm0
movsd  (%r14),%xmm3
mulsd  %xmm8,%xmm3
divsd  %xmm5,%xmm3
addsd  0xdbe(%rip),%xmm4
movapd 0xe16(%rip),%xmm2
andpd  %xmm4,%xmm2
ucomisd 0xdb2(%rip),%xmm2
jbe    14d6 <precess_hiprec+0x376>
divsd  0xdac(%rip),%xmm4
movsd  0xdac(%rip),%xmm7
mulsd  %xmm4,%xmm7
mulsd  %xmm4,%xmm7
movsd  0xda4(%rip),%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm2,%xmm7
movsd  0xd9c(%rip),%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm4,%xmm6
addsd  %xmm7,%xmm6
movsd  %xmm6,0x40(%rsp)
movsd  0xd86(%rip),%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm4,%xmm6
addsd  %xmm2,%xmm6
movsd  0xd7a(%rip),%xmm2
mulsd  %xmm4,%xmm2
mulsd  %xmm4,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm6,%xmm2
movsd  0xd6a(%rip),%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm4,%xmm6
movsd  %xmm3,(%rsp)
movsd  0xd5d(%rip),%xmm3
mulsd  %xmm4,%xmm3
addsd  %xmm6,%xmm3
movsd  0xd55(%rip),%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movsd  %xmm1,0x8(%rsp)
subsd  %xmm2,%xmm0
mulsd  %xmm5,%xmm0
divsd  %xmm8,%xmm0
movsd  %xmm0,0x20(%rsp)
call   1050 <sin@plt>
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm0
mulsd  0xcbc(%rip),%xmm0
divsd  0xcac(%rip),%xmm0
movsd  %xmm0,(%rsp)
call   1080 <cos@plt>
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x20(%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xc7f(%rip),%xmm0
divsd  0xc6f(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1080 <cos@plt>
movsd  0x10(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,0x30(%rsp)
movsd  (%rsp),%xmm0
call   1050 <sin@plt>
movsd  0x30(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x18(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x20(%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <sin@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1050 <sin@plt>
mulsd  0x8(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rsp)
movsd  0x38(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
call   1040 <atan2@plt>
mulsd  0xb82(%rip),%xmm0
divsd  0xb82(%rip),%xmm0
subsd  0x40(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
lea    0x28(%rsp),%rdi
movsd  0xbc9(%rip),%xmm0
mov    $0x1,%al
call   1070 <range@plt>
movsd  (%rsp),%xmm0
call   1060 <asin@plt>
movsd  0xb50(%rip),%xmm5
movsd  0xb3f(%rip),%xmm8
movapd %xmm0,%xmm3
mulsd  %xmm8,%xmm3
divsd  %xmm5,%xmm3
movsd  0x48(%rsp),%xmm6
jmp    14dc <precess_hiprec+0x37c>
movsd  %xmm0,0x28(%rsp)
addsd  0xb2c(%rip),%xmm6
movapd 0xb84(%rip),%xmm1
andpd  %xmm6,%xmm1
ucomisd 0xb20(%rip),%xmm1
jbe    1797 <precess_hiprec+0x637>
divsd  0xb1a(%rip),%xmm6
movsd  0xb1a(%rip),%xmm1
mulsd  %xmm6,%xmm1
mulsd  %xmm6,%xmm1
movsd  0xb12(%rip),%xmm2
mulsd  %xmm6,%xmm2
addsd  %xmm2,%xmm1
movsd  0xb0a(%rip),%xmm0
mulsd  %xmm6,%xmm0
mulsd  %xmm6,%xmm0
mulsd  %xmm6,%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,%xmm7
movsd  %xmm0,0x20(%rsp)
movsd  0xaf0(%rip),%xmm1
mulsd  %xmm6,%xmm1
mulsd  %xmm6,%xmm1
addsd  %xmm2,%xmm1
movsd  0xae4(%rip),%xmm0
mulsd  %xmm6,%xmm0
mulsd  %xmm6,%xmm0
mulsd  %xmm6,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0xace(%rip),%xmm1
mulsd  %xmm6,%xmm1
mulsd  %xmm6,%xmm1
movsd  0xac6(%rip),%xmm2
mulsd  %xmm6,%xmm2
addsd  %xmm1,%xmm2
movsd  0xabe(%rip),%xmm0
mulsd  %xmm6,%xmm0
mulsd  %xmm6,%xmm0
mulsd  %xmm6,%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x28(%rsp),%xmm0
addsd  %xmm7,%xmm0
mulsd  %xmm5,%xmm0
divsd  %xmm8,%xmm0
movsd  %xmm3,(%rsp)
call   1050 <sin@plt>
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm0
mulsd  0xa20(%rip),%xmm0
divsd  0xa10(%rip),%xmm0
movsd  %xmm0,(%rsp)
call   1080 <cos@plt>
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x28(%rsp),%xmm0
addsd  0x20(%rsp),%xmm0
mulsd  0x9ee(%rip),%xmm0
divsd  0x9de(%rip),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0x9cd(%rip),%xmm0
divsd  0x9bd(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1080 <cos@plt>
movsd  0x10(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,0x30(%rsp)
movsd  (%rsp),%xmm0
call   1050 <sin@plt>
mulsd  0x30(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
movsd  0x20(%rsp),%xmm0
addsd  0x28(%rsp),%xmm0
mulsd  0x94f(%rip),%xmm0
divsd  0x93f(%rip),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <sin@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1050 <sin@plt>
mulsd  0x8(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rsp)
movsd  0x38(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
call   1040 <atan2@plt>
mulsd  0x8be(%rip),%xmm0
divsd  0x8be(%rip),%xmm0
addsd  0x40(%rsp),%xmm0
movsd  %xmm0,0x58(%rsp)
lea    0x58(%rsp),%rbx
movsd  0x905(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   1070 <range@plt>
movsd  (%rsp),%xmm0
call   1060 <asin@plt>
movsd  0x889(%rip),%xmm5
movsd  0x878(%rip),%xmm8
movapd %xmm0,%xmm3
mulsd  %xmm8,%xmm3
divsd  %xmm5,%xmm3
jmp    179c <precess_hiprec+0x63c>
lea    0x28(%rsp),%rbx
mulsd  %xmm5,%xmm3
mulsd  (%rbx),%xmm5
divsd  %xmm8,%xmm5
movsd  %xmm5,(%r15)
divsd  %xmm8,%xmm3
movsd  %xmm3,(%r14)
add    $0x60,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@precess_hiprec.last_mjd1 = internal global double -2.134320e+02
@precess_hiprec.last_from = internal global double 0.000000e+00
@precess_hiprec.last_mjd2 = internal global double -2.134320e+02
@precess_hiprec.last_to = internal global double 0.000000e+00
define void @precess_hiprec(double %0, double %1, double* %2, double* %3) {
%5 = alloca double
%6 = alloca double
%7 = alloca double*
%8 = alloca double*
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
store double %0, double* %5
store double %1, double* %6
store double* %2, double** %7
store double* %3, double** %8
%24 = load double, double* @precess_hiprec.last_mjd1
%25 = load double, double* %5
%26 = fcmp oeq double %24, %25
br i1 %26, label %27, label %29
27: ; preds = %4
%28 = load double, double* @precess_hiprec.last_from
store double %28, double* %20
br label %34
29: ; preds = %4
%30 = load double, double* %5
%31 = call i32 (double, double*, ...) bitcast (i32 (...)* @mjd_year to i32 (double, double*, ...)*)(double %30, double* %20)
%32 = load double, double* %5
store double %32, double* @precess_hiprec.last_mjd1
%33 = load double, double* %20
store double %33, double* @precess_hiprec.last_from
br label %34
34: ; preds = %29, %27
%35 = load double, double* @precess_hiprec.last_mjd2
%36 = load double, double* %6
%37 = fcmp oeq double %35, %36
br i1 %37, label %38, label %40
38: ; preds = %34
%39 = load double, double* @precess_hiprec.last_to
store double %39, double* %21
br label %45
40: ; preds = %34
%41 = load double, double* %6
%42 = call i32 (double, double*, ...) bitcast (i32 (...)* @mjd_year to i32 (double, double*, ...)*)(double %41, double* %21)
%43 = load double, double* %6
store double %43, double* @precess_hiprec.last_mjd2
%44 = load double, double* %21
store double %44, double* @precess_hiprec.last_to
br label %45
45: ; preds = %40, %38
%46 = load double*, double** %7
%47 = load double, double* %46
%48 = fmul double %47, 1.800000e+02
%49 = fdiv double %48, 0x400921FB54442D18
store double %49, double* %18
%50 = load double*, double** %8
%51 = load double, double* %50
%52 = fmul double %51, 1.800000e+02
%53 = fdiv double %52, 0x400921FB54442D18
store double %53, double* %19
%54 = load double, double* %20
%55 = fsub double %54, 2.000000e+03
%56 = call double @llvm.fabs.f64(double %55)
%57 = fcmp ogt double %56, 2.000000e-02
br i1 %57, label %58, label %174
58: ; preds = %45
%59 = load double, double* %20
%60 = fsub double %59, 2.000000e+03
%61 = fdiv double %60, 1.000000e+02
store double %61, double* %12
%62 = load double, double* %12
%63 = load double, double* %12
%64 = fmul double 8.390000e-05, %63
%65 = load double, double* %12
%66 = fmul double %64, %65
%67 = call double @llvm.fmuladd.f64(double 0x3FE47FED55D95069, double %62, double %66)
%68 = load double, double* %12
%69 = fmul double 5.000000e-06, %68
%70 = load double, double* %12
%71 = fmul double %69, %70
%72 = load double, double* %12
%73 = call double @llvm.fmuladd.f64(double %71, double %72, double %67)
store double %73, double* %9
%74 = load double, double* %12
%75 = load double, double* %12
%76 = fmul double 3.041000e-04, %75
%77 = load double, double* %12
%78 = fmul double %76, %77
%79 = call double @llvm.fmuladd.f64(double 0x3FE47FED55D95069, double %74, double %78)
%80 = load double, double* %12
%81 = fmul double 5.100000e-06, %80
%82 = load double, double* %12
%83 = fmul double %81, %82
%84 = load double, double* %12
%85 = call double @llvm.fmuladd.f64(double %83, double %84, double %79)
store double %85, double* %10
%86 = load double, double* %12
%87 = load double, double* %12
%88 = fmul double 1.185000e-04, %87
%89 = load double, double* %12
%90 = fmul double %88, %89
%91 = fneg double %90
%92 = call double @llvm.fmuladd.f64(double 5.567530e-01, double %86, double %91)
%93 = load double, double* %12
%94 = fmul double 1.160000e-05, %93
%95 = load double, double* %12
%96 = fmul double %94, %95
%97 = load double, double* %12
%98 = fneg double %96
%99 = call double @llvm.fmuladd.f64(double %98, double %97, double %92)
store double %99, double* %11
%100 = load double, double* %18
%101 = load double, double* %10
%102 = fsub double %100, %101
%103 = fmul double %102, 0x400921FB54442D18
%104 = fdiv double %103, 1.800000e+02
%105 = call double @sin(double %104)
%106 = load double, double* %19
%107 = fmul double %106, 0x400921FB54442D18
%108 = fdiv double %107, 1.800000e+02
%109 = call double @cos(double %108)
%110 = fmul double %105, %109
store double %110, double* %13
%111 = load double, double* %18
%112 = load double, double* %10
%113 = fsub double %111, %112
%114 = fmul double %113, 0x400921FB54442D18
%115 = fdiv double %114, 1.800000e+02
%116 = call double @cos(double %115)
%117 = load double, double* %11
%118 = fmul double %117, 0x400921FB54442D18
%119 = fdiv double %118, 1.800000e+02
%120 = call double @cos(double %119)
%121 = fmul double %116, %120
%122 = load double, double* %19
%123 = fmul double %122, 0x400921FB54442D18
%124 = fdiv double %123, 1.800000e+02
%125 = call double @cos(double %124)
%126 = load double, double* %11
%127 = fmul double %126, 0x400921FB54442D18
%128 = fdiv double %127, 1.800000e+02
%129 = call double @sin(double %128)
%130 = load double, double* %19
%131 = fmul double %130, 0x400921FB54442D18
%132 = fdiv double %131, 1.800000e+02
%133 = call double @sin(double %132)
%134 = fmul double %129, %133
%135 = call double @llvm.fmuladd.f64(double %121, double %125, double %134)
store double %135, double* %14
%136 = load double, double* %18
%137 = load double, double* %10
%138 = fsub double %136, %137
%139 = fmul double %138, 0x400921FB54442D18
%140 = fdiv double %139, 1.800000e+02
%141 = call double @cos(double %140)
%142 = fneg double %141
%143 = load double, double* %11
%144 = fmul double %143, 0x400921FB54442D18
%145 = fdiv double %144, 1.800000e+02
%146 = call double @sin(double %145)
%147 = fmul double %142, %146
%148 = load double, double* %19
%149 = fmul double %148, 0x400921FB54442D18
%150 = fdiv double %149, 1.800000e+02
%151 = call double @cos(double %150)
%152 = load double, double* %11
%153 = fmul double %152, 0x400921FB54442D18
%154 = fdiv double %153, 1.800000e+02
%155 = call double @cos(double %154)
%156 = load double, double* %19
%157 = fmul double %156, 0x400921FB54442D18
%158 = fdiv double %157, 1.800000e+02
%159 = call double @sin(double %158)
%160 = fmul double %155, %159
%161 = call double @llvm.fmuladd.f64(double %147, double %151, double %160)
store double %161, double* %15
%162 = load double, double* %13
%163 = load double, double* %14
%164 = call double @atan2(double %162, double %163)
%165 = fmul double %164, 1.800000e+02
%166 = fdiv double %165, 0x400921FB54442D18
%167 = load double, double* %9
%168 = fsub double %166, %167
store double %168, double* %22
%169 = call i32 (double*, double, ...) bitcast (i32 (...)* @range to i32 (double*, double, ...)*)(double* %22, double 3.600000e+02)
%170 = load double, double* %15
%171 = call double @asin(double %170)
%172 = fmul double %171, 1.800000e+02
%173 = fdiv double %172, 0x400921FB54442D18
store double %173, double* %23
br label %177
174: ; preds = %45
%175 = load double, double* %18
store double %175, double* %22
%176 = load double, double* %19
store double %176, double* %23
br label %177
177: ; preds = %174, %58
%178 = load double, double* %21
%179 = fsub double %178, 2.000000e+03
%180 = call double @llvm.fabs.f64(double %179)
%181 = fcmp ogt double %180, 2.000000e-02
br i1 %181, label %182, label %298
182: ; preds = %177
%183 = load double, double* %21
%184 = fsub double %183, 2.000000e+03
%185 = fdiv double %184, 1.000000e+02
store double %185, double* %12
%186 = load double, double* %12
%187 = load double, double* %12
%188 = fmul double 8.390000e-05, %187
%189 = load double, double* %12
%190 = fmul double %188, %189
%191 = call double @llvm.fmuladd.f64(double 0x3FE47FED55D95069, double %186, double %190)
%192 = load double, double* %12
%193 = fmul double 5.000000e-06, %192
%194 = load double, double* %12
%195 = fmul double %193, %194
%196 = load double, double* %12
%197 = call double @llvm.fmuladd.f64(double %195, double %196, double %191)
store double %197, double* %9
%198 = load double, double* %12
%199 = load double, double* %12
%200 = fmul double 3.041000e-04, %199
%201 = load double, double* %12
%202 = fmul double %200, %201
%203 = call double @llvm.fmuladd.f64(double 0x3FE47FED55D95069, double %198, double %202)
%204 = load double, double* %12
%205 = fmul double 5.100000e-06, %204
%206 = load double, double* %12
%207 = fmul double %205, %206
%208 = load double, double* %12
%209 = call double @llvm.fmuladd.f64(double %207, double %208, double %203)
store double %209, double* %10
%210 = load double, double* %12
%211 = load double, double* %12
%212 = fmul double 1.185000e-04, %211
%213 = load double, double* %12
%214 = fmul double %212, %213
%215 = fneg double %214
%216 = call double @llvm.fmuladd.f64(double 5.567530e-01, double %210, double %215)
%217 = load double, double* %12
%218 = fmul double 1.160000e-05, %217
%219 = load double, double* %12
%220 = fmul double %218, %219
%221 = load double, double* %12
%222 = fneg double %220
%223 = call double @llvm.fmuladd.f64(double %222, double %221, double %216)
store double %223, double* %11
%224 = load double, double* %22
%225 = load double, double* %9
%226 = fadd double %224, %225
%227 = fmul double %226, 0x400921FB54442D18
%228 = fdiv double %227, 1.800000e+02
%229 = call double @sin(double %228)
%230 = load double, double* %23
%231 = fmul double %230, 0x400921FB54442D18
%232 = fdiv double %231, 1.800000e+02
%233 = call double @cos(double %232)
%234 = fmul double %229, %233
store double %234, double* %13
%235 = load double, double* %22
%236 = load double, double* %9
%237 = fadd double %235, %236
%238 = fmul double %237, 0x400921FB54442D18
%239 = fdiv double %238, 1.800000e+02
%240 = call double @cos(double %239)
%241 = load double, double* %11
%242 = fmul double %241, 0x400921FB54442D18
%243 = fdiv double %242, 1.800000e+02
%244 = call double @cos(double %243)
%245 = fmul double %240, %244
%246 = load double, double* %23
%247 = fmul double %246, 0x400921FB54442D18
%248 = fdiv double %247, 1.800000e+02
%249 = call double @cos(double %248)
%250 = load double, double* %11
%251 = fmul double %250, 0x400921FB54442D18
%252 = fdiv double %251, 1.800000e+02
%253 = call double @sin(double %252)
%254 = load double, double* %23
%255 = fmul double %254, 0x400921FB54442D18
%256 = fdiv double %255, 1.800000e+02
%257 = call double @sin(double %256)
%258 = fmul double %253, %257
%259 = fneg double %258
%260 = call double @llvm.fmuladd.f64(double %245, double %249, double %259)
store double %260, double* %14
%261 = load double, double* %22
%262 = load double, double* %9
%263 = fadd double %261, %262
%264 = fmul double %263, 0x400921FB54442D18
%265 = fdiv double %264, 1.800000e+02
%266 = call double @cos(double %265)
%267 = load double, double* %11
%268 = fmul double %267, 0x400921FB54442D18
%269 = fdiv double %268, 1.800000e+02
%270 = call double @sin(double %269)
%271 = fmul double %266, %270
%272 = load double, double* %23
%273 = fmul double %272, 0x400921FB54442D18
%274 = fdiv double %273, 1.800000e+02
%275 = call double @cos(double %274)
%276 = load double, double* %11
%277 = fmul double %276, 0x400921FB54442D18
%278 = fdiv double %277, 1.800000e+02
%279 = call double @cos(double %278)
%280 = load double, double* %23
%281 = fmul double %280, 0x400921FB54442D18
%282 = fdiv double %281, 1.800000e+02
%283 = call double @sin(double %282)
%284 = fmul double %279, %283
%285 = call double @llvm.fmuladd.f64(double %271, double %275, double %284)
store double %285, double* %15
%286 = load double, double* %13
%287 = load double, double* %14
%288 = call double @atan2(double %286, double %287)
%289 = fmul double %288, 1.800000e+02
%290 = fdiv double %289, 0x400921FB54442D18
%291 = load double, double* %10
%292 = fadd double %290, %291
store double %292, double* %16
%293 = call i32 (double*, double, ...) bitcast (i32 (...)* @range to i32 (double*, double, ...)*)(double* %16, double 3.600000e+02)
%294 = load double, double* %15
%295 = call double @asin(double %294)
%296 = fmul double %295, 1.800000e+02
%297 = fdiv double %296, 0x400921FB54442D18
store double %297, double* %17
br label %301
298: ; preds = %177
%299 = load double, double* %22
store double %299, double* %16
%300 = load double, double* %23
store double %300, double* %17
br label %301
301: ; preds = %298, %182
%302 = load double, double* %16
%303 = fmul double %302, 0x400921FB54442D18
%304 = fdiv double %303, 1.800000e+02
%305 = load double*, double** %7
store double %304, double* %305
%306 = load double, double* %17
%307 = fmul double %306, 0x400921FB54442D18
%308 = fdiv double %307, 1.800000e+02
%309 = load double*, double** %8
store double %308, double* %309
ret void
}

LLVM IR (-O2):
@precess_hiprec.last_mjd1 = internal unnamed_addr global double -2.134320e+02
@precess_hiprec.last_from = internal unnamed_addr global double 0.000000e+00
@precess_hiprec.last_mjd2 = internal unnamed_addr global double -2.134320e+02
@precess_hiprec.last_to = internal unnamed_addr global double 0.000000e+00
define void @precess_hiprec(double %0, double %1, double* nocapture %2, double* nocapture %3) {
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = bitcast double* %5 to i8*
%10 = bitcast double* %6 to i8*
%11 = bitcast double* %7 to i8*
%12 = bitcast double* %8 to i8*
%13 = load double, double* @precess_hiprec.last_mjd1
%14 = fcmp oeq double %13, %0
br i1 %14, label %15, label %17
15: ; preds = %4
%16 = load double, double* @precess_hiprec.last_from
store double %16, double* %6
br label %20
17: ; preds = %4
%18 = call i32 (double, double*, ...) bitcast (i32 (...)* @mjd_year to i32 (double, double*, ...)*)(double %0, double* %6)
store double %0, double* @precess_hiprec.last_mjd1
%19 = load double, double* %6
store double %19, double* @precess_hiprec.last_from
br label %20
20: ; preds = %17, %15
%21 = phi double [ %19, %17 ], [ %16, %15 ]
%22 = load double, double* @precess_hiprec.last_mjd2
%23 = fcmp oeq double %22, %1
br i1 %23, label %24, label %26
24: ; preds = %20
%25 = load double, double* @precess_hiprec.last_to
store double %25, double* %7
br label %30
26: ; preds = %20
%27 = call i32 (double, double*, ...) bitcast (i32 (...)* @mjd_year to i32 (double, double*, ...)*)(double %1, double* %7)
store double %1, double* @precess_hiprec.last_mjd2
%28 = load double, double* %7
store double %28, double* @precess_hiprec.last_to
%29 = load double, double* %6
br label %30
30: ; preds = %26, %24
%31 = phi double [ %28, %26 ], [ %25, %24 ]
%32 = phi double [ %29, %26 ], [ %21, %24 ]
%33 = load double, double* %2
%34 = fmul double %33, 1.800000e+02
%35 = fdiv double %34, 0x400921FB54442D18
%36 = load double, double* %3
%37 = fmul double %36, 1.800000e+02
%38 = fdiv double %37, 0x400921FB54442D18
%39 = fadd double %32, -2.000000e+03
%40 = call double @llvm.fabs.f64(double %39)
%41 = fcmp ogt double %40, 2.000000e-02
br i1 %41, label %42, label %98
42: ; preds = %30
%43 = fdiv double %39, 1.000000e+02
%44 = fmul double %43, 8.390000e-05
%45 = fmul double %43, %44
%46 = call double @llvm.fmuladd.f64(double %43, double 0x3FE47FED55D95069, double %45)
%47 = fmul double %43, 5.000000e-06
%48 = fmul double %43, %47
%49 = call double @llvm.fmuladd.f64(double %48, double %43, double %46)
%50 = fmul double %43, 3.041000e-04
%51 = fmul double %43, %50
%52 = call double @llvm.fmuladd.f64(double %43, double 0x3FE47FED55D95069, double %51)
%53 = fmul double %43, 5.100000e-06
%54 = fmul double %43, %53
%55 = call double @llvm.fmuladd.f64(double %54, double %43, double %52)
%56 = fmul double %43, -1.185000e-04
%57 = fmul double %43, %56
%58 = call double @llvm.fmuladd.f64(double %43, double 5.567530e-01, double %57)
%59 = fmul double %43, -1.160000e-05
%60 = fmul double %43, %59
%61 = call double @llvm.fmuladd.f64(double %60, double %43, double %58)
%62 = fsub double %35, %55
%63 = fmul double %62, 0x400921FB54442D18
%64 = fdiv double %63, 1.800000e+02
%65 = call double @sin(double %64)
%66 = fmul double %38, 0x400921FB54442D18
%67 = fdiv double %66, 1.800000e+02
%68 = call double @cos(double %67)
%69 = fmul double %65, %68
%70 = call double @cos(double %64)
%71 = fmul double %61, 0x400921FB54442D18
%72 = fdiv double %71, 1.800000e+02
%73 = call double @cos(double %72)
%74 = fmul double %70, %73
%75 = call double @cos(double %67)
%76 = call double @sin(double %72)
%77 = call double @sin(double %67)
%78 = fmul double %76, %77
%79 = call double @llvm.fmuladd.f64(double %74, double %75, double %78)
%80 = call double @cos(double %64)
%81 = fneg double %80
%82 = call double @sin(double %72)
%83 = fmul double %82, %81
%84 = call double @cos(double %67)
%85 = call double @cos(double %72)
%86 = call double @sin(double %67)
%87 = fmul double %85, %86
%88 = call double @llvm.fmuladd.f64(double %83, double %84, double %87)
%89 = call double @atan2(double %69, double %79)
%90 = fmul double %89, 1.800000e+02
%91 = fdiv double %90, 0x400921FB54442D18
%92 = fsub double %91, %49
store double %92, double* %8
%93 = call i32 (double*, double, ...) bitcast (i32 (...)* @range to i32 (double*, double, ...)*)(double* %8, double 3.600000e+02)
%94 = call double @asin(double %88)
%95 = fmul double %94, 1.800000e+02
%96 = fdiv double %95, 0x400921FB54442D18
%97 = load double, double* %7
br label %99
98: ; preds = %30
store double %35, double* %8
br label %99
99: ; preds = %98, %42
%100 = phi double [ %97, %42 ], [ %31, %98 ]
%101 = phi double [ %96, %42 ], [ %38, %98 ]
%102 = fadd double %100, -2.000000e+03
%103 = call double @llvm.fabs.f64(double %102)
%104 = fcmp ogt double %103, 2.000000e-02
br i1 %104, label %105, label %169
105: ; preds = %99
%106 = fdiv double %102, 1.000000e+02
%107 = fmul double %106, 8.390000e-05
%108 = fmul double %106, %107
%109 = call double @llvm.fmuladd.f64(double %106, double 0x3FE47FED55D95069, double %108)
%110 = fmul double %106, 5.000000e-06
%111 = fmul double %106, %110
%112 = call double @llvm.fmuladd.f64(double %111, double %106, double %109)
%113 = fmul double %106, 3.041000e-04
%114 = fmul double %106, %113
%115 = call double @llvm.fmuladd.f64(double %106, double 0x3FE47FED55D95069, double %114)
%116 = fmul double %106, 5.100000e-06
%117 = fmul double %106, %116
%118 = call double @llvm.fmuladd.f64(double %117, double %106, double %115)
%119 = fmul double %106, -1.185000e-04
%120 = fmul double %106, %119
%121 = call double @llvm.fmuladd.f64(double %106, double 5.567530e-01, double %120)
%122 = fmul double %106, -1.160000e-05
%123 = fmul double %106, %122
%124 = call double @llvm.fmuladd.f64(double %123, double %106, double %121)
%125 = load double, double* %8
%126 = fadd double %112, %125
%127 = fmul double %126, 0x400921FB54442D18
%128 = fdiv double %127, 1.800000e+02
%129 = call double @sin(double %128)
%130 = fmul double %101, 0x400921FB54442D18
%131 = fdiv double %130, 1.800000e+02
%132 = call double @cos(double %131)
%133 = fmul double %129, %132
%134 = load double, double* %8
%135 = fadd double %112, %134
%136 = fmul double %135, 0x400921FB54442D18
%137 = fdiv double %136, 1.800000e+02
%138 = call double @cos(double %137)
%139 = fmul double %124, 0x400921FB54442D18
%140 = fdiv double %139, 1.800000e+02
%141 = call double @cos(double %140)
%142 = fmul double %138, %141
%143 = call double @cos(double %131)
%144 = call double @sin(double %140)
%145 = call double @sin(double %131)
%146 = fneg double %144
%147 = fmul double %145, %146
%148 = call double @llvm.fmuladd.f64(double %142, double %143, double %147)
%149 = load double, double* %8
%150 = fadd double %112, %149
%151 = fmul double %150, 0x400921FB54442D18
%152 = fdiv double %151, 1.800000e+02
%153 = call double @cos(double %152)
%154 = call double @sin(double %140)
%155 = fmul double %153, %154
%156 = call double @cos(double %131)
%157 = call double @cos(double %140)
%158 = call double @sin(double %131)
%159 = fmul double %157, %158
%160 = call double @llvm.fmuladd.f64(double %155, double %156, double %159)
%161 = call double @atan2(double %133, double %148)
%162 = fmul double %161, 1.800000e+02
%163 = fdiv double %162, 0x400921FB54442D18
%164 = fadd double %118, %163
store double %164, double* %5
%165 = call i32 (double*, double, ...) bitcast (i32 (...)* @range to i32 (double*, double, ...)*)(double* %5, double 3.600000e+02)
%166 = call double @asin(double %160)
%167 = fmul double %166, 1.800000e+02
%168 = fdiv double %167, 0x400921FB54442D18
br label %169
169: ; preds = %99, %105
%170 = phi double* [ %5, %105 ], [ %8, %99 ]
%171 = phi double [ %168, %105 ], [ %101, %99 ]
%172 = load double, double* %170
%173 = fmul double %172, 0x400921FB54442D18
%174 = fdiv double %173, 1.800000e+02
store double %174, double* %2
%175 = fmul double %171, 0x400921FB54442D18
%176 = fdiv double %175, 1.800000e+02
store double %176, double* %3
ret void
}