#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double GPS_Math_Deg_To_Rad(double);
double GPS_Math_Rad_To_Deg(double);
double atan(double);
double cos(double);
double exp(double);
double pow(double, double);
double sin(double);
void GPS_Math_Mercator_EN_To_LatLon(double E, double N, double *phi,
                                    double *lambda, double phi0, double lambda0,
                                    double E0, double N0, double a, double b) {
  double p2;
  double po2;
  double a2;
  double b2;
  double e2;
  double e4;
  double e3;
  double e;
  double es;
  double ab;
  double bb;
  double cb;
  double db;
  double ml;
  double phi0s;
  double sf;
  double dx;
  double dy;
  double x;
  phi0 = GPS_Math_Deg_To_Rad(phi0);
  lambda0 = GPS_Math_Deg_To_Rad(lambda0);
  ml = ((double)3.141592653589 * (double)89.5) / (double)180.;
  p2 = (double)3.141592653589 * (double)2.0;
  po2 = (double)3.141592653589 / (double)2.0;
  if (lambda0 > 3.141592653589)
    lambda0 -= p2;
  a2 = a * a;
  b2 = b * b;
  es = (a2 - b2) / a2;
  e2 = es * es;
  e3 = e2 * es;
  e4 = e3 * es;
  e = pow(es, (double).5);
  phi0s = sin(phi0);
  sf = (double)1. /
       (pow((double)1. - es * phi0s * phi0s, (double).5) / cos(phi0));
  ab = es / (double)2. + (double)5. * e2 / (double)24. + e3 / (double)12. +
       (double)13. * e4 / (double)360.;
  bb = (double)7. * e2 / (double)48. + (double)29. * e3 / (double)240. +
       (double)811. * e4 / (double)11520.;
  cb = (double)7. * e3 / (double)120. + (double)81. * e4 / (double)1120.;
  db = (double)4279. * e4 / (double)161280.;
  dx = E - E0;
  dy = N - N0;
  *lambda = lambda0 + dx / (sf * a);
  x = (double)3.141592653589 / (double)2. -
      (double)2. * atan((double)1. / exp(dy / (sf * a)));
  *phi = x + ab * sin((double)2. * x) + bb * sin((double)4. * x) +
         cb * sin((double)6. * x) + db * sin((double)8. * x);
  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_Mercator_EN_To_LatLon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%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   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x28(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  0xe47(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xe2f(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe1a(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xe00(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    121d <GPS_Math_Mercator_EN_To_LatLon+0xad>
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,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
movsd  0xe27(%rip),%xmm1
call   1090 <pow@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xd45(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xdc1(%rip),%xmm1
call   1090 <pow@plt>
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1080 <cos@plt>
movsd  -0x130(%rbp),%xmm1
ff
divsd  %xmm0,%xmm1
movsd  0xd0e(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  0xcea(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd66(%rip),%xmm1
mulsd  -0x78(%rbp),%xmm1
movsd  0xd51(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0x88(%rbp),%xmm1
ff
movsd  0xd31(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xd19(%rip),%xmm1
mulsd  -0x80(%rbp),%xmm1
movsd  0xd04(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xcbc(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xcd7(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xcc3(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  0xcab(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xc93(%rip),%xmm1
mulsd  -0x80(%rbp),%xmm1
movsd  0xc7e(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xc5e(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  0xc46(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xc32(%rip),%xmm1
mulsd  -0x80(%rbp),%xmm1
movsd  0xc1d(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xbfd(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  0xbe8(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm2
ff
mulsd  -0x48(%rbp),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1060 <exp@plt>
movaps %xmm0,%xmm1
movsd  0xb5d(%rip),%xmm0
divsd  %xmm1,%xmm0
call   1050 <atan@plt>
movaps %xmm0,%xmm1
addsd  %xmm1,%xmm1
movsd  0xb0d(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movsd  0xb09(%rip),%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  -0x128(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x120(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  0xab9(%rip),%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  -0x118(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x110(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  0xa69(%rip),%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  -0x108(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x100(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  0xa19(%rip),%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  -0xf8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd -0x60(%rbp),%xmm0
jbe    165c <GPS_Math_Mercator_EN_To_LatLon+0x4ec>
movsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    16b3 <GPS_Math_Mercator_EN_To_LatLon+0x543>
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    16ae <GPS_Math_Mercator_EN_To_LatLon+0x53e>
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    16b3 <GPS_Math_Mercator_EN_To_LatLon+0x543>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x93d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16e2 <GPS_Math_Mercator_EN_To_LatLon+0x572>
movsd  -0x58(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x9e2(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    1709 <GPS_Math_Mercator_EN_To_LatLon+0x599>
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x8e7(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1738 <GPS_Math_Mercator_EN_To_LatLon+0x5c8>
mov    -0x20(%rbp),%rax
movsd  0x8d1(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1763 <GPS_Math_Mercator_EN_To_LatLon+0x5f3>
mov    -0x20(%rbp),%rax
movsd  0x98c(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    175e <GPS_Math_Mercator_EN_To_LatLon+0x5ee>
mov    -0x20(%rbp),%rax
movsd  0x976(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1763 <GPS_Math_Mercator_EN_To_LatLon+0x5f3>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1070 <GPS_Math_Rad_To_Deg@plt>
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
call   1070 <GPS_Math_Rad_To_Deg@plt>
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPS_Math_Mercator_EN_To_LatLon>:
push   %r14
push   %rbx
sub    $0xa8,%rsp
movsd  %xmm7,0x30(%rsp)
movsd  %xmm6,0x8(%rsp)
movsd  %xmm5,0x78(%rsp)
movsd  %xmm4,0x70(%rsp)
movsd  %xmm3,0x10(%rsp)
mov    %rsi,%rbx
mov    %rdi,%r14
movsd  %xmm1,0x68(%rsp)
movsd  %xmm0,0x60(%rsp)
movaps %xmm2,%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x40(%rsp)
movsd  0x10(%rsp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  0xe35(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0xe31(%rip),%xmm2
cmpltsd %xmm0,%xmm2
andpd  %xmm2,%xmm1
andnpd %xmm0,%xmm2
orpd   %xmm1,%xmm2
movapd %xmm2,0x90(%rsp)
movsd  0x8(%rsp),%xmm1
mulsd  %xmm1,%xmm1
movsd  0x30(%rsp),%xmm2
mulsd  %xmm2,%xmm2
movapd %xmm1,%xmm0
subsd  %xmm2,%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rsp)
movapd %xmm0,%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm2,0x10(%rsp)
movapd %xmm0,%xmm1
mulsd  %xmm2,%xmm1
movapd %xmm1,0x80(%rsp)
movapd %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,0x30(%rsp)
movsd  0xdc4(%rip),%xmm1
call   1090 <pow@plt>
movsd  0x40(%rsp),%xmm0
call   1040 <sin@plt>
movapd %xmm0,%xmm1
mulsd  0x20(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xda6(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xd92(%rip),%xmm1
call   1090 <pow@plt>
movsd  %xmm0,0x58(%rsp)
movsd  0x40(%rsp),%xmm0
call   1080 <cos@plt>
movsd  0x58(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  0xd72(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  0xd6e(%rip),%xmm1
movapd 0x10(%rsp),%xmm6
mulsd  %xmm6,%xmm1
divsd  0xd64(%rip),%xmm1
movsd  0x20(%rsp),%xmm2
mulsd  0xd3e(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  0xd52(%rip),%xmm2
movapd 0x30(%rsp),%xmm3
mulsd  %xmm3,%xmm2
movapd 0x80(%rsp),%xmm7
movapd %xmm7,%xmm4
unpcklpd %xmm2,%xmm4
divpd  0xd8f(%rip),%xmm4
addsd  %xmm4,%xmm1
movapd %xmm4,%xmm5
movsd  0xd27(%rip),%xmm2
movapd %xmm7,%xmm4
mulsd  %xmm7,%xmm2
divsd  0xd1f(%rip),%xmm2
unpckhpd %xmm5,%xmm5
unpcklpd %xmm3,%xmm6
mulpd  0xd6f(%rip),%xmm6
addsd  %xmm1,%xmm5
movapd %xmm5,0x20(%rsp)
movapd %xmm6,%xmm1
divpd  0xd69(%rip),%xmm1
addsd  %xmm1,%xmm2
unpckhpd %xmm1,%xmm1
unpcklpd %xmm3,%xmm4
mulpd  0xd65(%rip),%xmm4
addsd  %xmm2,%xmm1
movapd %xmm1,0x10(%rsp)
movapd %xmm4,%xmm1
divpd  0xd5f(%rip),%xmm1
movapd %xmm1,%xmm4
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm4
movapd %xmm3,%xmm1
mulsd  0xcbf(%rip),%xmm1
divsd  0xcbf(%rip),%xmm1
movapd %xmm1,0x30(%rsp)
addsd  %xmm2,%xmm4
movapd %xmm4,0x40(%rsp)
movsd  0x60(%rsp),%xmm2
subsd  0x70(%rsp),%xmm2
movsd  0x68(%rsp),%xmm1
subsd  0x78(%rsp),%xmm1
mulsd  0x8(%rsp),%xmm0
divsd  %xmm0,%xmm2
addsd  0x90(%rsp),%xmm2
movsd  %xmm2,(%rbx)
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1060 <exp@plt>
movsd  0xc33(%rip),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1050 <atan@plt>
addsd  %xmm0,%xmm0
movsd  0xc5a(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movapd %xmm1,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sin@plt>
mulsd  0x20(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0xc2d(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1040 <sin@plt>
mulsd  0x10(%rsp),%xmm0
addsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0xc12(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  0x40(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xbef(%rip),%xmm0
call   1040 <sin@plt>
movsd  0xbca(%rip),%xmm1
mulsd  0x30(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,(%r14)
ucomisd %xmm1,%xmm0
ja     14b3 <GPS_Math_Mercator_EN_To_LatLon+0x343>
movsd  0xbcb(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    14b8 <GPS_Math_Mercator_EN_To_LatLon+0x348>
movsd  %xmm1,(%r14)
movsd  (%rbx),%xmm0
movsd  0xb44(%rip),%xmm3
ucomisd %xmm3,%xmm0
movsd  0xb30(%rip),%xmm2
addsd  %xmm0,%xmm2
movapd %xmm3,%xmm1
cmpltsd %xmm0,%xmm1
andpd  %xmm1,%xmm2
andnpd %xmm0,%xmm1
orpd   %xmm2,%xmm1
movsd  0xb8f(%rip),%xmm2
movapd %xmm1,%xmm0
cmpltsd 0xb8a(%rip),%xmm0
addsd  %xmm1,%xmm2
andpd  %xmm0,%xmm2
andnpd %xmm1,%xmm0
orpd   %xmm2,%xmm0
ja     1526 <GPS_Math_Mercator_EN_To_LatLon+0x3b6>
movsd  0xb70(%rip),%xmm2
ucomisd %xmm1,%xmm2
ja     1526 <GPS_Math_Mercator_EN_To_LatLon+0x3b6>
ucomisd %xmm3,%xmm0
jbe    1530 <GPS_Math_Mercator_EN_To_LatLon+0x3c0>
jmp    153e <GPS_Math_Mercator_EN_To_LatLon+0x3ce>
movsd  %xmm0,(%rbx)
ucomisd %xmm3,%xmm0
ja     153e <GPS_Math_Mercator_EN_To_LatLon+0x3ce>
movsd  0xb50(%rip),%xmm3
ucomisd %xmm0,%xmm3
jbe    1546 <GPS_Math_Mercator_EN_To_LatLon+0x3d6>
movsd  %xmm3,(%rbx)
movapd %xmm3,%xmm0
call   1070 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%rbx)
movsd  (%r14),%xmm0
call   1070 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%r14)
add    $0xa8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @GPS_Math_Mercator_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
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
%40 = load double, double* %15
%41 = call double @GPS_Math_Deg_To_Rad(double %40)
store double %41, double* %15
%42 = load double, double* %16
%43 = call double @GPS_Math_Deg_To_Rad(double %42)
store double %43, double* %16
store double 0x3FF8FE3CC6FF80EE, double* %34
store double 0x401921FB5444261E, double* %21
store double 0x3FF921FB5444261E, double* %22
%44 = load double, double* %16
%45 = fcmp ogt double %44, 0x400921FB5444261E
br i1 %45, label %46, label %50
46: ; preds = %10
%47 = load double, double* %21
%48 = load double, double* %16
%49 = fsub double %48, %47
store double %49, double* %16
br label %50
50: ; preds = %46, %10
%51 = load double, double* %19
%52 = load double, double* %19
%53 = fmul double %51, %52
store double %53, double* %23
%54 = load double, double* %20
%55 = load double, double* %20
%56 = fmul double %54, %55
store double %56, double* %24
%57 = load double, double* %23
%58 = load double, double* %24
%59 = fsub double %57, %58
%60 = load double, double* %23
%61 = fdiv double %59, %60
store double %61, double* %29
%62 = load double, double* %29
%63 = load double, double* %29
%64 = fmul double %62, %63
store double %64, double* %25
%65 = load double, double* %25
%66 = load double, double* %29
%67 = fmul double %65, %66
store double %67, double* %27
%68 = load double, double* %27
%69 = load double, double* %29
%70 = fmul double %68, %69
store double %70, double* %26
%71 = load double, double* %29
%72 = call double @pow(double %71, double 5.000000e-01)
store double %72, double* %28
%73 = load double, double* %15
%74 = call double @sin(double %73)
store double %74, double* %35
%75 = load double, double* %29
%76 = load double, double* %35
%77 = fmul double %75, %76
%78 = load double, double* %35
%79 = fneg double %77
%80 = call double @llvm.fmuladd.f64(double %79, double %78, double 1.000000e+00)
%81 = call double @pow(double %80, double 5.000000e-01)
%82 = load double, double* %15
%83 = call double @cos(double %82)
%84 = fdiv double %81, %83
%85 = fdiv double 1.000000e+00, %84
store double %85, double* %36
%86 = load double, double* %29
%87 = fdiv double %86, 2.000000e+00
%88 = load double, double* %25
%89 = fmul double 5.000000e+00, %88
%90 = fdiv double %89, 2.400000e+01
%91 = fadd double %87, %90
%92 = load double, double* %27
%93 = fdiv double %92, 1.200000e+01
%94 = fadd double %91, %93
%95 = load double, double* %26
%96 = fmul double 1.300000e+01, %95
%97 = fdiv double %96, 3.600000e+02
%98 = fadd double %94, %97
store double %98, double* %30
%99 = load double, double* %25
%100 = fmul double 7.000000e+00, %99
%101 = fdiv double %100, 4.800000e+01
%102 = load double, double* %27
%103 = fmul double 2.900000e+01, %102
%104 = fdiv double %103, 2.400000e+02
%105 = fadd double %101, %104
%106 = load double, double* %26
%107 = fmul double 8.110000e+02, %106
%108 = fdiv double %107, 1.152000e+04
%109 = fadd double %105, %108
store double %109, double* %31
%110 = load double, double* %27
%111 = fmul double 7.000000e+00, %110
%112 = fdiv double %111, 1.200000e+02
%113 = load double, double* %26
%114 = fmul double 8.100000e+01, %113
%115 = fdiv double %114, 1.120000e+03
%116 = fadd double %112, %115
store double %116, double* %32
%117 = load double, double* %26
%118 = fmul double 4.279000e+03, %117
%119 = fdiv double %118, 1.612800e+05
store double %119, double* %33
%120 = load double, double* %11
%121 = load double, double* %17
%122 = fsub double %120, %121
store double %122, double* %37
%123 = load double, double* %12
%124 = load double, double* %18
%125 = fsub double %123, %124
store double %125, double* %38
%126 = load double, double* %16
%127 = load double, double* %37
%128 = load double, double* %36
%129 = load double, double* %19
%130 = fmul double %128, %129
%131 = fdiv double %127, %130
%132 = fadd double %126, %131
%133 = load double*, double** %14
store double %132, double* %133
%134 = load double, double* %38
%135 = load double, double* %36
%136 = load double, double* %19
%137 = fmul double %135, %136
%138 = fdiv double %134, %137
%139 = call double @exp(double %138)
%140 = fdiv double 1.000000e+00, %139
%141 = call double @atan(double %140)
%142 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %141, double 0x3FF921FB5444261E)
store double %142, double* %39
%143 = load double, double* %39
%144 = load double, double* %30
%145 = load double, double* %39
%146 = fmul double 2.000000e+00, %145
%147 = call double @sin(double %146)
%148 = call double @llvm.fmuladd.f64(double %144, double %147, double %143)
%149 = load double, double* %31
%150 = load double, double* %39
%151 = fmul double 4.000000e+00, %150
%152 = call double @sin(double %151)
%153 = call double @llvm.fmuladd.f64(double %149, double %152, double %148)
%154 = load double, double* %32
%155 = load double, double* %39
%156 = fmul double 6.000000e+00, %155
%157 = call double @sin(double %156)
%158 = call double @llvm.fmuladd.f64(double %154, double %157, double %153)
%159 = load double, double* %33
%160 = load double, double* %39
%161 = fmul double 8.000000e+00, %160
%162 = call double @sin(double %161)
%163 = call double @llvm.fmuladd.f64(double %159, double %162, double %158)
%164 = load double*, double** %13
store double %163, double* %164
%165 = load double*, double** %13
%166 = load double, double* %165
%167 = load double, double* %22
%168 = fcmp ogt double %166, %167
br i1 %168, label %169, label %172
169: ; preds = %50
%170 = load double, double* %22
%171 = load double*, double** %13
store double %170, double* %171
br label %183
172: ; preds = %50
%173 = load double*, double** %13
%174 = load double, double* %173
%175 = load double, double* %22
%176 = fneg double %175
%177 = fcmp olt double %174, %176
br i1 %177, label %178, label %182
178: ; preds = %172
%179 = load double, double* %22
%180 = fneg double %179
%181 = load double*, double** %13
store double %180, double* %181
br label %182
182: ; preds = %178, %172
br label %183
183: ; preds = %182, %169
%184 = load double*, double** %14
%185 = load double, double* %184
%186 = fcmp ogt double %185, 0x400921FB5444261E
br i1 %186, label %187, label %192
187: ; preds = %183
%188 = load double, double* %21
%189 = load double*, double** %14
%190 = load double, double* %189
%191 = fsub double %190, %188
store double %191, double* %189
br label %192
192: ; preds = %187, %183
%193 = load double*, double** %14
%194 = load double, double* %193
%195 = fcmp olt double %194, 0xC00921FB5444261E
br i1 %195, label %196, label %201
196: ; preds = %192
%197 = load double, double* %21
%198 = load double*, double** %14
%199 = load double, double* %198
%200 = fadd double %199, %197
store double %200, double* %198
br label %201
201: ; preds = %196, %192
%202 = load double*, double** %14
%203 = load double, double* %202
%204 = fcmp ogt double %203, 0x400921FB5444261E
br i1 %204, label %205, label %207
205: ; preds = %201
%206 = load double*, double** %14
store double 0x400921FB5444261E, double* %206
br label %214
207: ; preds = %201
%208 = load double*, double** %14
%209 = load double, double* %208
%210 = fcmp olt double %209, 0xC00921FB5444261E
br i1 %210, label %211, label %213
211: ; preds = %207
%212 = load double*, double** %14
store double 0xC00921FB5444261E, double* %212
br label %213
213: ; preds = %211, %207
br label %214
214: ; preds = %213, %205
%215 = load double*, double** %14
%216 = load double, double* %215
%217 = call double @GPS_Math_Rad_To_Deg(double %216)
%218 = load double*, double** %14
store double %217, double* %218
%219 = load double*, double** %13
%220 = load double, double* %219
%221 = call double @GPS_Math_Rad_To_Deg(double %220)
%222 = load double*, double** %13
store double %221, double* %222
ret void
}

LLVM IR (-O2):
define void @GPS_Math_Mercator_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 = fcmp ogt double %12, 0x400921FB5444261E
%14 = fadd double %12, 0xC01921FB5444261E
%15 = select i1 %13, double %14, double %12
%16 = fmul double %8, %8
%17 = fmul double %9, %9
%18 = fsub double %16, %17
%19 = fdiv double %18, %16
%20 = fmul double %19, %19
%21 = fmul double %19, %20
%22 = fmul double %19, %21
%23 = tail call double @pow(double %19, double 5.000000e-01)
%24 = tail call double @sin(double %11)
%25 = fneg double %19
%26 = fmul double %24, %25
%27 = tail call double @llvm.fmuladd.f64(double %26, double %24, double 1.000000e+00)
%28 = tail call double @pow(double %27, double 5.000000e-01)
%29 = tail call double @cos(double %11)
%30 = fdiv double %28, %29
%31 = fdiv double 1.000000e+00, %30
%32 = fmul double %19, 5.000000e-01
%33 = fmul double %20, 5.000000e+00
%34 = fdiv double %33, 2.400000e+01
%35 = fadd double %32, %34
%36 = fmul double %22, 1.300000e+01
%37 = insertelement <2 x double> poison, double %21, i64 0
%38 = insertelement <2 x double> %37, double %36, i64 1
%39 = fdiv <2 x double> %38, <double 1.200000e+01, double 3.600000e+02>
%40 = extractelement <2 x double> %39, i64 0
%41 = fadd double %40, %35
%42 = extractelement <2 x double> %39, i64 1
%43 = fadd double %41, %42
%44 = fmul double %21, 2.900000e+01
%45 = fdiv double %44, 2.400000e+02
%46 = insertelement <2 x double> poison, double %20, i64 0
%47 = insertelement <2 x double> %46, double %22, i64 1
%48 = fmul <2 x double> %47, <double 7.000000e+00, double 8.110000e+02>
%49 = fdiv <2 x double> %48, <double 4.800000e+01, double 1.152000e+04>
%50 = extractelement <2 x double> %49, i64 0
%51 = fadd double %50, %45
%52 = extractelement <2 x double> %49, i64 1
%53 = fadd double %51, %52
%54 = insertelement <2 x double> %37, double %22, i64 1
%55 = fmul <2 x double> %54, <double 7.000000e+00, double 8.100000e+01>
%56 = fdiv <2 x double> %55, <double 1.200000e+02, double 1.120000e+03>
%57 = shufflevector <2 x double> %56, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%58 = fadd <2 x double> %56, %57
%59 = extractelement <2 x double> %58, i64 0
%60 = fmul double %22, 4.279000e+03
%61 = fdiv double %60, 1.612800e+05
%62 = fsub double %0, %6
%63 = fsub double %1, %7
%64 = fmul double %31, %8
%65 = fdiv double %62, %64
%66 = fadd double %15, %65
store double %66, double* %3
%67 = fdiv double %63, %64
%68 = tail call double @exp(double %67)
%69 = fdiv double 1.000000e+00, %68
%70 = tail call double @atan(double %69)
%71 = tail call double @llvm.fmuladd.f64(double %70, double -2.000000e+00, double 0x3FF921FB5444261E)
%72 = fmul double %71, 2.000000e+00
%73 = tail call double @sin(double %72)
%74 = tail call double @llvm.fmuladd.f64(double %43, double %73, double %71)
%75 = fmul double %71, 4.000000e+00
%76 = tail call double @sin(double %75)
%77 = tail call double @llvm.fmuladd.f64(double %53, double %76, double %74)
%78 = fmul double %71, 6.000000e+00
%79 = tail call double @sin(double %78)
%80 = tail call double @llvm.fmuladd.f64(double %59, double %79, double %77)
%81 = fmul double %71, 8.000000e+00
%82 = tail call double @sin(double %81)
%83 = tail call double @llvm.fmuladd.f64(double %61, double %82, double %80)
store double %83, double* %2
%84 = fcmp ogt double %83, 0x3FF921FB5444261E
br i1 %84, label %87, label %85
85: ; preds = %10
%86 = fcmp olt double %83, 0xBFF921FB5444261E
br i1 %86, label %87, label %89
87: ; preds = %85, %10
%88 = phi double [ 0x3FF921FB5444261E, %10 ], [ 0xBFF921FB5444261E, %85 ]
store double %88, double* %2
br label %89
89: ; preds = %87, %85
%90 = load double, double* %3
%91 = fcmp ogt double %90, 0x400921FB5444261E
%92 = fadd double %90, 0xC01921FB5444261E
%93 = select i1 %91, double %92, double %90
%94 = fcmp olt double %93, 0xC00921FB5444261E
%95 = fadd double %93, 0x401921FB5444261E
%96 = select i1 %94, double %95, double %93
%97 = or i1 %91, %94
br i1 %97, label %98, label %99
98: ; preds = %89
store double %96, double* %3
br label %99
99: ; preds = %89, %98
%100 = fcmp ogt double %96, 0x400921FB5444261E
br i1 %100, label %103, label %101
101: ; preds = %99
%102 = fcmp olt double %96, 0xC00921FB5444261E
br i1 %102, label %103, label %105
103: ; preds = %101, %99
%104 = phi double [ 0x400921FB5444261E, %99 ], [ 0xC00921FB5444261E, %101 ]
store double %104, double* %3
br label %105
105: ; preds = %103, %101
%106 = phi double [ %96, %101 ], [ %104, %103 ]
%107 = tail call double @GPS_Math_Rad_To_Deg(double %106)
store double %107, double* %3
%108 = load double, double* %2
%109 = tail call double @GPS_Math_Rad_To_Deg(double %108)
store double %109, double* %2
ret void
}