#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_EN_To_LatLon(double E, double N, double *phi, double *lambda,
                           double N0, double E0, double phi0, double lambda0,
                           double F0, double a, double b) {
  double esq;
  double n;
  double etasq;
  double nu;
  double rho;
  double M;
  double VII;
  double VIII;
  double IX;
  double X;
  double XI;
  double XII;
  double XIIA;
  double phix;
  double nphi = 0.0;
  double tmp;
  double tmp2;
  double fdf;
  double fde;
  phi0 = GPS_Math_Deg_To_Rad(phi0);
  lambda0 = GPS_Math_Deg_To_Rad(lambda0);
  n = (a - b) / (a + b);
  fdf = (double)5.0 / (double)4.0;
  fde = ((double)15.0 / (double)8.0);
  esq = ((a * a) - (b * b)) / (a * a);
  phix = ((N - N0) / (a * F0)) + phi0;
  tmp = (double)1.0 - (esq * sin(phix) * sin(phix));
  nu = a * F0 * pow(tmp, (double)-0.5);
  rho = a * F0 * ((double)1.0 - esq) * pow(tmp, (double)-1.5);
  etasq = (nu / rho) - (double)1.0;
  M = (double)-1e20;
  while (N - N0 - M > (double)0.000001) {
    nphi = phix;
    tmp = (double)1.0 + n + (fdf * n * n) + (fdf * n * n * n);
    tmp *= (nphi - phi0);
    tmp2 = (double)3.0 * n + (double)3.0 * n * n +
           ((double)21. / (double)8.) * n * n * n;
    tmp2 *= (sin(nphi - phi0) * cos(nphi + phi0));
    tmp -= tmp2;
    tmp2 =
        ((fde * n * n) + (fde * n * n * n)) * sin((double)2.0 * (nphi - phi0));
    tmp2 *= cos((double)2.0 * (nphi + phi0));
    tmp += tmp2;
    tmp2 = ((double)35.0 / (double)24.0) * n * n * n;
    tmp2 *= sin((double)3.0 * (nphi - phi0));
    tmp2 *= cos((double)3.0 * (nphi + phi0));
    tmp -= tmp2;
    M = b * F0 * tmp;
    if (N - N0 - M > (double)0.000001)
      phix = ((N - N0 - M) / (a * F0)) + nphi;
  }
  VII = tan(nphi) / ((double)2.0 * rho * nu);
  tmp = (double)5.0 + (double)3.0 * tan(nphi) * tan(nphi) + etasq;
  tmp -= (double)9.0 * tan(nphi) * tan(nphi) * etasq;
  VIII = (tan(nphi) * tmp) / ((double)24.0 * rho * nu * nu * nu);
  tmp = (double)61.0 + (double)90.0 * tan(nphi) * tan(nphi);
  tmp += (double)45.0 * pow(tan(nphi), (double)4.0);
  IX = tan(nphi) / ((double)720.0 * rho * pow(nu, (double)5.0)) * tmp;
  X = (double)1.0 / (cos(nphi) * nu);
  tmp = (nu / rho) + (double)2.0 * tan(nphi) * tan(nphi);
  XI = ((double)1.0 / (cos(nphi) * (double)6.0 * nu * nu * nu)) * tmp;
  tmp = (double)5.0 + (double)28.0 * tan(nphi) * tan(nphi);
  tmp += (double)24.0 * pow(tan(nphi), (double)4.0);
  XII =
      ((double)1.0 / ((double)120.0 * pow(nu, (double)5.0) * cos(nphi))) * tmp;
  tmp = (double)61.0 + (double)662.0 * tan(nphi) * tan(nphi);
  tmp += (double)1320.0 * pow(tan(nphi), (double)4.0);
  tmp += (double)720.0 * pow(tan(nphi), (double)6.0);
  XIIA =
      ((double)1.0 / (cos(nphi) * (double)5040.0 * pow(nu, (double)7.0))) * tmp;
  *phi = nphi - VII * pow((E - E0), (double)2.0) +
         VIII * pow((E - E0), (double)4.0) - IX * pow((E - E0), (double)6.0);
  *lambda = lambda0 + X * (E - E0) - XI * pow((E - E0), (double)3.0) +
            XII * pow((E - E0), (double)5.0) -
            XIIA * pow((E - E0), (double)7.0);
  *phi = GPS_Math_Rad_To_Deg(*phi);
  *lambda = GPS_Math_Rad_To_Deg(*lambda);
  return;
}


