#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 */
double GPS_Math_Deg_To_Rad(double);
double GPS_Math_Rad_To_Deg(double);
double atan(double);
double atan2(double, double);
double cos(double);
double fabs(double);
double log(double);
double pow(double, double);
double sin(double);
double tan(double);
void GPS_Math_LambertCC_EN_To_LatLon(double E, double N, double *phi,
                                     double *lambda, double phi1, double phi2,
                                     double phi0, double M0, double E0,
                                     double N0, double a, double b) {
  double po2;
  double po4;
  double a2;
  double b2;
  double phi0s;
  double e;
  double esq;
  double ed2;
  double ess;
  double t0;
  double t1;
  double t2;
  double m1;
  double m2;
  double phi1s;
  double phi1c;
  double phi2s;
  double phi2c;
  double n;
  double F;
  double Fa;
  double rho;
  double rho0;
  double phis;
  double t;
  double theta;
  double dx;
  double dy;
  double rhom;
  double lat;
  double tlat;
  double tol;
  phi0 = GPS_Math_Deg_To_Rad(phi0);
  phi1 = GPS_Math_Deg_To_Rad(phi1);
  phi2 = GPS_Math_Deg_To_Rad(phi2);
  M0 = GPS_Math_Deg_To_Rad(M0);
  po2 = (double)3.141592653589 / (double)2.0;
  po4 = (double)3.141592653589 / (double)4.0;
  a2 = a * a;
  b2 = b * b;
  esq = (a2 - b2) / a2;
  e = pow(esq, (double)0.5);
  ed2 = e / (double)2.0;
  phi0s = sin(phi0);
  ess = e * phi0s;
  t0 = tan(po4 - phi0 / (double)2.0) /
       pow(((double)1.0 - ess) / ((double)1.0 + ess), ed2);
  phi1s = sin(phi1);
  phi1c = cos(phi1);
  ess = e * phi1s;
  m1 = phi1c / pow(((double)1.0 - ess * ess), (double)0.5);
  t1 = tan(po4 - phi1 / (double)2.0) /
       pow(((double)1.0 - ess) / ((double)1.0 + ess), ed2);
  if (fabs(phi1 - phi2) > 1.0e-10) {
    phi2s = sin(phi2);
    phi2c = cos(phi2);
    ess = e * phi2s;
    m2 = phi2c / pow(((double)1.0 - ess * ess), (double)0.5);
    t2 = tan(po4 - phi2 / (double)2.0) /
         pow(((double)1.0 - ess) / ((double)1.0 + ess), ed2);
    n = log(m1 / m2) / log(t1 / t2);
  } else
    n = phi1s;
  F = m1 / (n * pow(t1, n));
  Fa = F * a;
  rho0 = pow(t0, n) * Fa;
  tlat = theta = (double)0.0;
  tol = (double)4.85e-10;
  dx = E - E0;
  dy = N - N0;
  rhom = rho0 - dy;
  rho = pow(dx * dx + rhom * rhom, (double)0.5);
  if (n < 0.0) {
    rhom *= (double)-1.0;
    dy *= (double)-1.0;
    dx *= (double)-1.0;
    rho *= (double)-1.0;
  }
  if (rho) {
    theta = atan2(dx, rhom);
    t = pow(rho / Fa, (double)1.0 / n);
    lat = po2 - (double)2.0 * atan(t);
    while (fabs(lat - tlat) > tol) {
      tlat = lat;
      phis = sin(lat);
      ess = e * phis;
      lat = po2 - (double)2.0 *
                      atan(t * pow(((double)1.0 - ess) / ((double)1.0 + ess),
                                   e / (double)2.0));
    }
    *phi = lat;
    *lambda = theta / n + M0;
    if (*phi > po2)
      *phi = po2;
    else if (*phi < -po2)
      *phi = -po2;
    if (*lambda > 3.141592653589)
      *lambda -= (double)3.141592653589 * (double)2.0;
    if (*lambda < -3.141592653589)
      *lambda += (double)3.141592653589 * (double)2.0;
    if (*lambda > 3.141592653589)
      *lambda = 3.141592653589;
    else if (*lambda < -3.141592653589)
      *lambda = -3.141592653589;
  } else {
    if (n > 0.0)
      *phi = po2;
    else
      *phi = -po2;
    *lambda = M0;
  }
  *lambda = GPS_Math_Rad_To_Deg(*lambda);
  *phi = GPS_Math_Rad_To_Deg(*phi);
  return;
}


