// File: jkingan[P]ladyheather/heathmsc.cpp
// Function: eot(double)
double eot(double jd)
{
double t;
double lon_ofs;
double m;
double e;

   // calculate the equation of time
   // adapted from code by Mike Chirico and NOAA

   t = jd;
///t += jtime(3,12,30, 0.0);       // !!!!! fudge factor to get closer to SPA results
   t += jtime(2,36,00, 0.0);       // !!!!! fudge factor to get closer to SPA results
   t = (t - JD2000) / 36525.0;

   double epsilon = calcObliquityCorrection(t);               
   double l0 = 280.46646 + t * (36000.76983 + 0.0003032 * t);
   while(l0 > 360.0) l0 -= 360.0;
   while(l0 < 0.0) l0 += 360.0;
   e = orbit_eccentricity(jd);
   m = (357.52772 + (35999.05034*t) - (0.0001603*t*t) - (t*t*t / 300000.0));

   double y = tan((epsilon*PI/180.0)/2.0);
   y *= y;

   double sinm   = sin(m * PI/180.0);
   double sin2m  = sin(2.0 * m*PI/180.0);
   double sin2l0 = sin(2.0 * l0*PI/180.0);
   double cos2l0 = cos(2.0 * l0*PI/180.0);
   double sin4l0 = sin(4.0 * l0*PI/180.0);
   eot_ofs = y * sin2l0 - 2.0 * e * sinm + 4.0 * e * y * sinm * cos2l0
           - 0.5 * y * y * sin4l0 - 1.25 * e * e * sin2m;

   eot_ofs = (eot_ofs * 180.0 / PI) * 4.0;
///eot_ofs -= 0.008343;  // more fudge factor to match SPA results
   lon_ofs = (-lon*RAD_TO_DEG*4.0); // + (time_zone()*60.0);

   return (eot_ofs - lon_ofs);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movl $0x2, %edi
movl $0x24, %esi
xorl %edx, %edx
xorps %xmm0, %xmm0
callq 0x122210
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x59e06(%rip), %xmm1    # 0x18e388
subsd %xmm1, %xmm0
movsd 0x59df2(%rip), %xmm1    # 0x18e380
divsd %xmm1, %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x10(%rbp), %xmm0
callq 0x134410
movsd %xmm0, -0x30(%rbp)
movsd -0x10(%rbp), %xmm0
movsd -0x10(%rbp), %xmm1
movsd 0x5a020(%rip), %xmm2    # 0x18e5d8
mulsd %xmm2, %xmm1
movsd 0x5a01c(%rip), %xmm2    # 0x18e5e0
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd 0x59ffc(%rip), %xmm1    # 0x18e5d0
addsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x38(%rbp), %xmm0
movsd 0x4e546(%rip), %xmm1    # 0x182b30
ucomisd %xmm1, %xmm0
jbe 0x134608
movsd -0x38(%rbp), %xmm0
movsd 0x4e533(%rip), %xmm1    # 0x182b30
subsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0x1345dd
jmp 0x13460a
xorps %xmm0, %xmm0
ucomisd -0x38(%rbp), %xmm0
jbe 0x134628
movsd 0x4e514(%rip), %xmm0    # 0x182b30
addsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0x13460a
movsd -0x8(%rbp), %xmm0
callq 0x134200
movsd %xmm0, -0x28(%rbp)
movsd -0x10(%rbp), %xmm1
movsd 0x59d2c(%rip), %xmm0    # 0x18e370
mulsd %xmm0, %xmm1
movsd 0x59d28(%rip), %xmm0    # 0x18e378
addsd %xmm0, %xmm1
movsd 0x59f94(%rip), %xmm0    # 0x18e5f0
mulsd -0x10(%rbp), %xmm0
movsd -0x10(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
mulsd -0x10(%rbp), %xmm1
mulsd -0x10(%rbp), %xmm1
movsd 0x59cc4(%rip), %xmm2    # 0x18e360
divsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movsd 0x3cf17(%rip), %xmm0    # 0x1715c8
mulsd -0x30(%rbp), %xmm0
movsd 0x3a9ba(%rip), %xmm1    # 0x16f078
divsd %xmm1, %xmm0
movsd 0x3aa86(%rip), %xmm1    # 0x16f150
divsd %xmm1, %xmm0
callq 0x91b0
movsd %xmm0, -0x40(%rbp)
movsd -0x40(%rbp), %xmm0
mulsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd 0x3ced9(%rip), %xmm0    # 0x1715c8
mulsd -0x20(%rbp), %xmm0
movsd 0x3a97c(%rip), %xmm1    # 0x16f078
divsd %xmm1, %xmm0
callq 0x9080
movsd %xmm0, -0x48(%rbp)
movsd 0x3aa3e(%rip), %xmm0    # 0x16f150
mulsd -0x20(%rbp), %xmm0
movsd 0x3cea9(%rip), %xmm1    # 0x1715c8
mulsd %xmm1, %xmm0
movsd 0x3a94d(%rip), %xmm1    # 0x16f078
divsd %xmm1, %xmm0
callq 0x9080
movsd %xmm0, -0x50(%rbp)
movsd 0x3aa0f(%rip), %xmm0    # 0x16f150
mulsd -0x38(%rbp), %xmm0
movsd 0x3ce7a(%rip), %xmm1    # 0x1715c8
mulsd %xmm1, %xmm0
movsd 0x3a91e(%rip), %xmm1    # 0x16f078
divsd %xmm1, %xmm0
callq 0x9080
movsd %xmm0, -0x58(%rbp)
movsd 0x3a9e0(%rip), %xmm0    # 0x16f150
mulsd -0x38(%rbp), %xmm0
movsd 0x3ce4b(%rip), %xmm1    # 0x1715c8
mulsd %xmm1, %xmm0
movsd 0x3a8ef(%rip), %xmm1    # 0x16f078
divsd %xmm1, %xmm0
callq 0x96f0
movsd %xmm0, -0x60(%rbp)
movsd 0x3cf31(%rip), %xmm0    # 0x1716d0
mulsd -0x38(%rbp), %xmm0
movsd 0x3ce1c(%rip), %xmm1    # 0x1715c8
mulsd %xmm1, %xmm0
movsd 0x3a8c0(%rip), %xmm1    # 0x16f078
divsd %xmm1, %xmm0
callq 0x9080
movsd %xmm0, -0x68(%rbp)
movsd -0x40(%rbp), %xmm1
movsd -0x58(%rbp), %xmm2
movsd 0x3a978(%rip), %xmm0    # 0x16f150
mulsd -0x28(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x3cec7(%rip), %xmm0    # 0x1716d0
mulsd -0x28(%rbp), %xmm0
mulsd -0x40(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
movsd -0x60(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0x3a863(%rip), %xmm1    # 0x16f090
mulsd -0x40(%rbp), %xmm1
mulsd -0x40(%rbp), %xmm1
movsd -0x68(%rbp), %xmm2
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x59d85(%rip), %xmm0    # 0x18e5e8
mulsd -0x28(%rbp), %xmm0
mulsd -0x28(%rbp), %xmm0
movsd -0x50(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
leaq 0x237f08(%rip), %rax    # 0x36c7a0
movsd %xmm0, (%rax)
movsd 0x3a7d4(%rip), %xmm0    # 0x16f078
leaq 0x237ef5(%rip), %rax    # 0x36c7a0
mulsd (%rax), %xmm0
movsd 0x3cd11(%rip), %xmm1    # 0x1715c8
divsd %xmm1, %xmm0
movsd 0x3ce0d(%rip), %xmm1    # 0x1716d0
mulsd %xmm1, %xmm0
leaq 0x237ed2(%rip), %rax    # 0x36c7a0
movsd %xmm0, (%rax)
leaq 0x2378df(%rip), %rax    # 0x36c1b8
movsd (%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x3a884(%rip), %xmm1    # 0x16f180
mulsd %xmm1, %xmm0
movsd 0x3cdc8(%rip), %xmm1    # 0x1716d0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
leaq 0x237e88(%rip), %rax    # 0x36c7a0
movsd (%rax), %xmm0
subsd -0x18(%rbp), %xmm0
addq $0x70, %rsp
popq %rbp
retq
nopw (%rax,%rax)