#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 atan2(double, double);
double cos(double);
double fabs(double);
double pow(double, double);
double sin(double);
void GPS_Math_Bonne_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 M1;
  double m1;
  double c0;
  double c1;
  double c2;
  double c3;
  double A0;
  double A1;
  double A2;
  double A3;
  double j;
  double te4;
  double E1;
  double E2;
  double E3;
  double E4;
  double x;
  double phi0s;
  double lat;
  double phi0c;
  double phi0s2;
  double phi0s4;
  double phi0s6;
  double as;
  double phis;
  double phic;
  double dx;
  double dy;
  double mu;
  double mm;
  double MM;
  double asdy;
  double rho;
  double smu2;
  double smu4;
  double smu6;
  double smu8;
  double tol;
  phi0 = GPS_Math_Deg_To_Rad(phi0);
  M0 = GPS_Math_Deg_To_Rad(M0);
  phi0s = sin(phi0);
  p2 = (double)3.141592653589 * (double)2.0;
  po2 = (double)3.141592653589 / (double)2.0;
  if (M0 > 3.141592653589)
    M0 -= p2;
  a2 = a * a;
  b2 = b * b;
  e2 = (a2 - b2) / a2;
  e4 = e2 * e2;
  e6 = e2 * e4;
  j = (double)45.0 * e6 / (double)1024.0;
  te4 = (double)3.0 * e4;
  c0 = (double)1.0 - e2 / (double)4.0 - te4 / (double)64.0 -
       (double)5.0 * e6 / (double)256.0;
  c1 = (double)3.0 * e2 / (double)8.0 + te4 / (double)32.0 + j;
  c2 = (double)15.0 * e4 / (double)256.0 + j;
  c3 = (double)35.0 * e6 / (double)3072.0;
  phi0c = cos(phi0);
  m1 = phi0c / pow(((double)1.0 - e2 * phi0s * phi0s), (double)0.5);
  lat = c0 * phi0;
  phi0s2 = c1 * sin((double)2.0 * phi0);
  phi0s4 = c2 * sin((double)4.0 * phi0);
  phi0s6 = c3 * sin((double)6.0 * phi0);
  M1 = a * (lat - phi0s2 + phi0s4 - phi0s6);
  x = pow((double)1.0 - e2, (double)0.5);
  E1 = ((double)1.0 - x) / ((double)1.0 + x);
  E2 = E1 * E1;
  E3 = E2 * E1;
  E4 = E3 * E1;
  A0 = (double)3.0 * E1 / (double)2.0 - (double)27.0 * E3 / (double)32.0;
  A1 = (double)21.0 * E2 / (double)16.0 - (double)55.0 * E4 / (double)32.0;
  A2 = (double)151.0 * E3 / (double)96.0;
  A3 = (double)1097.0 * E4 / (double)512.0;
  if (!phi0s)
    as = (double)0.0;
  else
    as = a * m1 / phi0s;
  dx = E - E0;
  dy = N - N0;
  asdy = as - dy;
  rho = pow(dx * dx + asdy * asdy, (double)0.5);
  if (phi0 < (double)0.0)
    rho = -rho;
  MM = as + M1 - rho;
  mu = MM / (a * c0);
  smu2 = A0 * sin((double)2.0 * mu);
  smu4 = A1 * sin((double)4.0 * mu);
  smu6 = A2 * sin((double)6.0 * mu);
  smu8 = A3 * sin((double)8.0 * mu);
  *phi = mu + smu2 + smu4 + smu6 + smu8;
  tol = (double)0.00001;
  if (((po2 - tol) < fabs(*phi)) && (fabs(*phi) < po2 + tol))
    *lambda = M0;
  else {
    phic = cos(*phi);
    phis = sin(*phi);
    mm = phic / pow(((double)1.0 - e2 * phis * phis), (double)0.5);
    if (phi0 < (double)0.0) {
      dx = -dx;
      asdy = -asdy;
    }
    *lambda = M0 + rho * (atan2(dx, asdy)) / (a * mm);
  }
  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_Bonne_EN_To_LatLon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x210,%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  -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  -0x28(%rbp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x118(%rbp)
ff
movsd  0xe3d(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe28(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xe0e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    120f <GPS_Math_Bonne_EN_To_LatLon+0xaf>
movsd  -0x58(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%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  0xe66(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  0xe4e(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0xdda(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x78(%rbp),%xmm1
movsd  0xde0(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xdbc(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  -0xe8(%rbp),%xmm1
ff
movsd  0xdf8(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  0xde0(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  0xdb8(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xd68(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xda3(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0xe8(%rbp),%xmm1
ff
movsd  0xd17(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xd67(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  0xd52(%rip),%xmm1
divsd  %xmm1,%xmm0
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xd2e(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  0xd16(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1070 <cos@plt>
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d8(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
mulsd  -0x118(%rbp),%xmm0
ff
movsd  -0x118(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc90(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xc8c(%rip),%xmm1
call   1080 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1d8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  0xc2b(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1d0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  0xc1a(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1c8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  0xbd9(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x120(%rbp),%xmm1
ff
subsd  -0x130(%rbp),%xmm1
ff
addsd  -0x138(%rbp),%xmm1
ff
subsd  -0x140(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xb6f(%rip),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  0xb6a(%rip),%xmm1
call   1080 <pow@plt>
movsd  %xmm0,-0x110(%rbp)
ff
movsd  0xb4d(%rip),%xmm0
subsd  -0x110(%rbp),%xmm0
ff
movsd  0xb3d(%rip),%xmm1
addsd  -0x110(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  0xad1(%rip),%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  0xab9(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xaa5(%rip),%xmm1
mulsd  -0x100(%rbp),%xmm1
ff
movsd  0xa75(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xa75(%rip),%xmm0
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  0xa5d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa49(%rip),%xmm1
mulsd  -0x108(%rbp),%xmm1
ff
movsd  0xa31(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xa11(%rip),%xmm0
mulsd  -0x100(%rbp),%xmm0
ff
movsd  0x9f9(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0x9dd(%rip),%xmm0
mulsd  -0x108(%rbp),%xmm0
ff
movsd  0x9c5(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    168a <GPS_Math_Bonne_EN_To_LatLon+0x52a>
jp     168a <GPS_Math_Bonne_EN_To_LatLon+0x52a>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
jmp    16a7 <GPS_Math_Bonne_EN_To_LatLon+0x547>
movsd  -0x48(%rbp),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
divsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
subsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
movsd  -0x160(%rbp),%xmm2
ff
movsd  -0x188(%rbp),%xmm1
ff
mulsd  -0x188(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x965(%rip),%xmm1
call   1080 <pow@plt>
movsd  %xmm0,-0x190(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    1755 <GPS_Math_Bonne_EN_To_LatLon+0x5f5>
movsd  -0x190(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
addsd  -0x90(%rbp),%xmm0
ff
subsd  -0x190(%rbp),%xmm0
ff
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x180(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm1
mulsd  -0xa0(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1f8(%rbp)
ff
movsd  0x8b2(%rip),%xmm0
mulsd  -0x170(%rbp),%xmm0
ff
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1f8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1f0(%rbp)
ff
movsd  0x89e(%rip),%xmm0
mulsd  -0x170(%rbp),%xmm0
ff
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1f0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1e8(%rbp)
ff
movsd  0x85a(%rip),%xmm0
mulsd  -0x170(%rbp),%xmm0
ff
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1e8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1e0(%rbp)
ff
movsd  0x84e(%rip),%xmm0
mulsd  -0x170(%rbp),%xmm0
ff
call   1050 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1e0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
addsd  -0x198(%rbp),%xmm0
ff
addsd  -0x1a0(%rbp),%xmm0
ff
addsd  -0x1a8(%rbp),%xmm0
ff
addsd  -0x1b0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0x81a(%rip),%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x60(%rbp),%xmm1
subsd  -0x1b8(%rbp),%xmm1
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movaps 0x80e(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    192c <GPS_Math_Bonne_EN_To_LatLon+0x7cc>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0x7f1(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
addsd  -0x1b8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    192c <GPS_Math_Bonne_EN_To_LatLon+0x7cc>
movsd  -0x30(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1a88 <GPS_Math_Bonne_EN_To_LatLon+0x928>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
call   1070 <cos@plt>
movsd  %xmm0,-0x158(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x200(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
mulsd  -0x150(%rbp),%xmm0
ff
movsd  -0x150(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x6d2(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0x6ce(%rip),%xmm1
call   1080 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x200(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    1a22 <GPS_Math_Bonne_EN_To_LatLon+0x8c2>
movsd  -0x160(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x188(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x208(%rbp)
ff
movsd  -0x190(%rbp),%xmm0
ff
movsd  %xmm0,-0x210(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
movsd  -0x188(%rbp),%xmm1
ff
call   1030 <atan2@plt>
movsd  -0x210(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x208(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
movsd  -0x48(%rbp),%xmm2
mulsd  -0x178(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd -0x60(%rbp),%xmm0
jbe    1aad <GPS_Math_Bonne_EN_To_LatLon+0x94d>
movsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1b04 <GPS_Math_Bonne_EN_To_LatLon+0x9a4>
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    1aff <GPS_Math_Bonne_EN_To_LatLon+0x99f>
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1b04 <GPS_Math_Bonne_EN_To_LatLon+0x9a4>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x4ec(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1b33 <GPS_Math_Bonne_EN_To_LatLon+0x9d3>
movsd  -0x58(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x5a1(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    1b5a <GPS_Math_Bonne_EN_To_LatLon+0x9fa>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x496(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1b89 <GPS_Math_Bonne_EN_To_LatLon+0xa29>
mov    -0x20(%rbp),%rax
movsd  0x480(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1bb4 <GPS_Math_Bonne_EN_To_LatLon+0xa54>
mov    -0x20(%rbp),%rax
movsd  0x54b(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    1baf <GPS_Math_Bonne_EN_To_LatLon+0xa4f>
mov    -0x20(%rbp),%rax
movsd  0x535(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1bb4 <GPS_Math_Bonne_EN_To_LatLon+0xa54>
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    $0x210,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPS_Math_Bonne_EN_To_LatLon>:
push   %r14
push   %rbx
sub    $0xd8,%rsp
movsd  %xmm7,(%rsp)
movsd  %xmm6,0x8(%rsp)
movsd  %xmm5,0x60(%rsp)
movsd  %xmm4,0xd0(%rsp)
movsd  %xmm3,0x10(%rsp)
mov    %rsi,%r14
mov    %rdi,%rbx
movsd  %xmm1,0xc8(%rsp)
movaps %xmm0,0xa0(%rsp)
movaps %xmm2,%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movaps %xmm0,0x20(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <GPS_Math_Deg_To_Rad@plt>
movaps %xmm0,0x10(%rsp)
movaps 0x20(%rsp),%xmm0
call   1050 <sin@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0xe2a(%rip),%xmm0
movapd 0x10(%rsp),%xmm2
addsd  %xmm2,%xmm0
movsd  0xe20(%rip),%xmm1
cmpltsd %xmm2,%xmm1
andpd  %xmm1,%xmm0
andnpd %xmm2,%xmm1
orpd   %xmm0,%xmm1
movapd %xmm1,0x90(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  %xmm0,%xmm0
movsd  (%rsp),%xmm2
mulsd  %xmm2,%xmm2
movapd %xmm0,%xmm1
subsd  %xmm2,%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm6
mulsd  %xmm1,%xmm6
movapd %xmm1,%xmm4
movapd %xmm1,%xmm3
mulsd  %xmm6,%xmm4
movsd  0xdd3(%rip),%xmm0
mulsd  %xmm4,%xmm0
mulsd  0xdcf(%rip),%xmm0
movsd  0xdcf(%rip),%xmm1
movapd %xmm6,%xmm7
mulsd  %xmm1,%xmm7
movsd  0xdc7(%rip),%xmm2
mulsd  %xmm3,%xmm2
movapd %xmm3,%xmm5
movapd %xmm3,0x10(%rsp)
addsd  0xdb9(%rip),%xmm2
movsd  0xdb9(%rip),%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm2,%xmm3
movsd  0xdb1(%rip),%xmm2
mulsd  %xmm4,%xmm2
movsd  0xdac(%rip),%xmm8
mulsd  %xmm8,%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,0x70(%rsp)
mulsd  %xmm5,%xmm1
mulsd  0xd99(%rip),%xmm1
mulsd  0xd99(%rip),%xmm7
addsd  %xmm1,%xmm7
addsd  %xmm0,%xmm7
movapd %xmm7,0x80(%rsp)
mulsd  0xd88(%rip),%xmm6
mulsd  %xmm8,%xmm6
addsd  %xmm0,%xmm6
movapd %xmm6,0x40(%rsp)
mulsd  0xd79(%rip),%xmm4
divsd  0xd79(%rip),%xmm4
movapd %xmm4,0x50(%rsp)
movaps 0x20(%rsp),%xmm0
call   1070 <cos@plt>
movsd  %xmm0,0xc0(%rsp)
movsd  0x30(%rsp),%xmm0
movapd %xmm0,%xmm1
mulsd  0x10(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xd04(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xd40(%rip),%xmm1
call   1080 <pow@plt>
movsd  %xmm0,0xb8(%rsp)
movsd  0x70(%rsp),%xmm1
movapd 0x20(%rsp),%xmm0
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
addsd  %xmm0,%xmm0
call   1050 <sin@plt>
mulsd  0x80(%rsp),%xmm0
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movsd  0xcfd(%rip),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1050 <sin@plt>
mulsd  0x40(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xce2(%rip),%xmm0
mulsd  0x20(%rsp),%xmm0
call   1050 <sin@plt>
mulsd  0x50(%rsp),%xmm0
addsd  (%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xc61(%rip),%xmm0
subsd  0x10(%rsp),%xmm0
movsd  0xc9b(%rip),%xmm1
call   1080 <pow@plt>
movsd  0xc46(%rip),%xmm2
movapd %xmm2,%xmm1
subsd  %xmm0,%xmm1
addsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm1,%xmm2
mulsd  %xmm0,%xmm2
unpcklpd %xmm1,%xmm0
mulpd  0xcea(%rip),%xmm0
mulpd  0xcf2(%rip),%xmm0
mulsd  %xmm2,%xmm1
movapd %xmm1,%xmm3
unpcklpd %xmm2,%xmm3
mulpd  0xcee(%rip),%xmm3
mulpd  0xcf6(%rip),%xmm3
addpd  %xmm0,%xmm3
movapd %xmm3,0x40(%rsp)
movsd  0x30(%rsp),%xmm0
mulsd  0xc3e(%rip),%xmm2
divsd  0xc3e(%rip),%xmm2
movapd %xmm2,0x50(%rsp)
mulsd  0xc38(%rip),%xmm1
mulsd  0xc38(%rip),%xmm1
movapd %xmm1,0x80(%rsp)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
xorpd  %xmm2,%xmm2
jne    1489 <GPS_Math_Bonne_EN_To_LatLon+0x329>
jnp    14a9 <GPS_Math_Bonne_EN_To_LatLon+0x349>
movsd  0xc0(%rsp),%xmm1
divsd  0xb8(%rsp),%xmm1
mulsd  0x8(%rsp),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm2
movapd 0xa0(%rsp),%xmm0
subsd  0xd0(%rsp),%xmm0
movsd  0xc8(%rsp),%xmm1
subsd  0x60(%rsp),%xmm1
movsd  %xmm2,0x30(%rsp)
subsd  %xmm1,%xmm2
movapd %xmm2,0x60(%rsp)
movapd %xmm2,%xmm1
mulsd  %xmm2,%xmm1
movapd %xmm0,0xa0(%rsp)
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  0xb7d(%rip),%xmm1
call   1080 <pow@plt>
movapd 0xbe8(%rip),%xmm1
xorpd  %xmm0,%xmm1
movapd 0x20(%rsp),%xmm3
cmpltsd 0xbcd(%rip),%xmm3
movapd %xmm3,%xmm2
andnpd %xmm0,%xmm2
andpd  %xmm1,%xmm3
orpd   %xmm2,%xmm3
movsd  (%rsp),%xmm1
addsd  0x30(%rsp),%xmm1
movapd %xmm3,0x30(%rsp)
subsd  %xmm3,%xmm1
movsd  0x70(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movapd %xmm1,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sin@plt>
movapd %xmm0,0x70(%rsp)
movsd  0xb10(%rip),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <sin@plt>
unpcklpd 0x70(%rsp),%xmm0
movapd 0x40(%rsp),%xmm1
mulpd  %xmm0,%xmm1
movapd %xmm1,0x40(%rsp)
movsd  0xaf0(%rip),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <sin@plt>
movapd 0x50(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,0x50(%rsp)
movsd  0xaf6(%rip),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <sin@plt>
movapd 0x80(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd 0x40(%rsp),%xmm2
movapd %xmm2,%xmm0
unpckhpd %xmm2,%xmm0
addsd  (%rsp),%xmm0
addsd  %xmm2,%xmm0
addsd  0x50(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rbx)
movapd 0xb42(%rip),%xmm1
andpd  %xmm0,%xmm1
ucomisd 0xaae(%rip),%xmm1
jbe    161e <GPS_Math_Bonne_EN_To_LatLon+0x4be>
movsd  0xaac(%rip),%xmm2
ucomisd %xmm1,%xmm2
ja     16f5 <GPS_Math_Bonne_EN_To_LatLon+0x595>
movaps 0x10(%rsp),%xmm1
xorps  0xac6(%rip),%xmm1
movaps %xmm1,0x10(%rsp)
call   1070 <cos@plt>
movsd  %xmm0,(%rsp)
movsd  (%rbx),%xmm0
call   1050 <sin@plt>
movapd 0x10(%rsp),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm1,%xmm0
addsd  0x9d8(%rip),%xmm0
movsd  0xa18(%rip),%xmm1
call   1080 <pow@plt>
xorpd  %xmm5,%xmm5
ucomisd 0x20(%rsp),%xmm5
movsd  (%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movapd 0xa6b(%rip),%xmm2
movapd 0xa0(%rsp),%xmm3
movapd %xmm3,%xmm4
xorpd  %xmm2,%xmm4
ja     16a0 <GPS_Math_Bonne_EN_To_LatLon+0x540>
movapd 0x60(%rsp),%xmm1
jmp    16aa <GPS_Math_Bonne_EN_To_LatLon+0x54a>
movapd 0x60(%rsp),%xmm1
xorpd  %xmm2,%xmm1
movapd 0x20(%rsp),%xmm0
cmpltsd %xmm5,%xmm0
andpd  %xmm0,%xmm4
andnpd %xmm3,%xmm0
orpd   %xmm4,%xmm0
call   1030 <atan2@plt>
movapd 0x30(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  (%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
divsd  %xmm0,%xmm1
movapd 0x90(%rsp),%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,0x90(%rsp)
movapd 0x90(%rsp),%xmm2
movsd  %xmm2,(%r14)
movsd  (%rbx),%xmm1
movsd  0x9b9(%rip),%xmm0
ucomisd %xmm0,%xmm1
ja     1723 <GPS_Math_Bonne_EN_To_LatLon+0x5c3>
movsd  0x9b3(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    172c <GPS_Math_Bonne_EN_To_LatLon+0x5cc>
movsd  %xmm0,(%rbx)
movsd  (%r14),%xmm2
movsd  0x8d4(%rip),%xmm3
ucomisd %xmm3,%xmm2
movsd  0x8c0(%rip),%xmm0
addsd  %xmm2,%xmm0
movapd %xmm3,%xmm1
cmpltsd %xmm2,%xmm1
andpd  %xmm1,%xmm0
andnpd %xmm2,%xmm1
orpd   %xmm0,%xmm1
movsd  0x977(%rip),%xmm2
movapd %xmm1,%xmm0
cmpltsd 0x972(%rip),%xmm0
addsd  %xmm1,%xmm2
andpd  %xmm0,%xmm2
andnpd %xmm1,%xmm0
orpd   %xmm2,%xmm0
ja     1796 <GPS_Math_Bonne_EN_To_LatLon+0x636>
movsd  0x958(%rip),%xmm2
ucomisd %xmm1,%xmm2
ja     1796 <GPS_Math_Bonne_EN_To_LatLon+0x636>
ucomisd %xmm3,%xmm0
jbe    17a1 <GPS_Math_Bonne_EN_To_LatLon+0x641>
jmp    17af <GPS_Math_Bonne_EN_To_LatLon+0x64f>
movsd  %xmm0,(%r14)
ucomisd %xmm3,%xmm0
ja     17af <GPS_Math_Bonne_EN_To_LatLon+0x64f>
movsd  0x937(%rip),%xmm3
ucomisd %xmm0,%xmm3
jbe    17b8 <GPS_Math_Bonne_EN_To_LatLon+0x658>
movsd  %xmm3,(%r14)
movapd %xmm3,%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    $0xd8,%rsp
pop    %rbx
pop    %r14
ret

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

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