#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ CelestialToEcliptical(double, double, double *, double *);
double Eccentricity();
int /*<<< orphan*/ EclipticalToCelestial(double, double, double *, double *);
double LongitudePerihelion();
double LongitudeSun();
double Map180(double);
double Map360(double);
double MeanObliquity();
double cos(double);
double fabs(double);
double sin(double);
double tan(double);
void Aberration(double *ra, double *dec, int dirflag) {
  double ra_in, dec_in, ra_out, dec_out;
  double lambda, beta;
  double elong, elat;
  double dlong, dlat;
  double ec, lp, glsun, ka, eps0;
  double c1, c2;
  double dra, ddec;
  double dir;
  dir = 1.0;
  if (dirflag < 0) {
    dir = -1.0;
  }
  ka = 20.49552;
  glsun = LongitudeSun();
  ec = Eccentricity();
  lp = LongitudePerihelion();
  eps0 = MeanObliquity();
  ra_in = *ra;
  dec_in = *dec;
  if (fabs(dec_in) > (double)85.) {
    CelestialToEcliptical(ra_in, dec_in, &lambda, &beta);
    elong = lambda;
    elat = beta;
    c1 = -cos((glsun - elong) * 3.14159265358 / 180.) +
         ec * cos((lp - elong) * 3.14159265358 / 180.);
    c2 = cos(elat * 3.14159265358 / 180.);
    if (c2 < (double)0.0001)
      c2 = 0.0001;
    dlong = dir * ka * (c1 / c2) / 3600.;
    c1 = -sin(elat * 3.14159265358 / 180.);
    c2 = sin((glsun - elong) * 3.14159265358 / 180.) -
         ec * sin((lp - elong) * 3.14159265358 / 180.);
    dlat = dir * ka * c1 * c2 / 3600.;
    elong = elong + dlong;
    elat = elat + dlat;
    elat = Map180(elat);
    if (elat > 90.) {
      elat = 180. - dec_out;
      elong = elong + 180.;
    }
    if (elat < -90.) {
      elat = -180. - elat;
      elong = elong + 180.;
    }
    elong = Map360(elong);
    EclipticalToCelestial(elong, elat, &ra_out, &dec_out);
  } else {
    dra =
        (-cos(ra_in * 3.14159265358 / 12.) * cos(glsun * 3.14159265358 / 180.) *
             cos(eps0 * 3.14159265358 / 180.) -
         sin(ra_in * 3.14159265358 / 12.) * sin(glsun * 3.14159265358 / 180.) +
         ec * cos(ra_in * 3.14159265358 / 12.) *
             cos(lp * 3.14159265358 / 180.) * cos(eps0 * 3.14159265358 / 180) +
         ec * sin(ra_in * 3.14159265358 / 12.) *
             sin(lp * 3.14159265358 / 180.)) /
        cos(dec_in * 3.14159265358 / 180.);
    dra = dir * ka * dra;
    dra = dra / (15. * 3600.);
    ddec =
        -cos(glsun * 3.14159265358 / 180) * cos(eps0 * 3.14159265358 / 180.) *
            (tan(eps0 * 3.14159265358 / 180) *
                 cos(dec_in * 3.14159265358 / 180.) -
             sin(ra_in * 3.14159265358 / 12.) *
                 sin(dec_in * 3.14159265358 / 180.)) -
        cos(ra_in * 3.14159265358 / 12.) * sin(dec_in * 3.14159265358 / 180.) *
            sin(glsun * 3.14159265358 / 180) +
        ec * cos(lp * 3.14159265358 / 180.) * cos(eps0 * 3.14159265358 / 180.) *
            (tan(eps0 * 3.14159265358 / 180.) *
                 cos(dec_in * 3.14159265358 / 180.) -
             sin(ra_in * 3.14159265358 / 12.) *
                 sin(dec_in * 3.14159265358 / 180.)) +
        ec * cos(ra_in * 3.14159265358 / 12.) *
            sin(dec_in * 3.14159265358 / 180.) * sin(lp * 3.14159265358 / 180.);
    ddec = dir * ka * ddec;
    ddec = ddec / 3600.;
    ra_out = ra_in + dra;
    dec_out = dec_in + ddec;
  }
  *ra = ra_out;
  *dec = dec_out;
}