x86 assembly (clang, -O0):
<GPS_Math_LambertCC_EN_To_LatLon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1b0,%rsp
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x28(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x40(%rbp),%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  0xe0d(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xdf8(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0x10(%rbp),%xmm0
mulsd  0x10(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0x18(%rbp),%xmm0
mulsd  0x18(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  0xda6(%rip),%xmm1
call   10b0 <pow@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  0xd87(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x78(%rbp)
movsd  -0x80(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  0xd48(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
call   1070 <tan@plt>
movsd  %xmm0,-0x168(%rbp)
ff
movsd  0xd23(%rip),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  0xd13(%rip),%xmm1
addsd  -0x98(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  -0x90(%rbp),%xmm1
ff
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x168(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1090 <cos@plt>
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc67(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xc6b(%rip),%xmm1
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x160(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  0xc35(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
call   1070 <tan@plt>
movsd  %xmm0,-0x158(%rbp)
ff
movsd  0xc10(%rip),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  0xc00(%rip),%xmm1
addsd  -0x98(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  -0x90(%rbp),%xmm1
ff
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x158(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movaps 0xc17(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xbab(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    15c0 <GPS_Math_LambertCC_EN_To_LatLon+0x430>
movsd  -0x30(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1090 <cos@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xb2d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xb31(%rip),%xmm1
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x180(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  0xafb(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
call   1070 <tan@plt>
movsd  %xmm0,-0x178(%rbp)
ff
movsd  0xad6(%rip),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  0xac6(%rip),%xmm1
addsd  -0x98(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  -0x90(%rbp),%xmm1
ff
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x178(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
divsd  -0xc0(%rbp),%xmm0
ff
call   10a0 <log@plt>
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0xb0(%rbp),%xmm0
ff
call   10a0 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x170(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
jmp    15d0 <GPS_Math_LambertCC_EN_To_LatLon+0x440>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xe8(%rbp),%xmm1
ff
call   10b0 <pow@plt>
movsd  -0x190(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x188(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  0x10(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xe8(%rbp),%xmm1
ff
call   10b0 <pow@plt>
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  0x9b0(%rip),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
subsd  -0x130(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movsd  -0x128(%rbp),%xmm2
ff
movsd  -0x138(%rbp),%xmm1
ff
mulsd  -0x138(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x924(%rip),%xmm1
call   10b0 <pow@plt>
movsd  %xmm0,-0x100(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0xe8(%rbp),%xmm0
ff
jbe    1772 <GPS_Math_LambertCC_EN_To_LatLon+0x5e2>
movsd  0x91e(%rip),%xmm0
mulsd  -0x138(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  0x906(%rip),%xmm0
mulsd  -0x130(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  0x8ee(%rip),%xmm0
mulsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  0x8d6(%rip),%xmm0
mulsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1792 <GPS_Math_LambertCC_EN_To_LatLon+0x602>
jp     1792 <GPS_Math_LambertCC_EN_To_LatLon+0x602>
jmp    1a63 <GPS_Math_LambertCC_EN_To_LatLon+0x8d3>
movsd  -0x128(%rbp),%xmm0
ff
movsd  -0x138(%rbp),%xmm1
ff
call   1030 <atan2@plt>
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
divsd  -0xf8(%rbp),%xmm0
ff
movsd  0x841(%rip),%xmm1
divsd  -0xe8(%rbp),%xmm1
ff
call   10b0 <pow@plt>
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
call   1060 <atan@plt>
movaps %xmm0,%xmm1
movsd  -0x198(%rbp),%xmm0
addsd  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
subsd  -0x148(%rbp),%xmm0
ff
movaps 0x838(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd -0x150(%rbp),%xmm0
ff
jbe    18ff <GPS_Math_LambertCC_EN_To_LatLon+0x76f>
movsd  -0x140(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
call   1050 <sin@plt>
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  0x76f(%rip),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  0x75f(%rip),%xmm1
addsd  -0x98(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  -0x80(%rbp),%xmm1
movsd  0x74e(%rip),%xmm2
divsd  %xmm2,%xmm1
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1a8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
call   1060 <atan@plt>
movaps %xmm0,%xmm1
movsd  -0x1a0(%rbp),%xmm0
ff
addsd  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
jmp    1811 <GPS_Math_LambertCC_EN_To_LatLon+0x681>
movsd  -0x140(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x120(%rbp),%xmm0
ff
divsd  -0xe8(%rbp),%xmm0
ff
addsd  -0x40(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    1951 <GPS_Math_LambertCC_EN_To_LatLon+0x7c1>
movsd  -0x58(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19a8 <GPS_Math_LambertCC_EN_To_LatLon+0x818>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
ucomisd %xmm1,%xmm0
jbe    19a3 <GPS_Math_LambertCC_EN_To_LatLon+0x813>
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19a8 <GPS_Math_LambertCC_EN_To_LatLon+0x818>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x688(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    19da <GPS_Math_LambertCC_EN_To_LatLon+0x84a>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x676(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x66a(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    1a04 <GPS_Math_LambertCC_EN_To_LatLon+0x874>
mov    -0x20(%rbp),%rax
movsd  0x64c(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x62c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1a33 <GPS_Math_LambertCC_EN_To_LatLon+0x8a3>
mov    -0x20(%rbp),%rax
movsd  0x616(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1a5e <GPS_Math_LambertCC_EN_To_LatLon+0x8ce>
mov    -0x20(%rbp),%rax
movsd  0x611(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    1a59 <GPS_Math_LambertCC_EN_To_LatLon+0x8c9>
mov    -0x20(%rbp),%rax
movsd  0x5fb(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1a5e <GPS_Math_LambertCC_EN_To_LatLon+0x8ce>
jmp    1abb <GPS_Math_LambertCC_EN_To_LatLon+0x92b>
movsd  -0xe8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1a8a <GPS_Math_LambertCC_EN_To_LatLon+0x8fa>
movsd  -0x58(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1aae <GPS_Math_LambertCC_EN_To_LatLon+0x91e>
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x40(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1080 <GPS_Math_Rad_To_Deg@plt>
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
call   1080 <GPS_Math_Rad_To_Deg@plt>
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x1b0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPS_Math_LambertCC_EN_To_LatLon>:
push   %r14
push   %rbx
sub    $0xa8,%rsp
movsd  %xmm7,0x88(%rsp)
movsd  %xmm6,0x80(%rsp)
movsd  %xmm5,0x38(%rsp)
movsd  %xmm3,0x30(%rsp)
movsd  %xmm2,0x10(%rsp)
mov    %rsi,%r14
mov    %rdi,%rbx
movsd  %xmm1,0x78(%rsp)
movaps %xmm0,0x60(%rsp)
movaps %xmm4,%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x40(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movaps %xmm0,0x10(%rsp)
movsd  0x30(%rsp),%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0x38(%rsp),%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movaps %xmm0,0x90(%rsp)
movsd  0xc0(%rsp),%xmm1
mulsd  %xmm1,%xmm1
movsd  0xc8(%rsp),%xmm2
mulsd  %xmm2,%xmm2
movapd %xmm1,%xmm0
subsd  %xmm2,%xmm0
divsd  %xmm1,%xmm0
movsd  0xdc1(%rip),%xmm1
call   10b0 <pow@plt>
movsd  %xmm0,0x38(%rsp)
movapd %xmm0,%xmm1
mulsd  0xdaa(%rip),%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0x40(%rsp),%xmm0
call   1050 <sin@plt>
mulsd  0x38(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x40(%rsp),%xmm1
mulsd  0xd7f(%rip),%xmm1
movsd  0xd7f(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1070 <tan@plt>
movsd  %xmm0,0x58(%rsp)
movsd  0xd70(%rip),%xmm1
movapd %xmm1,%xmm0
movsd  0x8(%rsp),%xmm2
subsd  %xmm2,%xmm0
addsd  %xmm1,%xmm2
divsd  %xmm2,%xmm0
movsd  0x30(%rsp),%xmm1
call   10b0 <pow@plt>
movsd  0x58(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x58(%rsp)
movaps 0x10(%rsp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,0x8(%rsp)
movaps 0x10(%rsp),%xmm0
call   1090 <cos@plt>
movsd  %xmm0,0x40(%rsp)
movsd  0x8(%rsp),%xmm1
mulsd  0x38(%rsp),%xmm1
movsd  %xmm1,0x70(%rsp)
mulsd  %xmm1,%xmm1
movsd  0xd01(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xce5(%rip),%xmm1
call   10b0 <pow@plt>
movsd  0x40(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x40(%rsp)
movapd 0x10(%rsp),%xmm1
mulsd  0xcc2(%rip),%xmm1
movsd  0xcc2(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1070 <tan@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0xcb3(%rip),%xmm1
movapd %xmm1,%xmm0
movsd  0x70(%rsp),%xmm2
subsd  %xmm2,%xmm0
addsd  %xmm1,%xmm2
divsd  %xmm2,%xmm0
movsd  0x30(%rsp),%xmm1
call   10b0 <pow@plt>
movsd  0x8(%rsp),%xmm1
movsd  0x20(%rsp),%xmm4
movapd %xmm4,%xmm2
movapd 0x10(%rsp),%xmm3
subsd  %xmm4,%xmm3
andpd  0xcc0(%rip),%xmm3
movsd  0x28(%rsp),%xmm4
divsd  %xmm0,%xmm4
movsd  %xmm4,0x28(%rsp)
ucomisd 0xc60(%rip),%xmm3
jbe    14ad <GPS_Math_LambertCC_EN_To_LatLon+0x31d>
movapd %xmm2,%xmm0
call   1050 <sin@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x20(%rsp),%xmm0
call   1090 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm1
mulsd  0x38(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
mulsd  %xmm1,%xmm1
movsd  0xc14(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xbf8(%rip),%xmm1
call   10b0 <pow@plt>
movsd  0x10(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0x20(%rsp),%xmm1
mulsd  0xbd5(%rip),%xmm1
movsd  0xbd5(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1070 <tan@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0xbc6(%rip),%xmm2
movapd %xmm2,%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm1,%xmm0
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  0x30(%rsp),%xmm1
call   10b0 <pow@plt>
movsd  0x20(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x40(%rsp),%xmm0
divsd  0x10(%rsp),%xmm0
call   10a0 <log@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x28(%rsp),%xmm0
divsd  0x20(%rsp),%xmm0
call   10a0 <log@plt>
movsd  0x8(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0x28(%rsp),%xmm0
call   10b0 <pow@plt>
mulsd  0x8(%rsp),%xmm0
movsd  0x40(%rsp),%xmm1
divsd  %xmm0,%xmm1
mulsd  0xc0(%rsp),%xmm1
movsd  %xmm1,0x40(%rsp)
movsd  0x58(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
call   10b0 <pow@plt>
movapd %xmm0,%xmm2
mulsd  0x40(%rsp),%xmm2
movapd 0x60(%rsp),%xmm0
subsd  0x80(%rsp),%xmm0
movsd  0x78(%rsp),%xmm1
subsd  0x88(%rsp),%xmm1
subsd  %xmm1,%xmm2
movapd %xmm2,0x10(%rsp)
mulsd  %xmm2,%xmm2
movapd %xmm0,0x60(%rsp)
mulsd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
movsd  0xac6(%rip),%xmm1
call   10b0 <pow@plt>
movsd  0x8(%rsp),%xmm4
movapd 0xb23(%rip),%xmm5
xorpd  %xmm0,%xmm5
xorpd  %xmm2,%xmm2
movapd %xmm4,%xmm1
cmpltsd %xmm2,%xmm1
movapd %xmm1,%xmm3
andnpd %xmm0,%xmm3
andpd  %xmm1,%xmm5
orpd   %xmm3,%xmm5
ucomisd %xmm2,%xmm5
jne    157a <GPS_Math_LambertCC_EN_To_LatLon+0x3ea>
jnp    1699 <GPS_Math_LambertCC_EN_To_LatLon+0x509>
ucomisd %xmm4,%xmm2
movapd 0xaea(%rip),%xmm3
movapd 0x10(%rsp),%xmm0
movapd %xmm0,%xmm2
xorpd  %xmm3,%xmm2
andpd  %xmm1,%xmm2
andnpd %xmm0,%xmm1
orpd   %xmm2,%xmm1
movapd 0x60(%rsp),%xmm0
jbe    15ac <GPS_Math_LambertCC_EN_To_LatLon+0x41c>
xorpd  %xmm3,%xmm0
movapd %xmm5,0x10(%rsp)
call   1030 <atan2@plt>
movsd  %xmm0,0x28(%rsp)
movapd 0x10(%rsp),%xmm0
divsd  0x40(%rsp),%xmm0
movsd  0xa3f(%rip),%xmm1
divsd  0x8(%rsp),%xmm1
call   10b0 <pow@plt>
movsd  %xmm0,0x10(%rsp)
call   1060 <atan@plt>
addsd  %xmm0,%xmm0
movsd  0xa2d(%rip),%xmm2
subsd  %xmm0,%xmm2
movapd 0xa61(%rip),%xmm0
andpd  %xmm2,%xmm0
ucomisd 0xa1d(%rip),%xmm0
jbe    16c0 <GPS_Math_LambertCC_EN_To_LatLon+0x530>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movapd %xmm2,0x40(%rsp)
movapd %xmm2,%xmm0
call   1050 <sin@plt>
mulsd  0x38(%rsp),%xmm0
movsd  0x9d3(%rip),%xmm2
movapd %xmm2,%xmm1
subsd  %xmm0,%xmm1
addsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
movsd  0x30(%rsp),%xmm1
call   10b0 <pow@plt>
mulsd  0x10(%rsp),%xmm0
call   1060 <atan@plt>
addsd  %xmm0,%xmm0
movsd  0x9ad(%rip),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
subsd  0x40(%rsp),%xmm0
andpd  0x9d7(%rip),%xmm0
ucomisd 0x997(%rip),%xmm0
movapd %xmm1,%xmm2
ja     1620 <GPS_Math_LambertCC_EN_To_LatLon+0x490>
jmp    16c4 <GPS_Math_LambertCC_EN_To_LatLon+0x534>
xor    %eax,%eax
ucomisd %xmm2,%xmm4
seta   %al
lea    0x9d7(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,(%rbx)
movapd 0x90(%rsp),%xmm1
jmp    1792 <GPS_Math_LambertCC_EN_To_LatLon+0x602>
movapd %xmm2,%xmm1
movsd  %xmm1,(%rbx)
movsd  0x28(%rsp),%xmm0
divsd  0x8(%rsp),%xmm0
movapd 0x90(%rsp),%xmm3
addsd  %xmm0,%xmm3
movsd  %xmm3,(%r14)
movsd  (%rbx),%xmm0
movsd  0x92e(%rip),%xmm1
ucomisd %xmm1,%xmm0
ja     1706 <GPS_Math_LambertCC_EN_To_LatLon+0x576>
movsd  0x930(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    170f <GPS_Math_LambertCC_EN_To_LatLon+0x57f>
movsd  %xmm1,(%rbx)
movsd  (%r14),%xmm3
movsd  0x921(%rip),%xmm1
ucomisd %xmm1,%xmm3
movsd  0x91d(%rip),%xmm0
addsd  %xmm3,%xmm0
movapd %xmm1,%xmm2
cmpltsd %xmm3,%xmm2
andpd  %xmm2,%xmm0
andnpd %xmm3,%xmm2
orpd   %xmm0,%xmm2
movsd  0x904(%rip),%xmm3
movapd %xmm2,%xmm0
cmpltsd 0x8ff(%rip),%xmm0
addsd  %xmm2,%xmm3
andpd  %xmm0,%xmm3
andnpd %xmm2,%xmm0
orpd   %xmm3,%xmm0
ja     1779 <GPS_Math_LambertCC_EN_To_LatLon+0x5e9>
movsd  0x8e5(%rip),%xmm3
ucomisd %xmm2,%xmm3
ja     1779 <GPS_Math_LambertCC_EN_To_LatLon+0x5e9>
ucomisd %xmm1,%xmm0
jbe    1784 <GPS_Math_LambertCC_EN_To_LatLon+0x5f4>
jmp    1792 <GPS_Math_LambertCC_EN_To_LatLon+0x602>
movsd  %xmm0,(%r14)
ucomisd %xmm1,%xmm0
ja     1792 <GPS_Math_LambertCC_EN_To_LatLon+0x602>
movsd  0x8c4(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    179b <GPS_Math_LambertCC_EN_To_LatLon+0x60b>
movsd  %xmm1,(%r14)
movapd %xmm1,%xmm0
call   1080 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%r14)
movsd  (%rbx),%xmm0
call   1080 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%rbx)
add    $0xa8,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define void @GPS_Math_LambertCC_EN_To_LatLon(double %0, double %1, double* nocapture %2, double* nocapture %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11) {
%13 = tail call double @GPS_Math_Deg_To_Rad(double %6)
%14 = tail call double @GPS_Math_Deg_To_Rad(double %4)
%15 = tail call double @GPS_Math_Deg_To_Rad(double %5)
%16 = tail call double @GPS_Math_Deg_To_Rad(double %7)
%17 = fmul double %10, %10
%18 = fmul double %11, %11
%19 = fsub double %17, %18
%20 = fdiv double %19, %17
%21 = tail call double @pow(double %20, double 5.000000e-01)
%22 = fmul double %21, 5.000000e-01
%23 = tail call double @sin(double %13)
%24 = fmul double %21, %23
%25 = fmul double %13, 5.000000e-01
%26 = fsub double 0x3FE921FB5444261E, %25
%27 = tail call double @tan(double %26)
%28 = fsub double 1.000000e+00, %24
%29 = fadd double %24, 1.000000e+00
%30 = fdiv double %28, %29
%31 = tail call double @pow(double %30, double %22)
%32 = fdiv double %27, %31
%33 = tail call double @sin(double %14)
%34 = tail call double @cos(double %14)
%35 = fmul double %21, %33
%36 = fneg double %35
%37 = tail call double @llvm.fmuladd.f64(double %36, double %35, double 1.000000e+00)
%38 = tail call double @pow(double %37, double 5.000000e-01)
%39 = fdiv double %34, %38
%40 = fmul double %14, 5.000000e-01
%41 = fsub double 0x3FE921FB5444261E, %40
%42 = tail call double @tan(double %41)
%43 = fsub double 1.000000e+00, %35
%44 = fadd double %35, 1.000000e+00
%45 = fdiv double %43, %44
%46 = tail call double @pow(double %45, double %22)
%47 = fdiv double %42, %46
%48 = fsub double %14, %15
%49 = tail call double @llvm.fabs.f64(double %48)
%50 = fcmp ogt double %49, 1.000000e-10
br i1 %50, label %51, label %72
51: ; preds = %12
%52 = tail call double @sin(double %15)
%53 = tail call double @cos(double %15)
%54 = fmul double %21, %52
%55 = fneg double %54
%56 = tail call double @llvm.fmuladd.f64(double %55, double %54, double 1.000000e+00)
%57 = tail call double @pow(double %56, double 5.000000e-01)
%58 = fdiv double %53, %57
%59 = fmul double %15, 5.000000e-01
%60 = fsub double 0x3FE921FB5444261E, %59
%61 = tail call double @tan(double %60)
%62 = fsub double 1.000000e+00, %54
%63 = fadd double %54, 1.000000e+00
%64 = fdiv double %62, %63
%65 = tail call double @pow(double %64, double %22)
%66 = fdiv double %61, %65
%67 = fdiv double %39, %58
%68 = tail call double @log(double %67)
%69 = fdiv double %47, %66
%70 = tail call double @log(double %69)
%71 = fdiv double %68, %70
br label %72
72: ; preds = %12, %51
%73 = phi double [ %71, %51 ], [ %33, %12 ]
%74 = tail call double @pow(double %47, double %73)
%75 = fmul double %73, %74
%76 = fdiv double %39, %75
%77 = fmul double %76, %10
%78 = tail call double @pow(double %32, double %73)
%79 = fmul double %78, %77
%80 = fsub double %0, %8
%81 = fsub double %1, %9
%82 = fsub double %79, %81
%83 = fmul double %82, %82
%84 = tail call double @llvm.fmuladd.f64(double %80, double %80, double %83)
%85 = tail call double @pow(double %84, double 5.000000e-01)
%86 = fcmp olt double %73, 0.000000e+00
%87 = fneg double %85
%88 = select i1 %86, double %87, double %85
%89 = fcmp une double %88, 0.000000e+00
br i1 %89, label %90, label %142
90: ; preds = %72
%91 = fneg double %82
%92 = select i1 %86, double %91, double %82
%93 = fneg double %80
%94 = select i1 %86, double %93, double %80
%95 = tail call double @atan2(double %94, double %92)
%96 = fdiv double %88, %77
%97 = fdiv double 1.000000e+00, %73
%98 = tail call double @pow(double %96, double %97)
%99 = tail call double @atan(double %98)
%100 = tail call double @llvm.fmuladd.f64(double %99, double -2.000000e+00, double 0x3FF921FB5444261E)
%101 = tail call double @llvm.fabs.f64(double %100)
%102 = fcmp ogt double %101, 4.850000e-10
br i1 %102, label %103, label %117
103: ; preds = %90, %103
%104 = phi double [ %113, %103 ], [ %100, %90 ]
%105 = tail call double @sin(double %104)
%106 = fmul double %21, %105
%107 = fsub double 1.000000e+00, %106
%108 = fadd double %106, 1.000000e+00
%109 = fdiv double %107, %108
%110 = tail call double @pow(double %109, double %22)
%111 = fmul double %98, %110
%112 = tail call double @atan(double %111)
%113 = tail call double @llvm.fmuladd.f64(double %112, double -2.000000e+00, double 0x3FF921FB5444261E)
%114 = fsub double %113, %104
%115 = tail call double @llvm.fabs.f64(double %114)
%116 = fcmp ogt double %115, 4.850000e-10
br i1 %116, label %103, label %117
117: ; preds = %103, %90
%118 = phi double [ %100, %90 ], [ %113, %103 ]
store double %118, double* %2
%119 = fdiv double %95, %73
%120 = fadd double %16, %119
store double %120, double* %3
%121 = load double, double* %2
%122 = fcmp ogt double %121, 0x3FF921FB5444261E
br i1 %122, label %125, label %123
123: ; preds = %117
%124 = fcmp olt double %121, 0xBFF921FB5444261E
br i1 %124, label %125, label %128
125: ; preds = %123, %117
%126 = phi double [ 0x3FF921FB5444261E, %117 ], [ 0xBFF921FB5444261E, %123 ]
store double %126, double* %2
%127 = load double, double* %3
br label %128
128: ; preds = %125, %123
%129 = phi double [ %127, %125 ], [ %120, %123 ]
%130 = fcmp ogt double %129, 0x400921FB5444261E
%131 = fadd double %129, 0xC01921FB5444261E
%132 = select i1 %130, double %131, double %129
%133 = fcmp olt double %132, 0xC00921FB5444261E
%134 = fadd double %132, 0x401921FB5444261E
%135 = select i1 %133, double %134, double %132
%136 = or i1 %130, %133
br i1 %136, label %137, label %138
137: ; preds = %128
store double %135, double* %3
br label %138
138: ; preds = %128, %137
%139 = fcmp ogt double %135, 0x400921FB5444261E
br i1 %139, label %145, label %140
140: ; preds = %138
%141 = fcmp olt double %135, 0xC00921FB5444261E
br i1 %141, label %145, label %147
142: ; preds = %72
%143 = fcmp ogt double %73, 0.000000e+00
%144 = select i1 %143, double 0x3FF921FB5444261E, double 0xBFF921FB5444261E
store double %144, double* %2
br label %145
145: ; preds = %140, %138, %142
%146 = phi double [ %16, %142 ], [ 0x400921FB5444261E, %138 ], [ 0xC00921FB5444261E, %140 ]
store double %146, double* %3
br label %147
147: ; preds = %145, %140
%148 = phi double [ %135, %140 ], [ %146, %145 ]
%149 = tail call double @GPS_Math_Rad_To_Deg(double %148)
store double %149, double* %3
%150 = load double, double* %2
%151 = tail call double @GPS_Math_Rad_To_Deg(double %150)
store double %151, double* %2
ret void
}