#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 */
long double ln_range_degrees(long double);
double ln_get_mean_sidereal_time(double JD) {
  long double sidereal;
  long double T;
  T = (JD - 2451545.0) / 36525.0;
  sidereal = 280.46061837 + (360.98564736629 * (JD - 2451545.0)) +
             (0.000387933 * T * T) - (T * T * T / 38710000.0);
  sidereal = ln_range_degrees(sidereal);
  sidereal *= 24.0 / 360.0;
  return sidereal;
}


x86 assembly (clang, -O0):
<ln_get_mean_sidereal_time>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0xed6(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xed2(%rip),%xmm2
divsd  %xmm2,%xmm0
movsd  %xmm0,-0x38(%rbp)
fldl   -0x38(%rbp)
fstpt  -0x30(%rbp)
movsd  -0x8(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  0xeba(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xeb6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
fldl   -0x40(%rbp)
fldt   -0x30(%rbp)
fldl   0xea9(%rip)
fmul   %st(1),%st
fmul   %st(1),%st
faddp  %st,%st(2)
fld    %st(0)
fmul   %st(1),%st
fmulp  %st,%st(1)
flds   0xea7(%rip)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  -0x20(%rbp)
fldt   -0x20(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <ln_range_degrees@plt>
fstpt  -0x20(%rbp)
fldt   -0x20(%rbp)
fldl   0xe7f(%rip)
fmulp  %st,%st(1)
fstpt  -0x20(%rbp)
fldt   -0x20(%rbp)
fstpl  -0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ln_get_mean_sidereal_time>:
sub    $0x28,%rsp
addsd  0xee4(%rip),%xmm0
movapd %xmm0,%xmm1
divsd  0xee0(%rip),%xmm1
movsd  %xmm1,0x20(%rsp)
mulsd  0xeda(%rip),%xmm0
addsd  0xeda(%rip),%xmm0
fldl   0x20(%rsp)
movsd  %xmm0,0x18(%rsp)
fld    %st(0)
fmull  0xed0(%rip)
fmul   %st(1),%st
faddl  0x18(%rsp)
fld    %st(1)
fmul   %st(2),%st
fmulp  %st,%st(2)
fxch   %st(1)
fdivs  0xecc(%rip)
faddp  %st,%st(1)
fstpt  (%rsp)
call   1030 <ln_range_degrees@plt>
fmull  0xeb4(%rip)
fstpl  0x10(%rsp)
movsd  0x10(%rsp),%xmm0
add    $0x28,%rsp
ret

LLVM IR (-O0):
define double @ln_get_mean_sidereal_time(double %0) {
%2 = alloca double
%3 = alloca x86_fp80
%4 = alloca x86_fp80
store double %0, double* %2
%5 = load double, double* %2
%6 = fsub double %5, 0x4142B42C80000000
%7 = fdiv double %6, 3.652500e+04
%8 = fpext double %7 to x86_fp80
store x86_fp80 %8, x86_fp80* %4
%9 = load double, double* %2
%10 = fsub double %9, 0x4142B42C80000000
%11 = call double @llvm.fmuladd.f64(double 0x40768FC5362C39AA, double %10, double 0x4071875EB15E3164)
%12 = fpext double %11 to x86_fp80
%13 = load x86_fp80, x86_fp80* %4
%14 = fmul x86_fp80 0xK3FF3CB637C62625BF800, %13
%15 = load x86_fp80, x86_fp80* %4
%16 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %14, x86_fp80 %15, x86_fp80 %12)
%17 = load x86_fp80, x86_fp80* %4
%18 = load x86_fp80, x86_fp80* %4
%19 = fmul x86_fp80 %17, %18
%20 = load x86_fp80, x86_fp80* %4
%21 = fmul x86_fp80 %19, %20
%22 = fdiv x86_fp80 %21, 0xK401893AABC0000000000
%23 = fsub x86_fp80 %16, %22
store x86_fp80 %23, x86_fp80* %3
%24 = load x86_fp80, x86_fp80* %3
%25 = call x86_fp80 @ln_range_degrees(x86_fp80 %24)
store x86_fp80 %25, x86_fp80* %3
%26 = load x86_fp80, x86_fp80* %3
%27 = fmul x86_fp80 %26, 0xK3FFB8888888888888800
store x86_fp80 %27, x86_fp80* %3
%28 = load x86_fp80, x86_fp80* %3
%29 = fptrunc x86_fp80 %28 to double
ret double %29
}

LLVM IR (-O2):
define double @ln_get_mean_sidereal_time(double %0) {
%2 = fadd double %0, 0xC142B42C80000000
%3 = fdiv double %2, 3.652500e+04
%4 = fpext double %3 to x86_fp80
%5 = tail call double @llvm.fmuladd.f64(double %2, double 0x40768FC5362C39AA, double 0x4071875EB15E3164)
%6 = fpext double %5 to x86_fp80
%7 = fmul x86_fp80 %4, 0xK3FF3CB637C62625BF800
%8 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %7, x86_fp80 %4, x86_fp80 %6)
%9 = fmul x86_fp80 %4, %4
%10 = fmul x86_fp80 %9, %4
%11 = fdiv x86_fp80 %10, 0xK401893AABC0000000000
%12 = fsub x86_fp80 %8, %11
%13 = tail call x86_fp80 @ln_range_degrees(x86_fp80 %12)
%14 = fmul x86_fp80 %13, 0xK3FFB8888888888888800
%15 = fptrunc x86_fp80 %14 to double
ret double %15
}