void pluto_ell(double mj, double *ret) {
  double a = 39.543, e = 0.2490, inc0 = 17.140, Om0 = 110.307, omeg0 = 113.768,
         mjp = 2448045.539 - 2415020.0, mjeq = (2451545.0 - 2415020.0),
         n = 144.9600 / 36525.;
  double inc, Om, omeg;
  double ma, ea, nu;
  double lo, slo, clo;
  reduce_elements(mjeq, mj, ((inc0)*3.141592653589793 / 180.),
                  ((omeg0)*3.141592653589793 / 180.),
                  ((Om0)*3.141592653589793 / 180.), &inc, &omeg, &Om);
  ma = (((mj - mjp) * n) * 3.141592653589793 / 180.);
  anomaly(ma, e, &nu, &ea);
  ret[2] = a * (1.0 - e * cos(ea));
  lo = omeg + nu;
  slo = sin(lo);
  clo = cos(lo);
  ret[1] = asin(slo * sin(inc));
  ret[0] = atan2(slo * cos(inc), clo) + Om;
}


x86 assembly (clang, -O0):
<pluto_ell>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
movsd  %xmm0,-0x8(%rbp)
mov    %rdi,-0x10(%rbp)
movsd  0xed4(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xebf(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xeaa(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe95(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xe80(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe6b(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe56(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe41(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
movsd  0xe22(%rip),%xmm2
mulsd  -0x28(%rbp),%xmm2
movsd  0xe0d(%rip),%xmm3
divsd  %xmm3,%xmm2
movsd  0xe09(%rip),%xmm3
mulsd  -0x38(%rbp),%xmm3
movsd  0xdf4(%rip),%xmm4
divsd  %xmm4,%xmm3
movsd  0xdf0(%rip),%xmm4
mulsd  -0x30(%rbp),%xmm4
movsd  0xddb(%rip),%xmm5
divsd  %xmm5,%xmm4
lea    -0x58(%rbp),%rdi
lea    -0x68(%rbp),%rsi
lea    -0x60(%rbp),%rdx
mov    $0x5,%al
call   1040 <reduce_elements@plt>
movsd  -0x8(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  0xdb5(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xda1(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
lea    -0x80(%rbp),%rdi
lea    -0x78(%rbp),%rsi
mov    $0x2,%al
call   1070 <anomaly@plt>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
call   1080 <cos@plt>
movsd  -0xb8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xb0(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0xd1d(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x68(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1050 <sin@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1080 <cos@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
call   1060 <asin@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
call   1080 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  -0x98(%rbp),%xmm1
ff
call   1030 <atan2@plt>
addsd  -0x60(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pluto_ell>:
push   %rbx
sub    $0x40,%rsp
mov    %rdi,%rbx
movaps %xmm0,%xmm1
movsd  %xmm0,0x8(%rsp)
movsd  0xe87(%rip),%xmm0
movsd  0xe87(%rip),%xmm2
movsd  0xe87(%rip),%xmm3
movsd  0xe87(%rip),%xmm4
lea    0x18(%rsp),%rdi
lea    0x30(%rsp),%rsi
lea    0x38(%rsp),%rdx
mov    $0x5,%al
call   1040 <reduce_elements@plt>
movsd  0x8(%rsp),%xmm0
addsd  0xe6b(%rip),%xmm0
mulsd  0xe6b(%rip),%xmm0
mulsd  0xe6b(%rip),%xmm0
divsd  0xe6b(%rip),%xmm0
movsd  0xe6b(%rip),%xmm1
lea    0x20(%rsp),%rdi
lea    0x28(%rsp),%rsi
mov    $0x2,%al
call   1070 <anomaly@plt>
movsd  0x28(%rsp),%xmm0
call   1080 <cos@plt>
mulsd  0xe4f(%rip),%xmm0
addsd  0xe4f(%rip),%xmm0
mulsd  0xe4f(%rip),%xmm0
movsd  %xmm0,0x10(%rbx)
movsd  0x30(%rsp),%xmm0
addsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
call   1050 <sin@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
call   1080 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x18(%rsp),%xmm0
call   1050 <sin@plt>
mulsd  0x8(%rsp),%xmm0
call   1060 <asin@plt>
movsd  %xmm0,0x8(%rbx)
movsd  0x18(%rsp),%xmm0
call   1080 <cos@plt>
mulsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
call   1030 <atan2@plt>
addsd  0x38(%rsp),%xmm0
movsd  %xmm0,(%rbx)
add    $0x40,%rsp
pop    %rbx
ret

LLVM IR (-O0):
define void @pluto_ell(double %0, double* %1) {
%3 = alloca double
%4 = alloca double*
%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
store double %0, double* %3
store double* %1, double** %4
store double 3.954300e+01, double* %5
store double 2.490000e-01, double* %6
store double 1.714000e+01, double* %7
store double 1.103070e+02, double* %8
store double 1.137680e+02, double* %9
store double 0x40E020313F7CED80, double* %10
store double 3.652500e+04, double* %11
store double 0x3F7041938D110021, double* %12
%22 = load double, double* %11
%23 = load double, double* %3
%24 = load double, double* %7
%25 = fmul double %24, 0x400921FB54442D18
%26 = fdiv double %25, 1.800000e+02
%27 = load double, double* %9
%28 = fmul double %27, 0x400921FB54442D18
%29 = fdiv double %28, 1.800000e+02
%30 = load double, double* %8
%31 = fmul double %30, 0x400921FB54442D18
%32 = fdiv double %31, 1.800000e+02
%33 = call i32 (double, double, double, double, double, double*, double*, double*, ...) bitcast (i32 (...)* @reduce_elements to i32 (double, double, double, double, double, double*, double*, double*, ...)*)(double %22, double %23, double %26, double %29, double %32, double* %13, double* %15, double* %14)
%34 = load double, double* %3
%35 = load double, double* %10
%36 = fsub double %34, %35
%37 = load double, double* %12
%38 = fmul double %36, %37
%39 = fmul double %38, 0x400921FB54442D18
%40 = fdiv double %39, 1.800000e+02
store double %40, double* %16
%41 = load double, double* %16
%42 = load double, double* %6
%43 = call i32 (double, double, double*, double*, ...) bitcast (i32 (...)* @anomaly to i32 (double, double, double*, double*, ...)*)(double %41, double %42, double* %18, double* %17)
%44 = load double, double* %5
%45 = load double, double* %6
%46 = load double, double* %17
%47 = call double @cos(double %46)
%48 = fneg double %45
%49 = call double @llvm.fmuladd.f64(double %48, double %47, double 1.000000e+00)
%50 = fmul double %44, %49
%51 = load double*, double** %4
%52 = getelementptr inbounds double, double* %51, i64 2
store double %50, double* %52
%53 = load double, double* %15
%54 = load double, double* %18
%55 = fadd double %53, %54
store double %55, double* %19
%56 = load double, double* %19
%57 = call double @sin(double %56)
store double %57, double* %20
%58 = load double, double* %19
%59 = call double @cos(double %58)
store double %59, double* %21
%60 = load double, double* %20
%61 = load double, double* %13
%62 = call double @sin(double %61)
%63 = fmul double %60, %62
%64 = call double @asin(double %63)
%65 = load double*, double** %4
%66 = getelementptr inbounds double, double* %65, i64 1
store double %64, double* %66
%67 = load double, double* %20
%68 = load double, double* %13
%69 = call double @cos(double %68)
%70 = fmul double %67, %69
%71 = load double, double* %21
%72 = call double @atan2(double %70, double %71)
%73 = load double, double* %14
%74 = fadd double %72, %73
%75 = load double*, double** %4
%76 = getelementptr inbounds double, double* %75, i64 0
store double %74, double* %76
ret void
}

LLVM IR (-O2):
define void @pluto_ell(double %0, double* nocapture writeonly %1) {
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = bitcast double* %3 to i8*
%9 = bitcast double* %4 to i8*
%10 = bitcast double* %5 to i8*
%11 = bitcast double* %6 to i8*
%12 = bitcast double* %7 to i8*
%13 = call i32 (double, double, double, double, double, double*, double*, double*, ...) bitcast (i32 (...)* @reduce_elements to i32 (double, double, double, double, double, double*, double*, double*, ...)*)(double 3.652500e+04, double %0, double 0x3FD32543AAB02E30, double 0x3FFFC51FF5FD2936, double 0x3FFECDB3D754AF73, double* %3, double* %5, double* %4)
%14 = fadd double %0, 0xC0E020313F7CED80
%15 = fmul double %14, 0x3F7041938D110021
%16 = fmul double %15, 0x400921FB54442D18
%17 = fdiv double %16, 1.800000e+02
%18 = call i32 (double, double, double*, double*, ...) bitcast (i32 (...)* @anomaly to i32 (double, double, double*, double*, ...)*)(double %17, double 2.490000e-01, double* %7, double* %6)
%19 = load double, double* %6
%20 = call double @cos(double %19)
%21 = call double @llvm.fmuladd.f64(double %20, double -2.490000e-01, double 1.000000e+00)
%22 = fmul double %21, 3.954300e+01
%23 = getelementptr inbounds double, double* %1, i64 2
store double %22, double* %23
%24 = load double, double* %5
%25 = load double, double* %7
%26 = fadd double %24, %25
%27 = call double @sin(double %26)
%28 = call double @cos(double %26)
%29 = load double, double* %3
%30 = call double @sin(double %29)
%31 = fmul double %27, %30
%32 = call double @asin(double %31)
%33 = getelementptr inbounds double, double* %1, i64 1
store double %32, double* %33
%34 = load double, double* %3
%35 = call double @cos(double %34)
%36 = fmul double %27, %35
%37 = call double @atan2(double %36, double %28)
%38 = load double, double* %4
%39 = fadd double %37, %38
store double %39, double* %1
ret void
}