x86 assembly (clang, -O0):
<Aberration>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1d0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movsd  0xe32(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
cmpl   $0x0,-0x14(%rbp)
jge    11f0 <Aberration+0x40>
movsd  0xe20(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xe20(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    $0x0,%al
call   10a0 <LongitudeSun@plt>
movsd  %xmm0,-0x80(%rbp)
mov    $0x0,%al
call   1050 <Eccentricity@plt>
movsd  %xmm0,-0x70(%rbp)
mov    $0x0,%al
call   1080 <LongitudePerihelion@plt>
movsd  %xmm0,-0x78(%rbp)
mov    $0x0,%al
call   1070 <MeanObliquity@plt>
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movaps 0xe17(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xdab(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    158d <Aberration+0x3dd>
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
lea    -0x40(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1030 <CelestialToEcliptical@plt>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x80(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  0xd84(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd70(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  0xd31(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd1d(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movsd  -0xc8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xcf1(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  0xcdc(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xce3(%rip),%xmm0
ucomisd -0xa0(%rbp),%xmm0
ff
jbe    1383 <Aberration+0x1d3>
movsd  0xccd(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
divsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  0xc71(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xc70(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  0xc5b(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  0xc29(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc15(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  0xbed(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbd9(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  -0xd8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xd0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  0xb66(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x58(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
call   10c0 <Map180@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  0xb53(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    152b <Aberration+0x37b>
movsd  0xb19(%rip),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xb07(%rip),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xb25(%rip),%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    1562 <Aberration+0x3b2>
movsd  0xb1a(%rip),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xad0(%rip),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
call   1040 <Map360@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
lea    -0x30(%rbp),%rdi
lea    -0x38(%rbp),%rsi
call   1060 <EclipticalToCelestial@plt>
jmp    1cf1 <Aberration+0xb41>
movsd  0xa9b(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0xa96(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  0xa5e(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  0xa49(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x1d0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  0xa29(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  0xa11(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  0xa00(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0x9fb(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  0x9da(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  0x9c5(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  -0x1c8(%rbp),%xmm1
ff
movsd  -0x1c0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x1b8(%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,-0x1a0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  0x969(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0x964(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x1b0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  0x934(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0x91f(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x1a8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  0x8ff(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  0x8e7(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movsd  -0x1a0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x198(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  0x8ae(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0x8a9(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x190(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  0x879(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0x864(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  -0x188(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x180(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  0x838(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0x823(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x178(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  0x7eb(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0x7c7(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  0x7b2(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  0x78a(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  0x772(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x170(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  0x752(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  0x73a(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10b0 <tan@plt>
movsd  %xmm0,-0x158(%rbp)
ff
movsd  0x729(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0x714(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movsd  %xmm0,-0x160(%rbp)
ff
movsd  0x703(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0x6fe(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  %xmm0,-0x168(%rbp)
ff
movsd  0x6dd(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0x6c8(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  -0x168(%rbp),%xmm1
ff
movsd  -0x160(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x158(%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,-0x140(%rbp)
ff
movsd  0x679(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0x674(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movsd  %xmm0,-0x150(%rbp)
ff
movsd  0x653(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0x63e(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x150(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  0x61e(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  0x609(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  -0x148(%rbp),%xmm1
ff
movsd  -0x140(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x138(%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,-0x108(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  0x5ad(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0x598(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x130(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  0x578(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  0x560(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  0x540(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  0x528(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10b0 <tan@plt>
movsd  %xmm0,-0x118(%rbp)
ff
movsd  0x517(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0x502(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movsd  %xmm0,-0x110(%rbp)
ff
movsd  0x4f1(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0x4ec(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  %xmm0,-0x120(%rbp)
ff
movsd  0x4cb(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0x4b6(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  -0x120(%rbp),%xmm3
ff
movsd  -0x118(%rbp),%xmm2
ff
movsd  -0x110(%rbp),%xmm4
ff
movsd  -0x108(%rbp),%xmm1
ff
movaps %xmm0,%xmm5
movsd  -0x100(%rbp),%xmm0
ff
mulsd  %xmm5,%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  0x442(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0x43d(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10d0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  0x40d(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0x3f8(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0x3d8(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0x3c3(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1090 <sin@plt>
movsd  -0xe8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  0x35f(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x1d0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Aberration>:
push   %r14
push   %rbx
sub    $0xd8,%rsp
mov    %rsi,%r14
mov    %rdi,%rbx
shr    $0x1f,%edx
lea    0xe36(%rip),%rax
movsd  (%rax,%rdx,8),%xmm0
movapd %xmm0,0x60(%rsp)
xor    %eax,%eax
call   10a0 <LongitudeSun@plt>
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1050 <Eccentricity@plt>
movsd  %xmm0,0x10(%rsp)
xor    %eax,%eax
call   1080 <LongitudePerihelion@plt>
movsd  %xmm0,0x18(%rsp)
xor    %eax,%eax
call   1070 <MeanObliquity@plt>
movapd %xmm0,%xmm3
movsd  (%rbx),%xmm2
movsd  (%r14),%xmm1
movapd 0xdf9(%rip),%xmm0
andpd  %xmm1,%xmm0
ucomisd 0xe1d(%rip),%xmm0
jbe    13cb <Aberration+0x21b>
lea    0xa0(%rsp),%rdi
lea    0x98(%rsp),%rsi
movapd %xmm2,%xmm0
call   1030 <CelestialToEcliptical@plt>
movsd  0xa0(%rsp),%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0x98(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
subsd  %xmm1,%xmm0
mulsd  0xdd7(%rip),%xmm0
divsd  0xddf(%rip),%xmm0
movsd  %xmm0,(%rsp)
call   10d0 <cos@plt>
movsd  %xmm0,0x40(%rsp)
movsd  0x18(%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
mulsd  0xdab(%rip),%xmm0
divsd  0xdb3(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
call   10d0 <cos@plt>
mulsd  0x10(%rsp),%xmm0
subsd  0x40(%rsp),%xmm0
movapd %xmm0,0x40(%rsp)
movsd  0xd7e(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
divsd  0xd80(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
call   10d0 <cos@plt>
movsd  0xd7d(%rip),%xmm1
maxsd  %xmm0,%xmm1
movapd 0x60(%rsp),%xmm2
mulsd  0xd63(%rip),%xmm2
movapd %xmm2,0x60(%rsp)
movapd 0x40(%rsp),%xmm0
divsd  %xmm1,%xmm0
mulsd  %xmm2,%xmm0
divsd  0xd57(%rip),%xmm0
movapd %xmm0,0x40(%rsp)
movsd  0x20(%rsp),%xmm0
call   1090 <sin@plt>
movsd  %xmm0,0x20(%rsp)
movsd  (%rsp),%xmm0
call   1090 <sin@plt>
movsd  %xmm0,(%rsp)
movsd  0x18(%rsp),%xmm0
call   1090 <sin@plt>
mulsd  0x10(%rsp),%xmm0
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  0x20(%rsp),%xmm0
mulsd  0x60(%rsp),%xmm0
mulsd  %xmm1,%xmm0
divsd  0xcff(%rip),%xmm0
movapd %xmm0,%xmm1
movapd 0x40(%rsp),%xmm0
addsd  0x30(%rsp),%xmm0
movapd %xmm0,0x40(%rsp)
movsd  0x8(%rsp),%xmm0
subsd  %xmm1,%xmm0
call   10c0 <Map180@plt>
movapd 0x40(%rsp),%xmm5
movsd  0xcb4(%rip),%xmm4
movapd %xmm0,%xmm1
movsd  0xcc8(%rip),%xmm2
ucomisd %xmm2,%xmm0
movapd %xmm5,%xmm3
addsd  %xmm4,%xmm3
ja     175b <Aberration+0x5ab>
movapd %xmm1,%xmm0
jmp    1768 <Aberration+0x5b8>
movapd %xmm2,%xmm0
mulsd  0xc71(%rip),%xmm0
divsd  0xc71(%rip),%xmm0
movapd %xmm0,0x40(%rsp)
movapd %xmm1,0xb0(%rsp)
movapd %xmm2,0xc0(%rsp)
movsd  %xmm3,0x8(%rsp)
call   10d0 <cos@plt>
xorpd  0xc16(%rip),%xmm0
movapd %xmm0,0x30(%rsp)
movsd  (%rsp),%xmm0
mulsd  0xc2b(%rip),%xmm0
divsd  0xc33(%rip),%xmm0
movsd  %xmm0,(%rsp)
call   10d0 <cos@plt>
mulsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xbff(%rip),%xmm0
divsd  0xc07(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
call   10d0 <cos@plt>
movsd  %xmm0,0x30(%rsp)
movaps 0x40(%rsp),%xmm0
call   1090 <sin@plt>
movsd  %xmm0,0x70(%rsp)
movsd  (%rsp),%xmm0
call   1090 <sin@plt>
mulsd  0x70(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
mulsd  0x20(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x30(%rsp)
movapd 0x40(%rsp),%xmm0
call   10d0 <cos@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x18(%rsp),%xmm0
mulsd  0xb8b(%rip),%xmm0
divsd  0xb93(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
call   10d0 <cos@plt>
mulsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
call   10d0 <cos@plt>
mulsd  0x20(%rsp),%xmm0
addsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movapd 0x40(%rsp),%xmm0
call   1090 <sin@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x18(%rsp),%xmm0
call   1090 <sin@plt>
mulsd  0x20(%rsp),%xmm0
addsd  0x30(%rsp),%xmm0
movapd %xmm0,0x70(%rsp)
movsd  0xb13(%rip),%xmm0
mulsd  0xb0(%rsp),%xmm0
divsd  0xb12(%rip),%xmm0
movsd  %xmm0,0x30(%rsp)
call   10d0 <cos@plt>
movapd 0x70(%rsp),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,0x70(%rsp)
movapd 0x60(%rsp),%xmm0
mulsd  0xaf1(%rip),%xmm0
movapd %xmm0,0x60(%rsp)
movsd  (%rsp),%xmm0
call   10d0 <cos@plt>
xorps  0xa9a(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
call   10d0 <cos@plt>
mulsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x58(%rsp)
movsd  0x8(%rsp),%xmm0
call   10b0 <tan@plt>
movsd  %xmm0,0x50(%rsp)
movsd  0x30(%rsp),%xmm0
call   10d0 <cos@plt>
movsd  %xmm0,0x20(%rsp)
movaps 0x40(%rsp),%xmm0
call   1090 <sin@plt>
movsd  %xmm0,0x90(%rsp)
movsd  0x30(%rsp),%xmm0
call   1090 <sin@plt>
mulsd  0x90(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
mulsd  0x50(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x58(%rsp),%xmm1
movsd  %xmm1,0x20(%rsp)
movaps 0x40(%rsp),%xmm0
call   10d0 <cos@plt>
movsd  %xmm0,0x58(%rsp)
movsd  0x30(%rsp),%xmm0
call   1090 <sin@plt>
movsd  %xmm0,0x50(%rsp)
movsd  (%rsp),%xmm0
call   1090 <sin@plt>
movsd  0x50(%rsp),%xmm1
mulsd  0x58(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x20(%rsp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x18(%rsp),%xmm0
call   10d0 <cos@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x8(%rsp),%xmm0
call   10d0 <cos@plt>
mulsd  (%rsp),%xmm0
movsd  %xmm0,0x58(%rsp)
movsd  0x8(%rsp),%xmm0
call   10b0 <tan@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x30(%rsp),%xmm0
call   10d0 <cos@plt>
movsd  %xmm0,(%rsp)
movaps 0x40(%rsp),%xmm0
call   1090 <sin@plt>
movsd  %xmm0,0x50(%rsp)
movsd  0x30(%rsp),%xmm0
call   1090 <sin@plt>
mulsd  0x50(%rsp),%xmm0
movsd  (%rsp),%xmm1
mulsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x58(%rsp),%xmm1
addsd  0x20(%rsp),%xmm1
movsd  %xmm1,(%rsp)
movapd 0x40(%rsp),%xmm0
call   10d0 <cos@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x30(%rsp),%xmm0
call   1090 <sin@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x18(%rsp),%xmm0
call   1090 <sin@plt>
movapd 0xb0(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm0
addsd  (%rsp),%xmm0
unpcklpd 0x70(%rsp),%xmm0
movapd 0x60(%rsp),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm0,%xmm2
divpd  0x8e7(%rip),%xmm2
unpcklpd 0xc0(%rsp),%xmm1
addpd  %xmm2,%xmm1
jmp    17ee <Aberration+0x63e>
movapd %xmm4,%xmm0
subsd  0x88(%rsp),%xmm0
cmpltsd %xmm1,%xmm2
andpd  %xmm2,%xmm3
andnpd %xmm5,%xmm2
orpd   %xmm3,%xmm2
movsd  0x8ff(%rip),%xmm3
ucomisd %xmm0,%xmm3
movapd %xmm2,%xmm1
addsd  %xmm4,%xmm1
ja     1795 <Aberration+0x5e5>
movapd %xmm0,%xmm4
jmp    17a1 <Aberration+0x5f1>
movsd  0x8eb(%rip),%xmm4
subsd  %xmm0,%xmm4
movsd  %xmm4,0x18(%rsp)
cmpltsd %xmm3,%xmm0
movapd %xmm0,%xmm3
andnpd %xmm2,%xmm3
andpd  %xmm1,%xmm0
orpd   %xmm3,%xmm0
call   1040 <Map360@plt>
lea    0xa8(%rsp),%rdi
lea    0x88(%rsp),%rsi
movsd  0x18(%rsp),%xmm1
call   1060 <EclipticalToCelestial@plt>
movsd  0x88(%rsp),%xmm1
movhpd 0xa8(%rsp),%xmm1
movhpd %xmm1,(%rbx)
movlpd %xmm1,(%r14)
add    $0xd8,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define void @Aberration(double* nocapture %0, double* nocapture %1, i32 %2) {
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = bitcast double* %4 to i8*
%9 = bitcast double* %5 to i8*
%10 = bitcast double* %6 to i8*
%11 = bitcast double* %7 to i8*
%12 = icmp slt i32 %2, 0
%13 = select i1 %12, double -1.000000e+00, double 1.000000e+00
%14 = tail call double (...) @LongitudeSun()
%15 = tail call double (...) @Eccentricity()
%16 = tail call double (...) @LongitudePerihelion()
%17 = tail call double (...) @MeanObliquity()
%18 = load double, double* %0
%19 = load double, double* %1
%20 = tail call double @llvm.fabs.f64(double %19)
%21 = fcmp ogt double %20, 8.500000e+01
br i1 %21, label %22, label %74
22: ; preds = %3
%23 = call i32 @CelestialToEcliptical(double %18, double %19, double* %6, double* %7)
%24 = load double, double* %6
%25 = load double, double* %7
%26 = fsub double %14, %24
%27 = fmul double %26, 0x400921FB5443D6F4
%28 = fdiv double %27, 1.800000e+02
%29 = call double @cos(double %28)
%30 = fneg double %29
%31 = fsub double %16, %24
%32 = fmul double %31, 0x400921FB5443D6F4
%33 = fdiv double %32, 1.800000e+02
%34 = call double @cos(double %33)
%35 = call double @llvm.fmuladd.f64(double %15, double %34, double %30)
%36 = fmul double %25, 0x400921FB5443D6F4
%37 = fdiv double %36, 1.800000e+02
%38 = call double @cos(double %37)
%39 = fcmp olt double %38, 1.000000e-04
%40 = select i1 %39, double 1.000000e-04, double %38
%41 = fmul double %13, 0x40347EDA66128390
%42 = fdiv double %35, %40
%43 = fmul double %41, %42
%44 = fdiv double %43, 3.600000e+03
%45 = call double @sin(double %37)
%46 = fneg double %45
%47 = call double @sin(double %28)
%48 = call double @sin(double %33)
%49 = fneg double %15
%50 = call double @llvm.fmuladd.f64(double %49, double %48, double %47)
%51 = fmul double %41, %46
%52 = fmul double %51, %50
%53 = fdiv double %52, 3.600000e+03
%54 = fadd double %24, %44
%55 = fadd double %25, %53
%56 = call double @Map180(double %55)
%57 = fcmp ogt double %56, 9.000000e+01
%58 = load double, double* %5
%59 = fsub double 1.800000e+02, %58
%60 = fadd double %54, 1.800000e+02
%61 = select i1 %57, double %59, double %56
%62 = select i1 %57, double %60, double %54
%63 = fcmp olt double %61, -9.000000e+01
%64 = fsub double -1.800000e+02, %61
%65 = fadd double %62, 1.800000e+02
%66 = select i1 %63, double %64, double %61
%67 = select i1 %63, double %65, double %62
%68 = call double @Map360(double %67)
%69 = call i32 @EclipticalToCelestial(double %68, double %66, double* %4, double* %5)
%70 = load double, double* %4
%71 = load double, double* %5
%72 = insertelement <2 x double> poison, double %71, i64 0
%73 = insertelement <2 x double> %72, double %70, i64 1
br label %153
74: ; preds = %3
%75 = fmul double %18, 0x400921FB5443D6F4
%76 = fdiv double %75, 1.200000e+01
%77 = tail call double @cos(double %76)
%78 = fneg double %77
%79 = fmul double %14, 0x400921FB5443D6F4
%80 = fdiv double %79, 1.800000e+02
%81 = tail call double @cos(double %80)
%82 = fmul double %81, %78
%83 = fmul double %17, 0x400921FB5443D6F4
%84 = fdiv double %83, 1.800000e+02
%85 = tail call double @cos(double %84)
%86 = tail call double @sin(double %76)
%87 = tail call double @sin(double %80)
%88 = fneg double %86
%89 = fmul double %87, %88
%90 = tail call double @llvm.fmuladd.f64(double %82, double %85, double %89)
%91 = tail call double @cos(double %76)
%92 = fmul double %15, %91
%93 = fmul double %16, 0x400921FB5443D6F4
%94 = fdiv double %93, 1.800000e+02
%95 = tail call double @cos(double %94)
%96 = fmul double %92, %95
%97 = tail call double @cos(double %84)
%98 = tail call double @llvm.fmuladd.f64(double %96, double %97, double %90)
%99 = tail call double @sin(double %76)
%100 = fmul double %15, %99
%101 = tail call double @sin(double %94)
%102 = tail call double @llvm.fmuladd.f64(double %100, double %101, double %98)
%103 = fmul double %19, 0x400921FB5443D6F4
%104 = fdiv double %103, 1.800000e+02
%105 = tail call double @cos(double %104)
%106 = fdiv double %102, %105
%107 = fmul double %13, 0x40347EDA66128390
%108 = tail call double @cos(double %80)
%109 = fneg double %108
%110 = tail call double @cos(double %84)
%111 = fmul double %110, %109
%112 = tail call double @tan(double %84)
%113 = tail call double @cos(double %104)
%114 = tail call double @sin(double %76)
%115 = tail call double @sin(double %104)
%116 = fneg double %114
%117 = fmul double %115, %116
%118 = tail call double @llvm.fmuladd.f64(double %112, double %113, double %117)
%119 = tail call double @cos(double %76)
%120 = tail call double @sin(double %104)
%121 = tail call double @sin(double %80)
%122 = fneg double %119
%123 = fmul double %120, %122
%124 = fmul double %123, %121
%125 = tail call double @llvm.fmuladd.f64(double %111, double %118, double %124)
%126 = tail call double @cos(double %94)
%127 = fmul double %15, %126
%128 = tail call double @cos(double %84)
%129 = fmul double %127, %128
%130 = tail call double @tan(double %84)
%131 = tail call double @cos(double %104)
%132 = tail call double @sin(double %76)
%133 = tail call double @sin(double %104)
%134 = fneg double %132
%135 = fmul double %133, %134
%136 = tail call double @llvm.fmuladd.f64(double %130, double %131, double %135)
%137 = tail call double @llvm.fmuladd.f64(double %129, double %136, double %125)
%138 = tail call double @cos(double %76)
%139 = fmul double %15, %138
%140 = tail call double @sin(double %104)
%141 = fmul double %139, %140
%142 = tail call double @sin(double %94)
%143 = tail call double @llvm.fmuladd.f64(double %141, double %142, double %137)
%144 = insertelement <2 x double> poison, double %107, i64 0
%145 = shufflevector <2 x double> %144, <2 x double> poison, <2 x i32> zeroinitializer
%146 = insertelement <2 x double> poison, double %143, i64 0
%147 = insertelement <2 x double> %146, double %106, i64 1
%148 = fmul <2 x double> %145, %147
%149 = fdiv <2 x double> %148, <double 3.600000e+03, double 5.400000e+04>
%150 = insertelement <2 x double> poison, double %19, i64 0
%151 = insertelement <2 x double> %150, double %18, i64 1
%152 = fadd <2 x double> %151, %149
br label %153
153: ; preds = %74, %22
%154 = phi <2 x double> [ %152, %74 ], [ %73, %22 ]
%155 = extractelement <2 x double> %154, i64 1
store double %155, double* %0
%156 = extractelement <2 x double> %154, i64 0
store double %156, double* %1
ret void
}