#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 asin(double);
double cos(double);
double log(double);
double pow(double, double);
double sin(double);
void GPS_Math_Cylea_EN_To_LatLon(double E, double N, double *phi,
                                 double *lambda, double phi0, double M0,
                                 double E0, double N0, double a, double b) {
  double a2;
  double b2;
  double e;
  double e2;
  double e4;
  double e6;
  double k0;
  double ak0;
  double k2;
  double c0;
  double c1;
  double c2;
  double p2;
  double po2;
  double phi0s;
  double phi0c;
  double dx;
  double dy;
  double qp;
  double bt;
  double phis;
  double i;
  double x;
  double bs2;
  double bs4;
  double bs6;
  phi0 = GPS_Math_Deg_To_Rad(phi0);
  M0 = GPS_Math_Deg_To_Rad(M0);
  p2 = (double)3.141592653589 * (double)2.;
  po2 = (double)3.141592653589 / (double)2.;
  if (M0 > 3.141592653589)
    M0 -= p2;
  a2 = a * a;
  b2 = b * b;
  e2 = (a2 - b2) / a2;
  e4 = e2 * e2;
  e6 = e2 * e4;
  e = pow(e2, (double).5);
  c0 = e2 / (double)3. + (double)31. * e4 / (double)180. +
       (double)517. * e6 / (double)5040.;
  c1 = (double)23. * e4 / (double)360. + (double)251. * e6 / (double)3780.;
  c2 = (double)761. * e6 / (double)45360.;
  phi0s = sin(phi0);
  phi0c = cos(phi0);
  k0 = phi0c / pow((double)1. - e2 * phi0s * phi0s, (double).5);
  ak0 = a * k0;
  k2 = k0 * (double)2.;
  dx = E - E0;
  dy = N - N0;
  phis = sin(po2);
  x = e * phis;
  qp = ((double)1. - e2) * (phis / ((double)1. - x * x) -
                            ((double)1. / ((double)2. * e)) *
                                log(((double)1. - x) / ((double)1. + x)));
  i = k2 * dy / (a * qp);
  if (i > (double)1.)
    i = (double)1.;
  else if (i < (double)-1.)
    i = (double)-1.;
  bt = asin(i);
  bs2 = c0 * sin((double)2. * bt);
  bs4 = c1 * sin((double)4. * bt);
  bs6 = c2 * sin((double)6. * bt);
  *phi = bt + bs2 + bs4 + bs6;
  *lambda = M0 + dx / ak0;
  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_Cylea_EN_To_LatLon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x160,%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  0xe3f(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xe27(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  0xe0a(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1216 <GPS_Math_Cylea_EN_To_LatLon+0xa6>
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  0xdb5(%rip),%xmm1
call   1090 <pow@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  0xdf6(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xde2(%rip),%xmm1
mulsd  -0x78(%rbp),%xmm1
movsd  0xdcd(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xdb5(%rip),%xmm1
mulsd  -0x80(%rbp),%xmm1
movsd  0xda0(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xd80(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xd6b(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd57(%rip),%xmm1
mulsd  -0x80(%rbp),%xmm1
movsd  0xd42(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xd22(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  0xd0d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1070 <cos@plt>
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
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  0xc7d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xc81(%rip),%xmm1
call   1090 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x140(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xc40(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%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  -0xc0(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  0xbd2(%rip),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0x108(%rbp),%xmm1
ff
movsd  -0x108(%rbp),%xmm2
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0xb8a(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  0xb7a(%rip),%xmm1
mulsd  -0x68(%rbp),%xmm1
movsd  0xb65(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  0xb51(%rip),%xmm0
subsd  -0x108(%rbp),%xmm0
ff
movsd  0xb41(%rip),%xmm1
addsd  -0x108(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
call   1080 <log@plt>
movsd  -0x138(%rbp),%xmm1
ff
movsd  -0x130(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x128(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm1
mulsd  -0xe8(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  0xab1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1586 <GPS_Math_Cylea_EN_To_LatLon+0x416>
movsd  0xa9f(%rip),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
jmp    15b1 <GPS_Math_Cylea_EN_To_LatLon+0x441>
movsd  0xafa(%rip),%xmm0
ucomisd -0x100(%rbp),%xmm0
ff
jbe    15ac <GPS_Math_Cylea_EN_To_LatLon+0x43c>
movsd  0xae4(%rip),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
jmp    15b1 <GPS_Math_Cylea_EN_To_LatLon+0x441>
movsd  -0x100(%rbp),%xmm0
ff
call   1050 <asin@plt>
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x158(%rbp)
ff
movsd  0xa42(%rip),%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x158(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
movsd  0xa7e(%rip),%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x150(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  0xa3a(%rip),%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x148(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
addsd  -0x110(%rbp),%xmm0
ff
addsd  -0x118(%rbp),%xmm0
ff
addsd  -0x120(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
movsd  -0xd8(%rbp),%xmm1
ff
divsd  -0x90(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd -0xc0(%rbp),%xmm0
ff
jbe    16ee <GPS_Math_Cylea_EN_To_LatLon+0x57e>
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    174b <GPS_Math_Cylea_EN_To_LatLon+0x5db>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
ucomisd %xmm1,%xmm0
jbe    1746 <GPS_Math_Cylea_EN_To_LatLon+0x5d6>
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    174b <GPS_Math_Cylea_EN_To_LatLon+0x5db>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x8a5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    177d <GPS_Math_Cylea_EN_To_LatLon+0x60d>
movsd  -0xb8(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  0x917(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    17a7 <GPS_Math_Cylea_EN_To_LatLon+0x637>
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x849(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    17d6 <GPS_Math_Cylea_EN_To_LatLon+0x666>
mov    -0x20(%rbp),%rax
movsd  0x833(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1801 <GPS_Math_Cylea_EN_To_LatLon+0x691>
mov    -0x20(%rbp),%rax
movsd  0x8be(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    17fc <GPS_Math_Cylea_EN_To_LatLon+0x68c>
mov    -0x20(%rbp),%rax
movsd  0x8a8(%rip),%xmm0
movsd  %xmm0,(%rax)
jmp    1801 <GPS_Math_Cylea_EN_To_LatLon+0x691>
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    $0x160,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPS_Math_Cylea_EN_To_LatLon>:
push   %r14
push   %rbx
sub    $0x78,%rsp
movsd  %xmm7,0x20(%rsp)
movsd  %xmm6,0x8(%rsp)
movsd  %xmm5,0x30(%rsp)
movsd  %xmm4,0x28(%rsp)
movsd  %xmm3,(%rsp)
mov    %rsi,%r14
mov    %rdi,%rbx
movsd  %xmm1,0x38(%rsp)
movsd  %xmm0,0x48(%rsp)
movaps %xmm2,%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  0xe3a(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0xe36(%rip),%xmm2
cmpltsd %xmm0,%xmm2
andpd  %xmm2,%xmm1
andnpd %xmm0,%xmm2
orpd   %xmm1,%xmm2
movapd %xmm2,0x60(%rsp)
movsd  0x8(%rsp),%xmm1
mulsd  %xmm1,%xmm1
movsd  0x20(%rsp),%xmm2
mulsd  %xmm2,%xmm2
movapd %xmm1,%xmm0
subsd  %xmm2,%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rsp)
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movapd %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x20(%rsp)
movsd  0xdde(%rip),%xmm1
call   1090 <pow@plt>
movsd  0x18(%rsp),%xmm1
divsd  0xdd3(%rip),%xmm1
movsd  0xdd3(%rip),%xmm2
movsd  (%rsp),%xmm4
mulsd  %xmm4,%xmm2
divsd  0xdca(%rip),%xmm2
movsd  %xmm0,0x58(%rsp)
addsd  %xmm1,%xmm2
movsd  0xdc0(%rip),%xmm0
movsd  0x20(%rsp),%xmm3
mulsd  %xmm3,%xmm0
divsd  0xdb6(%rip),%xmm0
movapd %xmm4,%xmm1
mulsd  0xdb2(%rip),%xmm1
addsd  %xmm2,%xmm0
movsd  %xmm0,(%rsp)
divsd  0xda9(%rip),%xmm1
movapd %xmm1,%xmm2
movsd  0xda5(%rip),%xmm0
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm0
divsd  0xd9d(%rip),%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x40(%rsp)
mulsd  0xd93(%rip),%xmm1
divsd  0xd93(%rip),%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x50(%rsp)
movsd  0x10(%rsp),%xmm0
call   1070 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x50(%rsp),%xmm0
movapd %xmm0,%xmm1
mulsd  0x18(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xd57(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xceb(%rip),%xmm1
call   1090 <pow@plt>
movsd  0x10(%rsp),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
addsd  %xmm1,%xmm1
movsd  0x48(%rsp),%xmm0
subsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0x38(%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0xcf8(%rip),%xmm3
movapd %xmm3,%xmm0
subsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x58(%rsp),%xmm2
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm3,%xmm1
subsd  %xmm0,%xmm1
movapd %xmm3,%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x30(%rsp)
movapd %xmm2,%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x28(%rsp)
movapd %xmm3,%xmm0
subsd  %xmm2,%xmm0
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm0
call   1080 <log@plt>
movsd  0xca1(%rip),%xmm1
movapd %xmm1,%xmm2
divsd  0x28(%rsp),%xmm2
mulsd  %xmm0,%xmm2
movsd  0x38(%rsp),%xmm3
addsd  0x30(%rsp),%xmm2
mulsd  0x18(%rsp),%xmm2
mulsd  0x8(%rsp),%xmm2
divsd  %xmm2,%xmm3
movsd  0xc67(%rip),%xmm0
ucomisd %xmm0,%xmm3
ja     141d <GPS_Math_Cylea_EN_To_LatLon+0x2ad>
ucomisd %xmm3,%xmm1
movapd %xmm3,%xmm0
jbe    141d <GPS_Math_Cylea_EN_To_LatLon+0x2ad>
movapd %xmm1,%xmm0
call   1050 <asin@plt>
movsd  %xmm0,0x8(%rsp)
addsd  %xmm0,%xmm0
call   1040 <sin@plt>
movsd  (%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movsd  0xc39(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
movsd  0x40(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x40(%rsp)
movsd  0xc1e(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
movsd  0x20(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  (%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
addsd  0x40(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rbx)
movsd  0x48(%rsp),%xmm0
divsd  0x10(%rsp),%xmm0
movapd 0x60(%rsp),%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm2,(%r14)
movsd  (%rbx),%xmm1
movsd  0xbd1(%rip),%xmm0
ucomisd %xmm0,%xmm1
ja     14d3 <GPS_Math_Cylea_EN_To_LatLon+0x363>
movsd  0xbcb(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    14dc <GPS_Math_Cylea_EN_To_LatLon+0x36c>
movsd  %xmm0,(%rbx)
movsd  (%r14),%xmm2
movsd  0xb24(%rip),%xmm3
ucomisd %xmm3,%xmm2
movsd  0xb10(%rip),%xmm0
addsd  %xmm2,%xmm0
movapd %xmm3,%xmm1
cmpltsd %xmm2,%xmm1
andpd  %xmm1,%xmm0
andnpd %xmm2,%xmm1
orpd   %xmm0,%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     1546 <GPS_Math_Cylea_EN_To_LatLon+0x3d6>
movsd  0xb70(%rip),%xmm2
ucomisd %xmm1,%xmm2
ja     1546 <GPS_Math_Cylea_EN_To_LatLon+0x3d6>
ucomisd %xmm3,%xmm0
jbe    1551 <GPS_Math_Cylea_EN_To_LatLon+0x3e1>
jmp    155f <GPS_Math_Cylea_EN_To_LatLon+0x3ef>
movsd  %xmm0,(%r14)
ucomisd %xmm3,%xmm0
ja     155f <GPS_Math_Cylea_EN_To_LatLon+0x3ef>
movsd  0xb4f(%rip),%xmm3
ucomisd %xmm0,%xmm3
jbe    1568 <GPS_Math_Cylea_EN_To_LatLon+0x3f8>
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    $0x78,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define void @GPS_Math_Cylea_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 = tail call double @pow(double %19, double 5.000000e-01)
%23 = fdiv double %19, 3.000000e+00
%24 = fmul double %20, 3.100000e+01
%25 = fdiv double %24, 1.800000e+02
%26 = fadd double %23, %25
%27 = fmul double %21, 5.170000e+02
%28 = fdiv double %27, 5.040000e+03
%29 = fadd double %26, %28
%30 = fmul double %20, 2.300000e+01
%31 = fdiv double %30, 3.600000e+02
%32 = fmul double %21, 2.510000e+02
%33 = fdiv double %32, 3.780000e+03
%34 = fadd double %31, %33
%35 = fmul double %21, 7.610000e+02
%36 = fdiv double %35, 4.536000e+04
%37 = tail call double @sin(double %11)
%38 = tail call double @cos(double %11)
%39 = fneg double %19
%40 = fmul double %37, %39
%41 = tail call double @llvm.fmuladd.f64(double %40, double %37, double 1.000000e+00)
%42 = tail call double @pow(double %41, double 5.000000e-01)
%43 = fdiv double %38, %42
%44 = fmul double %43, %8
%45 = fmul double %43, 2.000000e+00
%46 = fsub double %0, %6
%47 = fsub double %1, %7
%48 = fsub double 1.000000e+00, %19
%49 = fneg double %22
%50 = tail call double @llvm.fmuladd.f64(double %49, double %22, double 1.000000e+00)
%51 = fdiv double 1.000000e+00, %50
%52 = fmul double %22, 2.000000e+00
%53 = fsub double 1.000000e+00, %22
%54 = fadd double %22, 1.000000e+00
%55 = fdiv double %53, %54
%56 = tail call double @log(double %55)
%57 = fdiv double -1.000000e+00, %52
%58 = tail call double @llvm.fmuladd.f64(double %57, double %56, double %51)
%59 = fmul double %48, %58
%60 = fmul double %47, %45
%61 = fmul double %59, %8
%62 = fdiv double %60, %61
%63 = fcmp ogt double %62, 1.000000e+00
br i1 %63, label %67, label %64
64: ; preds = %10
%65 = fcmp olt double %62, -1.000000e+00
br i1 %65, label %66, label %67
66: ; preds = %64
br label %67
67: ; preds = %10, %64, %66
%68 = phi double [ -1.000000e+00, %66 ], [ %62, %64 ], [ 1.000000e+00, %10 ]
%69 = tail call double @asin(double %68)
%70 = fmul double %69, 2.000000e+00
%71 = tail call double @sin(double %70)
%72 = fmul double %29, %71
%73 = fmul double %69, 4.000000e+00
%74 = tail call double @sin(double %73)
%75 = fmul double %34, %74
%76 = fmul double %69, 6.000000e+00
%77 = tail call double @sin(double %76)
%78 = fmul double %36, %77
%79 = fadd double %69, %72
%80 = fadd double %79, %75
%81 = fadd double %80, %78
store double %81, double* %2
%82 = fdiv double %46, %44
%83 = fadd double %15, %82
store double %83, double* %3
%84 = load double, double* %2
%85 = fcmp ogt double %84, 0x3FF921FB5444261E
br i1 %85, label %88, label %86
86: ; preds = %67
%87 = fcmp olt double %84, 0xBFF921FB5444261E
br i1 %87, label %88, label %91
88: ; preds = %86, %67
%89 = phi double [ 0x3FF921FB5444261E, %67 ], [ 0xBFF921FB5444261E, %86 ]
store double %89, double* %2
%90 = load double, double* %3
br label %91
91: ; preds = %88, %86
%92 = phi double [ %90, %88 ], [ %83, %86 ]
%93 = fcmp ogt double %92, 0x400921FB5444261E
%94 = fadd double %92, 0xC01921FB5444261E
%95 = select i1 %93, double %94, double %92
%96 = fcmp olt double %95, 0xC00921FB5444261E
%97 = fadd double %95, 0x401921FB5444261E
%98 = select i1 %96, double %97, double %95
%99 = or i1 %93, %96
br i1 %99, label %100, label %101
100: ; preds = %91
store double %98, double* %3
br label %101
101: ; preds = %91, %100
%102 = fcmp ogt double %98, 0x400921FB5444261E
br i1 %102, label %105, label %103
103: ; preds = %101
%104 = fcmp olt double %98, 0xC00921FB5444261E
br i1 %104, label %105, label %107
105: ; preds = %103, %101
%106 = phi double [ 0x400921FB5444261E, %101 ], [ 0xC00921FB5444261E, %103 ]
store double %106, double* %3
br label %107
107: ; preds = %105, %103
%108 = phi double [ %98, %103 ], [ %106, %105 ]
%109 = tail call double @GPS_Math_Rad_To_Deg(double %108)
store double %109, double* %3
%110 = load double, double* %2
%111 = tail call double @GPS_Math_Rad_To_Deg(double %110)
store double %111, double* %2
ret void
}