x86 assembly (clang, -O0):
<GPS_Math_EN_To_LatLon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1d0,%rsp
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)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  -0x40(%rbp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x50(%rbp),%xmm0
subsd  0x10(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
addsd  0x10(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xe39(%rip),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0xe21(%rip),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  0x10(%rbp),%xmm1
mulsd  0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x10(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x108(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x100(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xd2a(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  0xd0c(%rip),%xmm1
call   1080 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  0xcd1(%rip),%xmm1
subsd  -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  0xcb8(%rip),%xmm1
call   1080 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  0xc85(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xc6c(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x10(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  0xc80(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    169f <GPS_Math_EN_To_LatLon+0x53f>
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xc36(%rip),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x60(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
subsd  -0x38(%rbp),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x60(%rbp),%xmm1
movsd  0xc06(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0xbf4(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xc64(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
subsd  -0x38(%rbp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
addsd  -0x38(%rbp),%xmm0
call   1070 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x118(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  -0x60(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
subsd  -0x38(%rbp),%xmm1
movsd  0xb28(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x110(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
addsd  -0x38(%rbp),%xmm1
movsd  0xaf3(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1070 <cos@plt>
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0xb1a(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
subsd  -0x38(%rbp),%xmm1
movsd  0xa76(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1040 <sin@plt>
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
addsd  -0x38(%rbp),%xmm1
movsd  0xa48(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1070 <cos@plt>
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0x10(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0x10(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  0x9cd(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    169a <GPS_Math_EN_To_LatLon+0x53a>
movsd  -0x10(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    1399 <GPS_Math_EN_To_LatLon+0x239>
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movsd  0x9ac(%rip),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  0x966(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  -0x1d0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0x92e(%rip),%xmm1
addsd  %xmm1,%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  0x97d(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  -0x1c8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  0x8e4(%rip),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  0x8c4(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0x864(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movsd  0x81b(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0xd0(%rbp),%xmm1
ff
movsd  0x856(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  0x7f1(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0x7a7(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0x1b8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1b0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1070 <cos@plt>
movaps %xmm0,%xmm1
mulsd  -0x70(%rbp),%xmm1
movsd  0x722(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  0x744(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movsd  -0x1a8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1a0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1070 <cos@plt>
movaps %xmm0,%xmm1
movsd  0x6e0(%rip),%xmm0
mulsd  %xmm0,%xmm1
mulsd  -0x70(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
movsd  0x67d(%rip),%xmm0
divsd  %xmm1,%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  0x6e9(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  -0x198(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0x659(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movsd  0x650(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0xd0(%rbp),%xmm1
ff
movsd  0x67b(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0x606(%rip),%xmm1
call   1080 <pow@plt>
movaps %xmm0,%xmm1
movsd  0x646(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1070 <cos@plt>
movsd  -0x190(%rbp),%xmm1
ff
mulsd  %xmm0,%xmm1
movsd  0x591(%rip),%xmm0
divsd  %xmm1,%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  0x5e5(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movaps %xmm0,%xmm1
movsd  -0x188(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0x5ad(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movsd  0x564(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0xd0(%rbp),%xmm1
movsd  0x56f(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1050 <tan@plt>
movsd  0x522(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0xd0(%rbp),%xmm1
ff
movsd  0x52d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1070 <cos@plt>
movsd  0x500(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0x4b7(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0x180(%rbp),%xmm1
ff
mulsd  %xmm0,%xmm1
movsd  0x46e(%rip),%xmm0
divsd  %xmm1,%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0x480(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0x178(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x170(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0x417(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0x168(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x160(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0x3c5(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0x158(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x150(%rbp),%xmm0
ff
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  -0x40(%rbp),%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x8(%rbp),%xmm2
subsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
movsd  -0x8(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0x335(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0x148(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x140(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0x2cc(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0x138(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x130(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0x27a(%rip),%xmm1
call   1080 <pow@plt>
movsd  -0x128(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x120(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
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)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1060 <GPS_Math_Rad_To_Deg@plt>
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x1d0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPS_Math_EN_To_LatLon>:
push   %r14
push   %rbx
sub    $0xc8,%rsp
movsd  %xmm7,0x80(%rsp)
movsd  %xmm6,0x50(%rsp)
movsd  %xmm5,0x10(%rsp)
movsd  %xmm3,0xb8(%rsp)
movsd  %xmm2,0x8(%rsp)
mov    %rsi,%r14
mov    %rdi,%rbx
movsd  %xmm1,0x58(%rsp)
movsd  %xmm0,0x40(%rsp)
movapd %xmm4,%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x78(%rsp)
movsd  0x10(%rsp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0xc0(%rsp)
movsd  0xe0(%rsp),%xmm0
mulsd  %xmm0,%xmm0
movsd  0x80(%rsp),%xmm3
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
movapd %xmm1,%xmm2
subsd  %xmm0,%xmm2
divsd  %xmm1,%xmm2
movsd  %xmm2,0x10(%rsp)
movsd  0x58(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x58(%rsp)
movsd  0x50(%rsp),%xmm1
mulsd  %xmm3,%xmm1
movsd  %xmm1,0x48(%rsp)
divsd  %xmm1,%xmm0
addsd  0x78(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1040 <sin@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
movsd  0x30(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xdad(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0xda3(%rip),%xmm1
call   1080 <pow@plt>
movsd  0x48(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0xd7e(%rip),%xmm0
subsd  0x10(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0xd76(%rip),%xmm1
movsd  0x30(%rsp),%xmm0
call   1080 <pow@plt>
mulsd  0x10(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
movsd  %xmm0,0x28(%rsp)
divsd  %xmm0,%xmm1
movsd  0xd55(%rip),%xmm0
movsd  %xmm1,0xb0(%rsp)
addsd  %xmm1,%xmm0
movsd  %xmm0,0x98(%rsp)
movsd  0xd3f(%rip),%xmm1
addsd  0x58(%rsp),%xmm1
xorpd  %xmm0,%xmm0
ucomisd 0xd35(%rip),%xmm1
jbe    1511 <GPS_Math_EN_To_LatLon+0x3b1>
movsd  0x80(%rsp),%xmm1
movapd %xmm1,%xmm0
movsd  0xe0(%rsp),%xmm5
subsd  %xmm5,%xmm0
addsd  %xmm5,%xmm1
divsd  %xmm1,%xmm0
movsd  0xd0d(%rip),%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm0,%xmm2
unpcklpd %xmm0,%xmm2
unpcklpd %xmm1,%xmm1
movsd  0xcc5(%rip),%xmm3
addsd  %xmm0,%xmm3
mulpd  %xmm2,%xmm1
movsd  %xmm3,%xmm1
movapd 0xd71(%rip),%xmm3
mulpd  %xmm2,%xmm3
movapd %xmm2,%xmm6
mulpd  %xmm3,%xmm6
unpcklpd %xmm0,%xmm3
movapd 0xd69(%rip),%xmm4
movsd  %xmm0,%xmm4
mulpd  %xmm3,%xmm4
addpd  %xmm1,%xmm4
mulpd  %xmm2,%xmm6
addpd  %xmm4,%xmm6
movapd %xmm6,0xa0(%rsp)
movsd  0xcac(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xca4(%rip),%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,0x20(%rsp)
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,0x60(%rsp)
movsd  0x50(%rsp),%xmm0
mulsd  %xmm5,%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0x8(%rsp),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  %xmm0,0x8(%rsp)
subsd  0x78(%rsp),%xmm0
movapd %xmm0,0x80(%rsp)
call   1040 <sin@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0x78(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
call   1070 <cos@plt>
mulsd  0x30(%rsp),%xmm0
movapd 0x80(%rsp),%xmm1
movapd %xmm1,%xmm2
unpcklpd %xmm0,%xmm2
mulpd  0xa0(%rsp),%xmm2
movapd %xmm2,%xmm0
unpckhpd %xmm2,%xmm0
subsd  %xmm0,%xmm2
movapd %xmm2,0x30(%rsp)
movapd %xmm1,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sin@plt>
mulsd  0x60(%rsp),%xmm0
movsd  %xmm0,0x90(%rsp)
movsd  0x10(%rsp),%xmm0
addsd  %xmm0,%xmm0
call   1070 <cos@plt>
mulsd  0x90(%rsp),%xmm0
addsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0xb9f(%rip),%xmm1
movapd 0x80(%rsp),%xmm0
mulsd  %xmm1,%xmm0
call   1040 <sin@plt>
mulsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x80(%rsp)
movsd  0x10(%rsp),%xmm0
mulsd  0xb70(%rip),%xmm0
call   1070 <cos@plt>
mulsd  0x80(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x50(%rsp),%xmm1
movsd  0x58(%rsp),%xmm0
subsd  %xmm1,%xmm0
ucomisd 0xb38(%rip),%xmm0
jbe    150b <GPS_Math_EN_To_LatLon+0x3ab>
divsd  0x48(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
jmp    13e0 <GPS_Math_EN_To_LatLon+0x280>
movsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1050 <tan@plt>
movsd  %xmm0,0x80(%rsp)
movsd  0x28(%rsp),%xmm0
addsd  %xmm0,%xmm0
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x78(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0xae2(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0x10(%rsp),%xmm0
addsd  0xadb(%rip),%xmm0
addsd  0x98(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
movsd  0x10(%rsp),%xmm1
mulsd  0xaaa(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  0x98(%rsp),%xmm1
addsd  0x30(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0x10(%rsp),%xmm0
movapd %xmm0,%xmm1
movsd  0x28(%rsp),%xmm0
mulsd  0xa76(%rip),%xmm0
movsd  0x18(%rsp),%xmm2
mulsd  %xmm2,%xmm0
mulsd  %xmm2,%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,0x30(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0xa4f(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0x10(%rsp),%xmm0
addsd  0xa38(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
movsd  0xa27(%rip),%xmm1
call   1080 <pow@plt>
mulsd  0xa22(%rip),%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x90(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
movsd  %xmm0,0x58(%rsp)
movsd  0x28(%rsp),%xmm0
mulsd  0x9fc(%rip),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x18(%rsp),%xmm0
movsd  0x9b0(%rip),%xmm1
call   1080 <pow@plt>
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0x8(%rsp),%xmm0
call   1070 <cos@plt>
mulsd  0x18(%rsp),%xmm0
movsd  0x93e(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
addsd  %xmm0,%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0x48(%rsp),%xmm0
addsd  0xb0(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0x8(%rsp),%xmm0
call   1070 <cos@plt>
mulsd  0x974(%rip),%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0xa0(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0x94e(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0x20(%rsp),%xmm0
addsd  0x8e7(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
movsd  0x8f6(%rip),%xmm1
call   1080 <pow@plt>
mulsd  0x8d1(%rip),%xmm0
addsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x18(%rsp),%xmm0
movsd  0x8a7(%rip),%xmm1
call   1080 <pow@plt>
mulsd  0x8ea(%rip),%xmm0
movsd  %xmm0,0x60(%rsp)
movsd  0x8(%rsp),%xmm0
call   1070 <cos@plt>
mulsd  0x60(%rsp),%xmm0
movsd  0x833(%rip),%xmm1
divsd  %xmm0,%xmm1
mulsd  0x20(%rsp),%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0x8b0(%rip),%xmm0
movsd  %xmm0,0x60(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
mulsd  0x60(%rsp),%xmm0
addsd  0x859(%rip),%xmm0
movsd  %xmm0,0x60(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
movsd  0x848(%rip),%xmm1
call   1080 <pow@plt>
mulsd  0x873(%rip),%xmm0
addsd  0x60(%rsp),%xmm0
movsd  %xmm0,0x60(%rsp)
movsd  0x8(%rsp),%xmm0
call   1050 <tan@plt>
movsd  0x834(%rip),%xmm1
call   1080 <pow@plt>
mulsd  0x81f(%rip),%xmm0
addsd  0x60(%rsp),%xmm0
movsd  %xmm0,0x60(%rsp)
movsd  0x8(%rsp),%xmm0
call   1070 <cos@plt>
mulsd  0x830(%rip),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x82a(%rip),%xmm1
movsd  0x18(%rsp),%xmm0
call   1080 <pow@plt>
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x40(%rsp),%xmm2
subsd  0xb8(%rsp),%xmm2
movapd %xmm2,%xmm0
movsd  %xmm2,0x40(%rsp)
mulsd  %xmm2,%xmm0
movsd  0x80(%rsp),%xmm1
divsd  0x78(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x8(%rsp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rsp)
movapd %xmm2,%xmm0
movsd  0x77f(%rip),%xmm1
call   1080 <pow@plt>
mulsd  0x30(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x40(%rsp),%xmm0
movsd  0x772(%rip),%xmm1
call   1080 <pow@plt>
movsd  0x58(%rsp),%xmm1
divsd  0x50(%rsp),%xmm1
mulsd  0x90(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x8(%rsp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rbx)
movsd  0x10(%rsp),%xmm1
movsd  0x40(%rsp),%xmm0
mulsd  %xmm0,%xmm1
addsd  0xc0(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0x6c7(%rip),%xmm1
call   1080 <pow@plt>
movsd  0x6a2(%rip),%xmm1
divsd  0xa0(%rsp),%xmm1
mulsd  0x48(%rsp),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0x40(%rsp),%xmm0
movsd  0x6a5(%rip),%xmm1
call   1080 <pow@plt>
mulsd  0x20(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x40(%rsp),%xmm0
movsd  0x6f0(%rip),%xmm1
call   1080 <pow@plt>
movsd  0x643(%rip),%xmm1
divsd  0x18(%rsp),%xmm1
mulsd  0x60(%rsp),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x8(%rsp),%xmm1
movsd  %xmm1,(%r14)
movsd  (%rbx),%xmm0
call   1060 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%rbx)
movsd  (%r14),%xmm0
call   1060 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%r14)
add    $0xc8,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define void @GPS_Math_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) {
%12 = tail call double @GPS_Math_Deg_To_Rad(double %6)
%13 = tail call double @GPS_Math_Deg_To_Rad(double %7)
%14 = fsub double %9, %10
%15 = fadd double %9, %10
%16 = fdiv double %14, %15
%17 = fneg double %10
%18 = fmul double %17, %10
%19 = tail call double @llvm.fmuladd.f64(double %9, double %9, double %18)
%20 = fmul double %9, %9
%21 = fdiv double %19, %20
%22 = fsub double %1, %4
%23 = fmul double %8, %9
%24 = fdiv double %22, %23
%25 = fadd double %24, %12
%26 = tail call double @sin(double %25)
%27 = tail call double @sin(double %25)
%28 = fneg double %21
%29 = fmul double %26, %28
%30 = tail call double @llvm.fmuladd.f64(double %29, double %27, double 1.000000e+00)
%31 = tail call double @pow(double %30, double -5.000000e-01)
%32 = fmul double %23, %31
%33 = fsub double 1.000000e+00, %21
%34 = fmul double %23, %33
%35 = tail call double @pow(double %30, double -1.500000e+00)
%36 = fmul double %34, %35
%37 = fdiv double %32, %36
%38 = fadd double %37, -1.000000e+00
%39 = fadd double %22, 1.000000e+20
%40 = fcmp ogt double %39, 0x3EB0C6F7A0B5ED8D
br i1 %40, label %41, label %96
41: ; preds = %11
%42 = fmul double %16, 3.000000e+00
%43 = insertelement <2 x double> poison, double %16, i64 0
%44 = shufflevector <2 x double> %43, <2 x double> poison, <2 x i32> zeroinitializer
%45 = insertelement <2 x double> <double 1.000000e+00, double poison>, double %42, i64 1
%46 = fadd <2 x double> %44, %45
%47 = fmul <2 x double> %44, %45
%48 = shufflevector <2 x double> %46, <2 x double> %47, <2 x i32> <i32 0, i32 3>
%49 = fmul <2 x double> %44, <double 1.250000e+00, double 2.625000e+00>
%50 = insertelement <2 x double> %49, double %16, i64 1
%51 = insertelement <2 x double> <double poison, double 3.000000e+00>, double %16, i64 0
%52 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %50, <2 x double> %51, <2 x double> %48)
%53 = fmul <2 x double> %44, %49
%54 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %53, <2 x double> %44, <2 x double> %52)
%55 = fmul double %16, 1.875000e+00
%56 = fmul double %16, %55
%57 = fmul double %16, %56
%58 = tail call double @llvm.fmuladd.f64(double %55, double %16, double %57)
%59 = fmul double %16, 0x3FF7555555555555
%60 = fmul double %16, %59
%61 = fmul double %16, %60
%62 = fmul double %8, %10
br label %63
63: ; preds = %93, %41
%64 = phi double [ %25, %41 ], [ %95, %93 ]
%65 = fsub double %64, %12
%66 = tail call double @sin(double %65)
%67 = fadd double %12, %64
%68 = tail call double @cos(double %67)
%69 = fmul double %66, %68
%70 = insertelement <2 x double> poison, double %65, i64 0
%71 = insertelement <2 x double> %70, double %69, i64 1
%72 = fmul <2 x double> %54, %71
%73 = shufflevector <2 x double> %72, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%74 = fsub <2 x double> %72, %73
%75 = extractelement <2 x double> %74, i64 0
%76 = fmul double %65, 2.000000e+00
%77 = tail call double @sin(double %76)
%78 = fmul double %58, %77
%79 = fmul double %67, 2.000000e+00
%80 = tail call double @cos(double %79)
%81 = fmul double %78, %80
%82 = fadd double %75, %81
%83 = fmul double %65, 3.000000e+00
%84 = tail call double @sin(double %83)
%85 = fmul double %61, %84
%86 = fmul double %67, 3.000000e+00
%87 = tail call double @cos(double %86)
%88 = fmul double %85, %87
%89 = fsub double %82, %88
%90 = fmul double %62, %89
%91 = fsub double %22, %90
%92 = fcmp ogt double %91, 0x3EB0C6F7A0B5ED8D
br i1 %92, label %93, label %96
93: ; preds = %63
%94 = fdiv double %91, %23
%95 = fadd double %64, %94
br label %63
96: ; preds = %63, %11
%97 = phi double [ 0.000000e+00, %11 ], [ %64, %63 ]
%98 = tail call double @tan(double %97)
%99 = fmul double %36, 2.000000e+00
%100 = fmul double %32, %99
%101 = tail call double @tan(double %97)
%102 = fmul double %101, 3.000000e+00
%103 = tail call double @tan(double %97)
%104 = tail call double @llvm.fmuladd.f64(double %102, double %103, double 5.000000e+00)
%105 = fadd double %38, %104
%106 = tail call double @tan(double %97)
%107 = tail call double @tan(double %97)
%108 = fmul double %106, -9.000000e+00
%109 = fmul double %108, %107
%110 = tail call double @llvm.fmuladd.f64(double %109, double %38, double %105)
%111 = tail call double @tan(double %97)
%112 = fmul double %111, %110
%113 = fmul double %36, 2.400000e+01
%114 = fmul double %32, %113
%115 = fmul double %32, %114
%116 = fmul double %32, %115
%117 = fdiv double %112, %116
%118 = tail call double @tan(double %97)
%119 = fmul double %118, 9.000000e+01
%120 = tail call double @tan(double %97)
%121 = tail call double @llvm.fmuladd.f64(double %119, double %120, double 6.100000e+01)
%122 = tail call double @tan(double %97)
%123 = tail call double @pow(double %122, double 4.000000e+00)
%124 = tail call double @llvm.fmuladd.f64(double %123, double 4.500000e+01, double %121)
%125 = tail call double @tan(double %97)
%126 = fmul double %36, 7.200000e+02
%127 = tail call double @pow(double %32, double 5.000000e+00)
%128 = fmul double %126, %127
%129 = tail call double @cos(double %97)
%130 = fmul double %32, %129
%131 = fdiv double 1.000000e+00, %130
%132 = tail call double @tan(double %97)
%133 = fmul double %132, 2.000000e+00
%134 = tail call double @tan(double %97)
%135 = tail call double @llvm.fmuladd.f64(double %133, double %134, double %37)
%136 = tail call double @cos(double %97)
%137 = fmul double %136, 6.000000e+00
%138 = fmul double %32, %137
%139 = fmul double %32, %138
%140 = fmul double %32, %139
%141 = tail call double @tan(double %97)
%142 = fmul double %141, 2.800000e+01
%143 = tail call double @tan(double %97)
%144 = tail call double @llvm.fmuladd.f64(double %142, double %143, double 5.000000e+00)
%145 = tail call double @tan(double %97)
%146 = tail call double @pow(double %145, double 4.000000e+00)
%147 = tail call double @llvm.fmuladd.f64(double %146, double 2.400000e+01, double %144)
%148 = tail call double @pow(double %32, double 5.000000e+00)
%149 = fmul double %148, 1.200000e+02
%150 = tail call double @cos(double %97)
%151 = fmul double %149, %150
%152 = fdiv double 1.000000e+00, %151
%153 = fmul double %147, %152
%154 = tail call double @tan(double %97)
%155 = fmul double %154, 6.620000e+02
%156 = tail call double @tan(double %97)
%157 = tail call double @llvm.fmuladd.f64(double %155, double %156, double 6.100000e+01)
%158 = tail call double @tan(double %97)
%159 = tail call double @pow(double %158, double 4.000000e+00)
%160 = tail call double @llvm.fmuladd.f64(double %159, double 1.320000e+03, double %157)
%161 = tail call double @tan(double %97)
%162 = tail call double @pow(double %161, double 6.000000e+00)
%163 = tail call double @llvm.fmuladd.f64(double %162, double 7.200000e+02, double %160)
%164 = tail call double @cos(double %97)
%165 = fmul double %164, 5.040000e+03
%166 = tail call double @pow(double %32, double 7.000000e+00)
%167 = fmul double %165, %166
%168 = fsub double %0, %5
%169 = fmul double %168, %168
%170 = fneg double %98
%171 = fdiv double %170, %100
%172 = tail call double @llvm.fmuladd.f64(double %171, double %169, double %97)
%173 = tail call double @pow(double %168, double 4.000000e+00)
%174 = tail call double @llvm.fmuladd.f64(double %117, double %173, double %172)
%175 = tail call double @pow(double %168, double 6.000000e+00)
%176 = fneg double %125
%177 = fdiv double %176, %128
%178 = fmul double %124, %177
%179 = tail call double @llvm.fmuladd.f64(double %178, double %175, double %174)
store double %179, double* %2
%180 = tail call double @llvm.fmuladd.f64(double %131, double %168, double %13)
%181 = tail call double @pow(double %168, double 3.000000e+00)
%182 = fdiv double -1.000000e+00, %140
%183 = fmul double %135, %182
%184 = tail call double @llvm.fmuladd.f64(double %183, double %181, double %180)
%185 = tail call double @pow(double %168, double 5.000000e+00)
%186 = tail call double @llvm.fmuladd.f64(double %153, double %185, double %184)
%187 = tail call double @pow(double %168, double 7.000000e+00)
%188 = fdiv double -1.000000e+00, %167
%189 = fmul double %163, %188
%190 = tail call double @llvm.fmuladd.f64(double %189, double %187, double %186)
store double %190, double* %3
%191 = load double, double* %2
%192 = tail call double @GPS_Math_Rad_To_Deg(double %191)
store double %192, double* %2
%193 = load double, double* %3
%194 = tail call double @GPS_Math_Rad_To_Deg(double %193)
store double %194, double* %3
ret void
}