#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 cos(double);
double pow(double, double);
double sin(double);
double tan(double);
void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double *phi,
                                   double *lambda, double phi0, double M0,
                                   double E0, double N0, double a, double b) {
  double p2;
  double po2;
  double a2;
  double b2;
  double e2;
  double e4;
  double e6;
  double AM0;
  double c0;
  double c1;
  double c2;
  double c3;
  double om0;
  double A0;
  double A1;
  double A2;
  double A3;
  double j;
  double te4;
  double phi0s2;
  double phi0s4;
  double phi0s6;
  double lat;
  double x;
  double E1;
  double E2;
  double E3;
  double E4;
  double dx;
  double dy;
  double mu;
  double mus2;
  double mus4;
  double mus6;
  double mus8;
  double M1;
  double phi1;
  double phi1s;
  double phi1c;
  double phi1t;
  double T;
  double T1;
  double N1;
  double R1;
  double RD;
  double DD;
  double D2;
  double D3;
  double D4;
  double D5;
  double tol;
  M0 = GPS_Math_Deg_To_Rad(M0);
  phi0 = GPS_Math_Deg_To_Rad(phi0);
  p2 = (double)3.141592653589 * (double)2.;
  po2 = (double)3.141592653589 / (double)2.;
  a2 = a * a;
  b2 = b * b;
  e2 = (a2 - b2) / a2;
  e4 = e2 * e2;
  e6 = e2 * e4;
  te4 = (double)3.0 * e4;
  j = (double)45. * e6 / (double)1024.;
  c0 = (double)1.0 - e2 / (double)4. - te4 / (double)64. -
       (double)5. * e6 / (double)256.;
  c1 = (double)3. * e2 / (double)8. + te4 / (double)32. + j;
  c2 = (double)15. * e4 / (double)256. + j;
  c3 = (double)35. * e6 / (double)3072.;
  lat = c0 * phi0;
  phi0s2 = c1 * sin((double)2. * phi0);
  phi0s4 = c2 * sin((double)4. * phi0);
  phi0s6 = c3 * sin((double)6. * phi0);
  AM0 = a * (lat - phi0s2 + phi0s4 - phi0s6);
  om0 = (double)1.0 - e2;
  x = pow(om0, (double)0.5);
  E1 = ((double)1.0 - x) / ((double)1.0 + x);
  E2 = E1 * E1;
  E3 = E1 * E2;
  E4 = E1 * E3;
  A0 = (double)3. * E1 / (double)2. - (double)27. * E3 / (double)32.;
  A1 = (double)21. * E2 / (double)16. - (double)55. * E4 / (double)32.;
  A2 = (double)151. * E3 / (double)96.;
  A3 = (double)1097. * E4 / (double)512.;
  tol = (double)1.e-5;
  dx = E - E0;
  dy = N - N0;
  M1 = AM0 + dy;
  mu = M1 / (a * c0);
  mus2 = A0 * sin((double)2. * mu);
  mus4 = A1 * sin((double)4. * mu);
  mus6 = A2 * sin((double)6. * mu);
  mus8 = A3 * sin((double)8. * mu);
  phi1 = mu + mus2 + mus4 + mus6 + mus8;
  if ((((po2 - tol) < phi1) && (phi1 < (po2 + tol)))) {
    *phi = po2;
    *lambda = M0;
  } else if ((((-po2 - tol) < phi1) && (phi1 < (-po2 + tol)))) {
    *phi = -po2;
    *lambda = M0;
  } else {
    phi1s = sin(phi1);
    phi1c = cos(phi1);
    phi1t = tan(phi1);
    T1 = phi1t * phi1t;
    RD = pow((double)1. - e2 * phi1s * phi1s, (double).5);
    N1 = a / RD;
    R1 = N1 * om0 / (RD * RD);
    DD = dx / N1;
    D2 = DD * DD;
    D3 = DD * D2;
    D4 = DD * D3;
    D5 = DD * D4;
    T = (double)1. + (double)3. * T1;
    *phi = phi1 - (N1 * phi1t / R1) * (D2 / (double)2. - T * D4 / (double)24.);
    *lambda =
        M0 + (DD - T1 * D3 / (double)3. + T * T1 * D5 / (double)15.) / phi1c;
    if (*phi > po2)
      *phi = po2;
    else if (*phi < -po2)
      *phi = -po2;
    if (*lambda > 3.141592653589)
      *lambda -= p2;
    if (*lambda < -3.141592653589)
      *lambda += p2;
    if (*lambda > 3.141592653589)
      *lambda = 3.141592653589;
    else if (*lambda < -3.141592653589)
      *lambda = -3.141592653589;
  }
  *lambda = GPS_Math_Rad_To_Deg(*lambda);
  *phi = GPS_Math_Rad_To_Deg(*phi);
  return;
}


