// File: jkingan[P]ladyheather/heathgps.cpp
// Function: lla_to_ups(double, double)
void lla_to_ups(double lat, double lon)
{
double c0;
double tz;
double R;
double dlat;

   // convert lat/lon to Universal Polar Stereographic coords

   dlat = lat;

   lat = fabs(lat);  // !!!!!!! is this correct?

   c0 = (1.0-WGS84_E) / (1.0+WGS84_E);
   c0 = pow(c0, WGS84_E/2.0);
   c0 *= ((2.0*WGS84_A) / sqrt(1.0-eccSquared));

   tz = (1.0 + WGS84_E*sin(lat)) / (1.0 - WGS84_E*sin(lat));
   tz = pow(tz, WGS84_E/2.0);
   tz *= tan(PI/4.0 - lat/2.0);

   R = 0.994 * c0 * tz;

   if(dlat >= 0.0) UTMNorthing = 2000000.0 - R*cos(lon);
   else            UTMNorthing = 2000000.0 + R*cos(lon);

   UTMEasting = 2000000.0 + R*sin(lon);
//sprintf(plot_title, "c0:%f tz:%f R:%f N:%f E:%f", c0,tz,R, UTMNorthing,UTMEasting);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movsd %xmm0, -0x8(%rbp)
movsd %xmm1, -0x10(%rbp)
movsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x8(%rbp), %xmm0
movaps 0x7ade8(%rip), %xmm1    # 0x16f290
pand %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x8ed87(%rip), %xmm0    # 0x183240
movsd %xmm0, -0x18(%rbp)
movsd -0x18(%rbp), %xmm0
movsd 0x8ed55(%rip), %xmm1    # 0x183220
callq 0x9690
movsd %xmm0, -0x18(%rbp)
movsd 0x8e663(%rip), %xmm0    # 0x182b40
callq 0x9280
movaps %xmm0, %xmm1
movsd 0x8ed4b(%rip), %xmm0    # 0x183238
divsd %xmm1, %xmm0
mulsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x9080
movsd 0x8ed23(%rip), %xmm1    # 0x183230
mulsd %xmm1, %xmm0
movsd 0x7ab4f(%rip), %xmm1    # 0x16f068
addsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x9080
movaps %xmm0, %xmm1
movsd -0x38(%rbp), %xmm0
movsd 0x8ecec(%rip), %xmm2    # 0x183228
mulsd %xmm2, %xmm1
movsd 0x7ab20(%rip), %xmm2    # 0x16f068
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x20(%rbp), %xmm0
movsd 0x8ecbe(%rip), %xmm1    # 0x183220
callq 0x9690
movsd %xmm0, -0x20(%rbp)
movsd -0x8(%rbp), %xmm1
movsd 0x7abd7(%rip), %xmm0    # 0x16f150
divsd %xmm0, %xmm1
movsd 0x8ec93(%rip), %xmm0    # 0x183218
subsd %xmm1, %xmm0
callq 0x91b0
mulsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd 0x8ec70(%rip), %xmm0    # 0x183210
mulsd -0x18(%rbp), %xmm0
mulsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x30(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0xf460a
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x10(%rbp), %xmm0
callq 0x96f0
movaps %xmm0, %xmm1
movsd -0x40(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm1, %xmm0
movsd 0x8ec4c(%rip), %xmm1    # 0x183248
addsd %xmm1, %xmm0
movsd %xmm0, 0x2e1158(%rip)   # 0x3d5760
jmp 0xf463e
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x10(%rbp), %xmm0
callq 0x96f0
movaps %xmm0, %xmm1
movsd -0x48(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd 0x8ec16(%rip), %xmm1    # 0x183248
addsd %xmm1, %xmm0
movsd %xmm0, 0x2e1122(%rip)   # 0x3d5760
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x10(%rbp), %xmm0
callq 0x9080
movaps %xmm0, %xmm1
movsd -0x50(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd 0x8ebe2(%rip), %xmm1    # 0x183248
addsd %xmm1, %xmm0
movsd %xmm0, 0x2e10f6(%rip)   # 0x3d5768
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax,%rax)