x86 assembly (clang, -O0):
<GPS_Math_Cassini_EN_To_LatLon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x220,%rsp
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  -0x30(%rbp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x28(%rbp)
movsd  0xf0f(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xefa(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x78(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xe42(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0xe7d(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  0xe65(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x78(%rbp),%xmm1
movsd  0xda4(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xe00(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  -0xe8(%rbp),%xmm1
ff
movsd  0xe24(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  0xe0c(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  0xdec(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xdac(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xd2f(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0xe8(%rbp),%xmm1
ff
movsd  0xd63(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xd9b(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  0xd86(%rip),%xmm1
divsd  %xmm1,%xmm0
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xd62(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  0xd4a(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x220(%rbp)
ff
movsd  0xca1(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x220(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x218(%rbp)
ff
movsd  0xc60(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x218(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x210(%rbp)
ff
movsd  0xc1f(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x210(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x108(%rbp),%xmm1
ff
subsd  -0xf0(%rbp),%xmm1
ff
addsd  -0xf8(%rbp),%xmm1
ff
subsd  -0x100(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xc35(%rip),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  0xc20(%rip),%xmm1
call   1080 <pow@plt>
movsd  %xmm0,-0x110(%rbp)
ff
movsd  0xc03(%rip),%xmm0
subsd  -0x110(%rbp),%xmm0
ff
movsd  0xbf3(%rip),%xmm1
addsd  -0x110(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
mulsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
mulsd  -0x120(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
mulsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  0xb87(%rip),%xmm0
mulsd  -0x118(%rbp),%xmm0
ff
movsd  0xb1f(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xb63(%rip),%xmm1
mulsd  -0x128(%rbp),%xmm1
ff
movsd  0xb33(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xb33(%rip),%xmm0
mulsd  -0x120(%rbp),%xmm0
ff
movsd  0xb1b(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xb07(%rip),%xmm1
mulsd  -0x130(%rbp),%xmm1
ff
movsd  0xaef(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xacf(%rip),%xmm0
mulsd  -0x128(%rbp),%xmm0
ff
movsd  0xab7(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0xa9b(%rip),%xmm0
mulsd  -0x130(%rbp),%xmm0
ff
movsd  0xa83(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xa67(%rip),%xmm0
movsd  %xmm0,-0x1e8(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x140(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm1
mulsd  -0x98(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x208(%rbp)
ff
movsd  0x9e2(%rip),%xmm0
mulsd  -0x148(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x208(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x200(%rbp)
ff
movsd  0x99e(%rip),%xmm0
mulsd  -0x148(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x200(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1f8(%rbp)
ff
movsd  0x95a(%rip),%xmm0
mulsd  -0x148(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1f8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1f0(%rbp)
ff
movsd  0x916(%rip),%xmm0
mulsd  -0x148(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1f0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
addsd  -0x150(%rbp),%xmm0
ff
addsd  -0x158(%rbp),%xmm0
ff
addsd  -0x160(%rbp),%xmm0
ff
addsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x60(%rbp),%xmm1
subsd  -0x1e8(%rbp),%xmm1
ff
movsd  -0x178(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    179b <GPS_Math_Cassini_EN_To_LatLon+0x63b>
movsd  -0x178(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x1e8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    179b <GPS_Math_Cassini_EN_To_LatLon+0x63b>
movsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1be0 <GPS_Math_Cassini_EN_To_LatLon+0xa80>
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
subsd  -0x1e8(%rbp),%xmm1
ff
movsd  -0x178(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    183d <GPS_Math_Cassini_EN_To_LatLon+0x6dd>
movsd  -0x178(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0x1e8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    183d <GPS_Math_Cassini_EN_To_LatLon+0x6dd>
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1bdb <GPS_Math_Cassini_EN_To_LatLon+0xa7b>
movsd  -0x178(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x178(%rbp),%xmm0
ff
call   1070 <cos@plt>
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x178(%rbp),%xmm0
ff
call   1050 <tan@plt>
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x190(%rbp),%xmm0
ff
mulsd  -0x190(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
mulsd  -0x180(%rbp),%xmm0
ff
movsd  -0x180(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x7ac(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0x7a8(%rip),%xmm1
call   1080 <pow@plt>
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
divsd  -0x1b8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x1a8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  -0x1b8(%rbp),%xmm1
ff
mulsd  -0x1b8(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
divsd  -0x1a8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  -0x1c0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  -0x1c8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  -0x1d0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d8(%rbp)
ff
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  -0x1d8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1e0(%rbp)
ff
movsd  -0x1a0(%rbp),%xmm0
ff
movsd  0x6c2(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x6be(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x178(%rbp),%xmm1
ff
movsd  -0x1a8(%rbp),%xmm0
ff
mulsd  -0x190(%rbp),%xmm0
ff
divsd  -0x1b0(%rbp),%xmm0
ff
movsd  -0x1c8(%rbp),%xmm2
ff
movsd  0x622(%rip),%xmm3
divsd  %xmm3,%xmm2
movsd  -0x198(%rbp),%xmm3
ff
mulsd  -0x1d8(%rbp),%xmm3
ff
movsd  0x6c6(%rip),%xmm4
divsd  %xmm4,%xmm3
subsd  %xmm3,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
movsd  -0x1c0(%rbp),%xmm1
ff
movsd  -0x1a0(%rbp),%xmm2
ff
mulsd  -0x1d0(%rbp),%xmm2
ff
movsd  0x60a(%rip),%xmm3
divsd  %xmm3,%xmm2
subsd  %xmm2,%xmm1
movsd  -0x198(%rbp),%xmm2
ff
mulsd  -0x1a0(%rbp),%xmm2
ff
mulsd  -0x1e0(%rbp),%xmm2
ff
movsd  0x612(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
divsd  -0x188(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd -0x60(%rbp),%xmm0
jbe    1acf <GPS_Math_Cassini_EN_To_LatLon+0x96f>
movsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1b26 <GPS_Math_Cassini_EN_To_LatLon+0x9c6>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
ucomisd %xmm1,%xmm0
jbe    1b21 <GPS_Math_Cassini_EN_To_LatLon+0x9c1>
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1b26 <GPS_Math_Cassini_EN_To_LatLon+0x9c6>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x5aa(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1b55 <GPS_Math_Cassini_EN_To_LatLon+0x9f5>
movsd  -0x58(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x587(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    1b7c <GPS_Math_Cassini_EN_To_LatLon+0xa1c>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x554(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1bab <GPS_Math_Cassini_EN_To_LatLon+0xa4b>
mov    -0x20(%rbp),%rax
movsd  0x53e(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1bd6 <GPS_Math_Cassini_EN_To_LatLon+0xa76>
mov    -0x20(%rbp),%rax
movsd  0x531(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    1bd1 <GPS_Math_Cassini_EN_To_LatLon+0xa71>
mov    -0x20(%rbp),%rax
movsd  0x51b(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1bd6 <GPS_Math_Cassini_EN_To_LatLon+0xa76>
jmp    1bdb <GPS_Math_Cassini_EN_To_LatLon+0xa7b>
jmp    1be0 <GPS_Math_Cassini_EN_To_LatLon+0xa80>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1060 <GPS_Math_Rad_To_Deg@plt>
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
call   1060 <GPS_Math_Rad_To_Deg@plt>
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x220,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPS_Math_Cassini_EN_To_LatLon>:
push   %r14
push   %rbx
sub    $0xa8,%rsp
movsd  %xmm7,0x10(%rsp)
movsd  %xmm6,0x28(%rsp)
movsd  %xmm5,0x20(%rsp)
movsd  %xmm4,0xa0(%rsp)
movsd  %xmm2,0x30(%rsp)
mov    %rsi,%r14
mov    %rdi,%rbx
movsd  %xmm1,0x8(%rsp)
movsd  %xmm0,0x48(%rsp)
movaps %xmm3,%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movaps %xmm0,0x60(%rsp)
movsd  0x30(%rsp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  0x28(%rsp),%xmm2
mulsd  %xmm2,%xmm2
movsd  0x10(%rsp),%xmm3
mulsd  %xmm3,%xmm3
movapd %xmm2,%xmm1
subsd  %xmm3,%xmm1
divsd  %xmm2,%xmm1
movapd %xmm1,%xmm6
mulsd  %xmm1,%xmm6
movapd %xmm1,%xmm5
mulsd  %xmm6,%xmm5
movsd  0xe13(%rip),%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm1,%xmm3
movsd  %xmm1,0x58(%rsp)
addsd  0xe05(%rip),%xmm2
unpcklpd %xmm5,%xmm6
movapd 0xed1(%rip),%xmm4
mulpd  %xmm6,%xmm4
movapd 0xed5(%rip),%xmm1
mulpd  %xmm4,%xmm1
subsd  %xmm1,%xmm2
unpckhpd %xmm1,%xmm1
subsd  %xmm1,%xmm2
movsd  %xmm2,0x50(%rsp)
movsd  0xdd7(%rip),%xmm1
mulsd  %xmm3,%xmm1
mulsd  0xdd3(%rip),%xmm1
mulsd  0xdd3(%rip),%xmm4
mulpd  0xeab(%rip),%xmm6
addsd  %xmm1,%xmm4
mulpd  0xeaf(%rip),%xmm6
unpcklpd %xmm6,%xmm4
unpckhpd %xmm6,%xmm6
addpd  %xmm4,%xmm6
movapd %xmm6,0x70(%rsp)
mulsd  0xdad(%rip),%xmm5
divsd  0xdad(%rip),%xmm5
movapd %xmm5,0x90(%rsp)
movsd  %xmm0,0x30(%rsp)
mulsd  %xmm0,%xmm2
movsd  %xmm2,0x80(%rsp)
addsd  %xmm0,%xmm0
call   1040 <sin@plt>
movapd %xmm0,0x10(%rsp)
movsd  0x30(%rsp),%xmm0
mulsd  0xd7c(%rip),%xmm0
call   1040 <sin@plt>
movapd 0x10(%rsp),%xmm1
unpcklpd %xmm0,%xmm1
mulpd  0x70(%rsp),%xmm1
movapd %xmm1,0x10(%rsp)
movsd  0x30(%rsp),%xmm0
mulsd  0xd5b(%rip),%xmm0
call   1040 <sin@plt>
mulsd  0x90(%rsp),%xmm0
movapd 0x10(%rsp),%xmm1
movsd  0x80(%rsp),%xmm2
subsd  %xmm1,%xmm2
unpckhpd %xmm1,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mulsd  0x28(%rsp),%xmm1
movapd %xmm1,0x10(%rsp)
movsd  0xce2(%rip),%xmm0
subsd  0x58(%rsp),%xmm0
movsd  0xd14(%rip),%xmm1
movsd  %xmm0,0x70(%rsp)
call   1080 <pow@plt>
movsd  0xcc1(%rip),%xmm2
movapd %xmm2,%xmm1
subsd  %xmm0,%xmm1
addsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm1,%xmm3
mulsd  %xmm0,%xmm3
movapd %xmm1,%xmm2
unpcklpd %xmm0,%xmm1
mulpd  0xda9(%rip),%xmm1
mulpd  0xdb1(%rip),%xmm1
mulsd  %xmm3,%xmm2
movapd %xmm3,%xmm0
unpcklpd %xmm2,%xmm0
mulpd  0xdad(%rip),%xmm0
mulpd  0xdb5(%rip),%xmm0
mulsd  0xcad(%rip),%xmm3
divsd  0xcad(%rip),%xmm3
movapd %xmm3,0x90(%rsp)
mulsd  0xca4(%rip),%xmm2
addpd  %xmm1,%xmm0
movapd %xmm0,0x80(%rsp)
mulsd  0xc97(%rip),%xmm2
movapd %xmm2,0x30(%rsp)
movsd  0x8(%rsp),%xmm1
subsd  0x20(%rsp),%xmm1
addsd  0x10(%rsp),%xmm1
movsd  0x50(%rsp),%xmm0
mulsd  0x28(%rsp),%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movapd %xmm1,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sin@plt>
movapd %xmm0,0x10(%rsp)
movsd  0xc1e(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
movapd 0x10(%rsp),%xmm1
unpcklpd %xmm0,%xmm1
mulpd  0x80(%rsp),%xmm1
movapd %xmm1,0x10(%rsp)
movsd  0xbfa(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  0x90(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0xc08(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
movapd 0x10(%rsp),%xmm1
mulsd  0x30(%rsp),%xmm0
movsd  0x8(%rsp),%xmm2
addsd  %xmm1,%xmm2
unpckhpd %xmm1,%xmm1
addsd  %xmm2,%xmm1
addsd  0x20(%rsp),%xmm1
addsd  %xmm0,%xmm1
ucomisd 0xbd5(%rip),%xmm1
jbe    14bd <GPS_Math_Cassini_EN_To_LatLon+0x35d>
movsd  0xbdb(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    14bd <GPS_Math_Cassini_EN_To_LatLon+0x35d>
movsd  0xbc5(%rip),%xmm0
jmp    14dd <GPS_Math_Cassini_EN_To_LatLon+0x37d>
ucomisd 0xbcb(%rip),%xmm1
jbe    1512 <GPS_Math_Cassini_EN_To_LatLon+0x3b2>
movsd  0xbd1(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1512 <GPS_Math_Cassini_EN_To_LatLon+0x3b2>
movsd  0xbbb(%rip),%xmm0
movapd 0x60(%rsp),%xmm1
movsd  %xmm0,(%rbx)
movsd  %xmm1,(%r14)
movapd %xmm1,%xmm0
call   1060 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%r14)
movsd  (%rbx),%xmm0
call   1060 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%rbx)
add    $0xa8,%rsp
pop    %rbx
pop    %r14
ret
movsd  0x48(%rsp),%xmm0
subsd  0xa0(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movapd %xmm1,%xmm0
movapd %xmm1,0x10(%rsp)
call   1040 <sin@plt>
movsd  %xmm0,0x50(%rsp)
movaps 0x10(%rsp),%xmm0
call   1070 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movapd 0x10(%rsp),%xmm0
call   1050 <tan@plt>
movsd  %xmm0,0x30(%rsp)
mulsd  %xmm0,%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x58(%rsp),%xmm1
movsd  0x50(%rsp),%xmm0
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xa85(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xab9(%rip),%xmm1
call   1080 <pow@plt>
movsd  0x28(%rsp),%xmm6
divsd  %xmm0,%xmm6
movsd  0x70(%rsp),%xmm7
mulsd  %xmm6,%xmm7
mulsd  %xmm0,%xmm0
divsd  %xmm0,%xmm7
movsd  0x48(%rsp),%xmm0
divsd  %xmm6,%xmm0
movapd %xmm0,%xmm3
mulsd  %xmm0,%xmm3
movapd %xmm0,%xmm2
mulsd  %xmm3,%xmm2
movapd %xmm0,%xmm4
mulsd  %xmm2,%xmm4
movapd %xmm0,%xmm1
movapd %xmm0,%xmm5
mulsd  %xmm4,%xmm1
movsd  0xa29(%rip),%xmm8
movsd  0x20(%rsp),%xmm9
movapd %xmm9,%xmm0
mulsd  %xmm8,%xmm0
addsd  0xa08(%rip),%xmm0
mulsd  0xa40(%rip),%xmm3
mulsd  %xmm0,%xmm4
divsd  0xa94(%rip),%xmm4
addsd  %xmm3,%xmm4
mulsd  0x30(%rsp),%xmm6
divsd  %xmm7,%xmm6
mulsd  %xmm4,%xmm6
movapd 0x10(%rsp),%xmm3
subsd  %xmm6,%xmm3
movsd  %xmm3,(%rbx)
movapd %xmm9,%xmm3
mulsd  %xmm9,%xmm2
divsd  %xmm8,%xmm2
subsd  %xmm2,%xmm5
mulsd  %xmm9,%xmm0
mulsd  %xmm1,%xmm0
divsd  0xa58(%rip),%xmm0
addsd  %xmm5,%xmm0
divsd  0x8(%rsp),%xmm0
movapd 0x60(%rsp),%xmm3
addsd  %xmm0,%xmm3
movsd  %xmm3,(%r14)
movsd  (%rbx),%xmm1
movsd  0xa03(%rip),%xmm0
ucomisd %xmm0,%xmm1
ja     1691 <GPS_Math_Cassini_EN_To_LatLon+0x531>
movsd  0xa0d(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    169a <GPS_Math_Cassini_EN_To_LatLon+0x53a>
movsd  %xmm0,(%rbx)
movsd  (%r14),%xmm3
movsd  0xa16(%rip),%xmm1
ucomisd %xmm1,%xmm3
movsd  0xa12(%rip),%xmm0
addsd  %xmm3,%xmm0
movapd %xmm1,%xmm2
cmpltsd %xmm3,%xmm2
andpd  %xmm2,%xmm0
andnpd %xmm3,%xmm2
orpd   %xmm0,%xmm2
movsd  0x9f9(%rip),%xmm3
movapd %xmm2,%xmm0
cmpltsd 0x9f4(%rip),%xmm0
addsd  %xmm2,%xmm3
andpd  %xmm0,%xmm3
andnpd %xmm2,%xmm0
orpd   %xmm3,%xmm0
ja     16fc <GPS_Math_Cassini_EN_To_LatLon+0x59c>
movsd  0x9da(%rip),%xmm3
ucomisd %xmm2,%xmm3
jbe    1701 <GPS_Math_Cassini_EN_To_LatLon+0x5a1>
movsd  %xmm0,(%r14)
ucomisd %xmm1,%xmm0
ja     14e7 <GPS_Math_Cassini_EN_To_LatLon+0x387>
movsd  0x9bd(%rip),%xmm1
ucomisd %xmm0,%xmm1
ja     14e7 <GPS_Math_Cassini_EN_To_LatLon+0x387>
jmp    14f0 <GPS_Math_Cassini_EN_To_LatLon+0x390>

LLVM IR (-O0):
define void @GPS_Math_Cassini_EN_To_LatLon(double %0, double %1, double* %2, double* %3, double %4, double %5, double %6, double %7, double %8, double %9) {
%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
%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
%57 = alloca double
%58 = alloca double
%59 = alloca double
%60 = alloca double
%61 = alloca double
%62 = alloca double
%63 = alloca double
%64 = alloca double
%65 = alloca double
%66 = alloca double
%67 = alloca double
%68 = alloca double
%69 = alloca double
%70 = alloca double
%71 = alloca double
store double %0, double* %11
store double %1, double* %12
store double* %2, double** %13
store double* %3, double** %14
store double %4, double* %15
store double %5, double* %16
store double %6, double* %17
store double %7, double* %18
store double %8, double* %19
store double %9, double* %20
%72 = load double, double* %16
%73 = call double @GPS_Math_Deg_To_Rad(double %72)
store double %73, double* %16
%74 = load double, double* %15
%75 = call double @GPS_Math_Deg_To_Rad(double %74)
store double %75, double* %15
store double 0x401921FB5444261E, double* %21
store double 0x3FF921FB5444261E, double* %22
%76 = load double, double* %19
%77 = load double, double* %19
%78 = fmul double %76, %77
store double %78, double* %23
%79 = load double, double* %20
%80 = load double, double* %20
%81 = fmul double %79, %80
store double %81, double* %24
%82 = load double, double* %23
%83 = load double, double* %24
%84 = fsub double %82, %83
%85 = load double, double* %23
%86 = fdiv double %84, %85
store double %86, double* %25
%87 = load double, double* %25
%88 = load double, double* %25
%89 = fmul double %87, %88
store double %89, double* %26
%90 = load double, double* %25
%91 = load double, double* %26
%92 = fmul double %90, %91
store double %92, double* %27
%93 = load double, double* %26
%94 = fmul double 3.000000e+00, %93
store double %94, double* %39
%95 = load double, double* %27
%96 = fmul double 4.500000e+01, %95
%97 = fdiv double %96, 1.024000e+03
store double %97, double* %38
%98 = load double, double* %25
%99 = fdiv double %98, 4.000000e+00
%100 = fsub double 1.000000e+00, %99
%101 = load double, double* %39
%102 = fdiv double %101, 6.400000e+01
%103 = fsub double %100, %102
%104 = load double, double* %27
%105 = fmul double 5.000000e+00, %104
%106 = fdiv double %105, 2.560000e+02
%107 = fsub double %103, %106
store double %107, double* %29
%108 = load double, double* %25
%109 = fmul double 3.000000e+00, %108
%110 = fdiv double %109, 8.000000e+00
%111 = load double, double* %39
%112 = fdiv double %111, 3.200000e+01
%113 = fadd double %110, %112
%114 = load double, double* %38
%115 = fadd double %113, %114
store double %115, double* %30
%116 = load double, double* %26
%117 = fmul double 1.500000e+01, %116
%118 = fdiv double %117, 2.560000e+02
%119 = load double, double* %38
%120 = fadd double %118, %119
store double %120, double* %31
%121 = load double, double* %27
%122 = fmul double 3.500000e+01, %121
%123 = fdiv double %122, 3.072000e+03
store double %123, double* %32
%124 = load double, double* %29
%125 = load double, double* %15
%126 = fmul double %124, %125
store double %126, double* %43
%127 = load double, double* %30
%128 = load double, double* %15
%129 = fmul double 2.000000e+00, %128
%130 = call double @sin(double %129)
%131 = fmul double %127, %130
store double %131, double* %40
%132 = load double, double* %31
%133 = load double, double* %15
%134 = fmul double 4.000000e+00, %133
%135 = call double @sin(double %134)
%136 = fmul double %132, %135
store double %136, double* %41
%137 = load double, double* %32
%138 = load double, double* %15
%139 = fmul double 6.000000e+00, %138
%140 = call double @sin(double %139)
%141 = fmul double %137, %140
store double %141, double* %42
%142 = load double, double* %19
%143 = load double, double* %43
%144 = load double, double* %40
%145 = fsub double %143, %144
%146 = load double, double* %41
%147 = fadd double %145, %146
%148 = load double, double* %42
%149 = fsub double %147, %148
%150 = fmul double %142, %149
store double %150, double* %28
%151 = load double, double* %25
%152 = fsub double 1.000000e+00, %151
store double %152, double* %33
%153 = load double, double* %33
%154 = call double @pow(double %153, double 5.000000e-01)
store double %154, double* %44
%155 = load double, double* %44
%156 = fsub double 1.000000e+00, %155
%157 = load double, double* %44
%158 = fadd double 1.000000e+00, %157
%159 = fdiv double %156, %158
store double %159, double* %45
%160 = load double, double* %45
%161 = load double, double* %45
%162 = fmul double %160, %161
store double %162, double* %46
%163 = load double, double* %45
%164 = load double, double* %46
%165 = fmul double %163, %164
store double %165, double* %47
%166 = load double, double* %45
%167 = load double, double* %47
%168 = fmul double %166, %167
store double %168, double* %48
%169 = load double, double* %45
%170 = fmul double 3.000000e+00, %169
%171 = fdiv double %170, 2.000000e+00
%172 = load double, double* %47
%173 = fmul double 2.700000e+01, %172
%174 = fdiv double %173, 3.200000e+01
%175 = fsub double %171, %174
store double %175, double* %34
%176 = load double, double* %46
%177 = fmul double 2.100000e+01, %176
%178 = fdiv double %177, 1.600000e+01
%179 = load double, double* %48
%180 = fmul double 5.500000e+01, %179
%181 = fdiv double %180, 3.200000e+01
%182 = fsub double %178, %181
store double %182, double* %35
%183 = load double, double* %47
%184 = fmul double 1.510000e+02, %183
%185 = fdiv double %184, 9.600000e+01
store double %185, double* %36
%186 = load double, double* %48
%187 = fmul double 1.097000e+03, %186
%188 = fdiv double %187, 5.120000e+02
store double %188, double* %37
store double 1.000000e-05, double* %71
%189 = load double, double* %11
%190 = load double, double* %17
%191 = fsub double %189, %190
store double %191, double* %49
%192 = load double, double* %12
%193 = load double, double* %18
%194 = fsub double %192, %193
store double %194, double* %50
%195 = load double, double* %28
%196 = load double, double* %50
%197 = fadd double %195, %196
store double %197, double* %56
%198 = load double, double* %56
%199 = load double, double* %19
%200 = load double, double* %29
%201 = fmul double %199, %200
%202 = fdiv double %198, %201
store double %202, double* %51
%203 = load double, double* %34
%204 = load double, double* %51
%205 = fmul double 2.000000e+00, %204
%206 = call double @sin(double %205)
%207 = fmul double %203, %206
store double %207, double* %52
%208 = load double, double* %35
%209 = load double, double* %51
%210 = fmul double 4.000000e+00, %209
%211 = call double @sin(double %210)
%212 = fmul double %208, %211
store double %212, double* %53
%213 = load double, double* %36
%214 = load double, double* %51
%215 = fmul double 6.000000e+00, %214
%216 = call double @sin(double %215)
%217 = fmul double %213, %216
store double %217, double* %54
%218 = load double, double* %37
%219 = load double, double* %51
%220 = fmul double 8.000000e+00, %219
%221 = call double @sin(double %220)
%222 = fmul double %218, %221
store double %222, double* %55
%223 = load double, double* %51
%224 = load double, double* %52
%225 = fadd double %223, %224
%226 = load double, double* %53
%227 = fadd double %225, %226
%228 = load double, double* %54
%229 = fadd double %227, %228
%230 = load double, double* %55
%231 = fadd double %229, %230
store double %231, double* %57
%232 = load double, double* %22
%233 = load double, double* %71
%234 = fsub double %232, %233
%235 = load double, double* %57
%236 = fcmp olt double %234, %235
br i1 %236, label %237, label %248
237: ; preds = %10
%238 = load double, double* %57
%239 = load double, double* %22
%240 = load double, double* %71
%241 = fadd double %239, %240
%242 = fcmp olt double %238, %241
br i1 %242, label %243, label %248
243: ; preds = %237
%244 = load double, double* %22
%245 = load double*, double** %13
store double %244, double* %245
%246 = load double, double* %16
%247 = load double*, double** %14
store double %246, double* %247
br label %397
248: ; preds = %237, %10
%249 = load double, double* %22
%250 = fneg double %249
%251 = load double, double* %71
%252 = fsub double %250, %251
%253 = load double, double* %57
%254 = fcmp olt double %252, %253
br i1 %254, label %255, label %268
255: ; preds = %248
%256 = load double, double* %57
%257 = load double, double* %22
%258 = fneg double %257
%259 = load double, double* %71
%260 = fadd double %258, %259
%261 = fcmp olt double %256, %260
br i1 %261, label %262, label %268
262: ; preds = %255
%263 = load double, double* %22
%264 = fneg double %263
%265 = load double*, double** %13
store double %264, double* %265
%266 = load double, double* %16
%267 = load double*, double** %14
store double %266, double* %267
br label %396
268: ; preds = %255, %248
%269 = load double, double* %57
%270 = call double @sin(double %269)
store double %270, double* %58
%271 = load double, double* %57
%272 = call double @cos(double %271)
store double %272, double* %59
%273 = load double, double* %57
%274 = call double @tan(double %273)
store double %274, double* %60
%275 = load double, double* %60
%276 = load double, double* %60
%277 = fmul double %275, %276
store double %277, double* %62
%278 = load double, double* %25
%279 = load double, double* %58
%280 = fmul double %278, %279
%281 = load double, double* %58
%282 = fneg double %280
%283 = call double @llvm.fmuladd.f64(double %282, double %281, double 1.000000e+00)
%284 = call double @pow(double %283, double 5.000000e-01)
store double %284, double* %65
%285 = load double, double* %19
%286 = load double, double* %65
%287 = fdiv double %285, %286
store double %287, double* %63
%288 = load double, double* %63
%289 = load double, double* %33
%290 = fmul double %288, %289
%291 = load double, double* %65
%292 = load double, double* %65
%293 = fmul double %291, %292
%294 = fdiv double %290, %293
store double %294, double* %64
%295 = load double, double* %49
%296 = load double, double* %63
%297 = fdiv double %295, %296
store double %297, double* %66
%298 = load double, double* %66
%299 = load double, double* %66
%300 = fmul double %298, %299
store double %300, double* %67
%301 = load double, double* %66
%302 = load double, double* %67
%303 = fmul double %301, %302
store double %303, double* %68
%304 = load double, double* %66
%305 = load double, double* %68
%306 = fmul double %304, %305
store double %306, double* %69
%307 = load double, double* %66
%308 = load double, double* %69
%309 = fmul double %307, %308
store double %309, double* %70
%310 = load double, double* %62
%311 = call double @llvm.fmuladd.f64(double 3.000000e+00, double %310, double 1.000000e+00)
store double %311, double* %61
%312 = load double, double* %57
%313 = load double, double* %63
%314 = load double, double* %60
%315 = fmul double %313, %314
%316 = load double, double* %64
%317 = fdiv double %315, %316
%318 = load double, double* %67
%319 = fdiv double %318, 2.000000e+00
%320 = load double, double* %61
%321 = load double, double* %69
%322 = fmul double %320, %321
%323 = fdiv double %322, 2.400000e+01
%324 = fsub double %319, %323
%325 = fneg double %317
%326 = call double @llvm.fmuladd.f64(double %325, double %324, double %312)
%327 = load double*, double** %13
store double %326, double* %327
%328 = load double, double* %16
%329 = load double, double* %66
%330 = load double, double* %62
%331 = load double, double* %68
%332 = fmul double %330, %331
%333 = fdiv double %332, 3.000000e+00
%334 = fsub double %329, %333
%335 = load double, double* %61
%336 = load double, double* %62
%337 = fmul double %335, %336
%338 = load double, double* %70
%339 = fmul double %337, %338
%340 = fdiv double %339, 1.500000e+01
%341 = fadd double %334, %340
%342 = load double, double* %59
%343 = fdiv double %341, %342
%344 = fadd double %328, %343
%345 = load double*, double** %14
store double %344, double* %345
%346 = load double*, double** %13
%347 = load double, double* %346
%348 = load double, double* %22
%349 = fcmp ogt double %347, %348
br i1 %349, label %350, label %353
350: ; preds = %268
%351 = load double, double* %22
%352 = load double*, double** %13
store double %351, double* %352
br label %364
353: ; preds = %268
%354 = load double*, double** %13
%355 = load double, double* %354
%356 = load double, double* %22
%357 = fneg double %356
%358 = fcmp olt double %355, %357
br i1 %358, label %359, label %363
359: ; preds = %353
%360 = load double, double* %22
%361 = fneg double %360
%362 = load double*, double** %13
store double %361, double* %362
br label %363
363: ; preds = %359, %353
br label %364
364: ; preds = %363, %350
%365 = load double*, double** %14
%366 = load double, double* %365
%367 = fcmp ogt double %366, 0x400921FB5444261E
br i1 %367, label %368, label %373
368: ; preds = %364
%369 = load double, double* %21
%370 = load double*, double** %14
%371 = load double, double* %370
%372 = fsub double %371, %369
store double %372, double* %370
br label %373
373: ; preds = %368, %364
%374 = load double*, double** %14
%375 = load double, double* %374
%376 = fcmp olt double %375, 0xC00921FB5444261E
br i1 %376, label %377, label %382
377: ; preds = %373
%378 = load double, double* %21
%379 = load double*, double** %14
%380 = load double, double* %379
%381 = fadd double %380, %378
store double %381, double* %379
br label %382
382: ; preds = %377, %373
%383 = load double*, double** %14
%384 = load double, double* %383
%385 = fcmp ogt double %384, 0x400921FB5444261E
br i1 %385, label %386, label %388
386: ; preds = %382
%387 = load double*, double** %14
store double 0x400921FB5444261E, double* %387
br label %395
388: ; preds = %382
%389 = load double*, double** %14
%390 = load double, double* %389
%391 = fcmp olt double %390, 0xC00921FB5444261E
br i1 %391, label %392, label %394
392: ; preds = %388
%393 = load double*, double** %14
store double 0xC00921FB5444261E, double* %393
br label %394
394: ; preds = %392, %388
br label %395
395: ; preds = %394, %386
br label %396
396: ; preds = %395, %262
br label %397
397: ; preds = %396, %243
%398 = load double*, double** %14
%399 = load double, double* %398
%400 = call double @GPS_Math_Rad_To_Deg(double %399)
%401 = load double*, double** %14
store double %400, double* %401
%402 = load double*, double** %13
%403 = load double, double* %402
%404 = call double @GPS_Math_Rad_To_Deg(double %403)
%405 = load double*, double** %13
store double %404, double* %405
ret void
}

LLVM IR (-O2):
define void @GPS_Math_Cassini_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) {
%11 = tail call double @GPS_Math_Deg_To_Rad(double %5)
%12 = tail call double @GPS_Math_Deg_To_Rad(double %4)
%13 = fmul double %8, %8
%14 = fmul double %9, %9
%15 = fsub double %13, %14
%16 = fdiv double %15, %13
%17 = fmul double %16, %16
%18 = fmul double %16, %17
%19 = fmul double %16, 2.500000e-01
%20 = fsub double 1.000000e+00, %19
%21 = insertelement <2 x double> poison, double %17, i64 0
%22 = insertelement <2 x double> %21, double %18, i64 1
%23 = fmul <2 x double> %22, <double 3.000000e+00, double 5.000000e+00>
%24 = fmul <2 x double> %23, <double 1.562500e-02, double 3.906250e-03>
%25 = extractelement <2 x double> %24, i64 0
%26 = fsub double %20, %25
%27 = extractelement <2 x double> %24, i64 1
%28 = fsub double %26, %27
%29 = fmul double %16, 3.000000e+00
%30 = fmul double %29, 1.250000e-01
%31 = extractelement <2 x double> %23, i64 0
%32 = fmul double %31, 3.125000e-02
%33 = fadd double %30, %32
%34 = fmul <2 x double> %22, <double 1.500000e+01, double 4.500000e+01>
%35 = fmul <2 x double> %34, <double 3.906250e-03, double 0x3F50000000000000>
%36 = insertelement <2 x double> poison, double %33, i64 0
%37 = shufflevector <2 x double> %36, <2 x double> %35, <2 x i32> <i32 0, i32 2>
%38 = shufflevector <2 x double> %35, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%39 = fadd <2 x double> %37, %38
%40 = fmul double %18, 3.500000e+01
%41 = fdiv double %40, 3.072000e+03
%42 = fmul double %28, %12
%43 = fmul double %12, 2.000000e+00
%44 = tail call double @sin(double %43)
%45 = fmul double %12, 4.000000e+00
%46 = tail call double @sin(double %45)
%47 = insertelement <2 x double> poison, double %44, i64 0
%48 = insertelement <2 x double> %47, double %46, i64 1
%49 = fmul <2 x double> %39, %48
%50 = fmul double %12, 6.000000e+00
%51 = tail call double @sin(double %50)
%52 = fmul double %41, %51
%53 = extractelement <2 x double> %49, i64 0
%54 = fsub double %42, %53
%55 = extractelement <2 x double> %49, i64 1
%56 = fadd double %54, %55
%57 = fsub double %56, %52
%58 = fmul double %57, %8
%59 = fsub double 1.000000e+00, %16
%60 = tail call double @pow(double %59, double 5.000000e-01)
%61 = fsub double 1.000000e+00, %60
%62 = fadd double %60, 1.000000e+00
%63 = fdiv double %61, %62
%64 = fmul double %63, %63
%65 = fmul double %63, %64
%66 = fmul double %63, %65
%67 = insertelement <2 x double> poison, double %63, i64 0
%68 = insertelement <2 x double> %67, double %64, i64 1
%69 = fmul <2 x double> %68, <double 3.000000e+00, double 2.100000e+01>
%70 = fmul <2 x double> %69, <double 5.000000e-01, double 6.250000e-02>
%71 = insertelement <2 x double> poison, double %65, i64 0
%72 = insertelement <2 x double> %71, double %66, i64 1
%73 = fmul <2 x double> %72, <double 2.700000e+01, double 5.500000e+01>
%74 = fmul <2 x double> %73, <double 3.125000e-02, double 3.125000e-02>
%75 = fsub <2 x double> %70, %74
%76 = fmul double %65, 1.510000e+02
%77 = fdiv double %76, 9.600000e+01
%78 = fmul double %66, 1.097000e+03
%79 = fmul double %78, 0x3F60000000000000
%80 = fsub double %0, %6
%81 = fsub double %1, %7
%82 = fadd double %81, %58
%83 = fmul double %28, %8
%84 = fdiv double %82, %83
%85 = fmul double %84, 2.000000e+00
%86 = tail call double @sin(double %85)
%87 = fmul double %84, 4.000000e+00
%88 = tail call double @sin(double %87)
%89 = insertelement <2 x double> poison, double %86, i64 0
%90 = insertelement <2 x double> %89, double %88, i64 1
%91 = fmul <2 x double> %90, %75
%92 = fmul double %84, 6.000000e+00
%93 = tail call double @sin(double %92)
%94 = fmul double %93, %77
%95 = fmul double %84, 8.000000e+00
%96 = tail call double @sin(double %95)
%97 = fmul double %96, %79
%98 = extractelement <2 x double> %91, i64 0
%99 = fadd double %84, %98
%100 = extractelement <2 x double> %91, i64 1
%101 = fadd double %99, %100
%102 = fadd double %94, %101
%103 = fadd double %97, %102
%104 = fcmp ogt double %103, 0x3FF921F0D7E961AC
%105 = fcmp olt double %103, 0x3FF92205D09EEA90
%106 = and i1 %104, %105
br i1 %106, label %168, label %107
107: ; preds = %10
%108 = fcmp ogt double %103, 0xBFF92205D09EEA90
%109 = fcmp olt double %103, 0xBFF921F0D7E961AC
%110 = and i1 %108, %109
br i1 %110, label %168, label %111
111: ; preds = %107
%112 = tail call double @sin(double %103)
%113 = tail call double @cos(double %103)
%114 = tail call double @tan(double %103)
%115 = fmul double %114, %114
%116 = fneg double %16
%117 = fmul double %112, %116
%118 = tail call double @llvm.fmuladd.f64(double %117, double %112, double 1.000000e+00)
%119 = tail call double @pow(double %118, double 5.000000e-01)
%120 = fdiv double %8, %119
%121 = fmul double %59, %120
%122 = fmul double %119, %119
%123 = fdiv double %121, %122
%124 = fdiv double %80, %120
%125 = fmul double %124, %124
%126 = fmul double %124, %125
%127 = fmul double %124, %126
%128 = fmul double %124, %127
%129 = tail call double @llvm.fmuladd.f64(double %115, double 3.000000e+00, double 1.000000e+00)
%130 = fmul double %125, 5.000000e-01
%131 = fmul double %129, %127
%132 = fdiv double %131, 2.400000e+01
%133 = fsub double %130, %132
%134 = fneg double %120
%135 = fmul double %114, %134
%136 = fdiv double %135, %123
%137 = tail call double @llvm.fmuladd.f64(double %136, double %133, double %103)
store double %137, double* %2
%138 = fmul double %115, %126
%139 = fdiv double %138, 3.000000e+00
%140 = fsub double %124, %139
%141 = fmul double %115, %129
%142 = fmul double %141, %128
%143 = fdiv double %142, 1.500000e+01
%144 = fadd double %140, %143
%145 = fdiv double %144, %113
%146 = fadd double %11, %145
store double %146, double* %3
%147 = load double, double* %2
%148 = fcmp ogt double %147, 0x3FF921FB5444261E
br i1 %148, label %151, label %149
149: ; preds = %111
%150 = fcmp olt double %147, 0xBFF921FB5444261E
br i1 %150, label %151, label %154
151: ; preds = %149, %111
%152 = phi double [ 0x3FF921FB5444261E, %111 ], [ 0xBFF921FB5444261E, %149 ]
store double %152, double* %2
%153 = load double, double* %3
br label %154
154: ; preds = %151, %149
%155 = phi double [ %153, %151 ], [ %146, %149 ]
%156 = fcmp ogt double %155, 0x400921FB5444261E
%157 = fadd double %155, 0xC01921FB5444261E
%158 = select i1 %156, double %157, double %155
%159 = fcmp olt double %158, 0xC00921FB5444261E
%160 = fadd double %158, 0x401921FB5444261E
%161 = select i1 %159, double %160, double %158
%162 = or i1 %156, %159
br i1 %162, label %163, label %164
163: ; preds = %154
store double %161, double* %3
br label %164
164: ; preds = %154, %163
%165 = fcmp ogt double %161, 0x400921FB5444261E
br i1 %165, label %170, label %166
166: ; preds = %164
%167 = fcmp olt double %161, 0xC00921FB5444261E
br i1 %167, label %170, label %172
168: ; preds = %107, %10
%169 = phi double [ 0x3FF921FB5444261E, %10 ], [ 0xBFF921FB5444261E, %107 ]
store double %169, double* %2
br label %170
170: ; preds = %168, %166, %164
%171 = phi double [ 0x400921FB5444261E, %164 ], [ 0xC00921FB5444261E, %166 ], [ %11, %168 ]
store double %171, double* %3
br label %172
172: ; preds = %170, %166
%173 = phi double [ %161, %166 ], [ %171, %170 ]
%174 = tail call double @GPS_Math_Rad_To_Deg(double %173)
store double %174, double* %3
%175 = load double, double* %2
%176 = tail call double @GPS_Math_Rad_To_Deg(double %175)
store double %176, double* %2
ret void
}