#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 atan(int /*<<< orphan*/);
double cos(double);
int /*<<< orphan*/ exp(double);
double fabs(double);
double log(double);
double pow(double, double);
double sin(double);
double sqrt(double);
double tan(double);
void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double *phi,
                                 double *lambda, double phi0, double lambda0,
                                 double E0, double N0, double a, double b) {
  double a2;
  double b2;
  double esq;
  double e;
  double R;
  double c;
  double po4;
  double phid;
  double phi1;
  double lambdad;
  double lambda1;
  double slambda1;
  double ephi0p;
  double sphip;
  double tol;
  double cr;
  double C;
  double K;
  lambda0 = GPS_Math_Deg_To_Rad(lambda0);
  phi0 = GPS_Math_Deg_To_Rad(phi0);
  po4 = 3.141592653589 / (double)4.0;
  tol = (double)0.00001;
  a2 = a * a;
  b2 = b * b;
  esq = (a2 - b2) / a2;
  e = pow(esq, (double)0.5);
  R = a * sqrt((double)1. - esq) / ((double)1. - esq * sin(phi0) * sin(phi0));
  phid = (double)2. * (atan(exp((N - N0) / R)) - po4);
  lambdad = (E - E0) / R;
  c = sqrt((double)1. +
           ((esq * pow(cos(phi0), (double)4.)) / ((double)1. - esq)));
  ephi0p = asin(sin(phi0) / c);
  sphip = cos(ephi0p) * sin(phid) + sin(ephi0p) * cos(phid) * cos(lambdad);
  phi1 = asin(sphip);
  slambda1 = cos(phid) * sin(lambdad) / cos(phi1);
  lambda1 = asin(slambda1);
  *lambda = GPS_Math_Rad_To_Deg((lambda1 / c + lambda0));
  K = log(tan(po4 + ephi0p / (double)2.)) -
      c * (log(tan(po4 + phi0 / (double)2.)) -
           e / (double)2. *
               log(((double)1. + e * sin(phi0)) /
                   ((double)1. - e * sin(phi0))));
  C = (K - log(tan(po4 + phi1 / (double)2.))) / c;
  do {
    cr =
        (C + log(tan(po4 + phi1 / (double)2.)) -
         e / (double)2. *
             log(((double)1. + e * sin(phi1)) / ((double)1. - e * sin(phi1)))) *
        ((((double)1. - esq * sin(phi1) * sin(phi1)) * cos(phi1)) /
         ((double)1. - esq));
    phi1 -= cr;
  } while (fabs(cr) > tol);
  *phi = GPS_Math_Rad_To_Deg(phi1);
  return;
}


x86 assembly (clang, -O0):
<GPS_Math_Swiss_EN_To_LatLon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1d0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x28(%rbp)
movsd  0xe17(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xdff(%rip),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
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,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  0xdb0(%rip),%xmm1
call   10c0 <pow@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  0xd81(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
call   10d0 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x178(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x170(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movsd  -0x168(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x160(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0xcf2(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x10(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
call   1070 <exp@plt>
mov    %eax,%edi
call   1050 <atan@plt>
movaps %xmm0,%xmm1
subsd  -0x88(%rbp),%xmm1
ff
movsd  0xcaf(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   10a0 <cos@plt>
movsd  0xc7d(%rip),%xmm1
call   10c0 <pow@plt>
movsd  -0x158(%rbp),%xmm1
ff
mulsd  %xmm0,%xmm1
movsd  0xc5c(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  0xc4b(%rip),%xmm0
addsd  %xmm1,%xmm0
call   10d0 <sqrt@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
divsd  -0x80(%rbp),%xmm0
call   1060 <asin@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
call   10a0 <cos@plt>
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   10a0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x150(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
call   10a0 <cos@plt>
movsd  -0x148(%rbp),%xmm1
ff
movsd  -0x140(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x138(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
call   1060 <asin@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   10a0 <cos@plt>
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x130(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   10a0 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1060 <asin@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x80(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
call   1090 <GPS_Math_Rad_To_Deg@plt>
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  0xabc(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
call   1080 <tan@plt>
call   10b0 <log@plt>
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x28(%rbp),%xmm1
movsd  0xa80(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
call   1080 <tan@plt>
call   10b0 <log@plt>
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xa59(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x120(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0xa27(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movsd  -0x118(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x110(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0x9ce(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   10b0 <log@plt>
movsd  -0x108(%rbp),%xmm2
ff
movsd  -0x100(%rbp),%xmm3
ff
movsd  -0xf8(%rbp),%xmm1
ff
movaps %xmm0,%xmm4
movsd  -0xf0(%rbp),%xmm0
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  0x928(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
call   1080 <tan@plt>
call   10b0 <log@plt>
movaps %xmm0,%xmm1
movsd  -0xe8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
divsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  0x8d2(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
call   1080 <tan@plt>
call   10b0 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x1c8(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0x89c(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0x867(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  -0x1b8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1b0(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0x80b(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   10b0 <log@plt>
movsd  -0x1a8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1a0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x198(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x190(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x758(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   10a0 <cos@plt>
movsd  -0x188(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x180(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
movsd  0x720(%rip),%xmm2
subsd  -0x68(%rbp),%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movaps 0x708(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd -0xc8(%rbp),%xmm0
ff
ja     1706 <GPS_Math_Swiss_EN_To_LatLon+0x556>
movsd  -0x98(%rbp),%xmm0
ff
call   1090 <GPS_Math_Rad_To_Deg@plt>
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x1d0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPS_Math_Swiss_EN_To_LatLon>:
push   %r14
push   %rbx
sub    $0xb8,%rsp
movsd  %xmm7,0x10(%rsp)
movsd  %xmm6,0x8(%rsp)
movsd  %xmm5,0x78(%rsp)
movsd  %xmm4,0x38(%rsp)
movsd  %xmm2,0x20(%rsp)
mov    %rsi,%rbx
mov    %rdi,%r14
movsd  %xmm1,0x58(%rsp)
movsd  %xmm0,0x40(%rsp)
movaps %xmm3,%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x98(%rsp)
movsd  0x20(%rsp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm2
mulsd  %xmm2,%xmm2
movsd  0x10(%rsp),%xmm1
mulsd  %xmm1,%xmm1
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
movapd %xmm0,0x10(%rsp)
movsd  0xdc6(%rip),%xmm1
call   10c0 <pow@plt>
movsd  0xdc1(%rip),%xmm1
subsd  0x10(%rsp),%xmm1
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
movapd %xmm0,0x80(%rsp)
movsd  %xmm1,0x90(%rsp)
jb     1272 <GPS_Math_Swiss_EN_To_LatLon+0xc2>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    127b <GPS_Math_Swiss_EN_To_LatLon+0xcb>
movapd %xmm1,%xmm0
call   10d0 <sqrt@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x60(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
movapd 0xd95(%rip),%xmm1
movapd 0x10(%rsp),%xmm2
xorpd  %xmm2,%xmm1
movapd %xmm1,0xa0(%rsp)
movsd  0x8(%rsp),%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xd34(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0x60(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x60(%rsp)
movsd  0x58(%rsp),%xmm0
subsd  0x78(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   1070 <exp@plt>
mov    %eax,%edi
call   1050 <atan@plt>
addsd  0xd04(%rip),%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x40(%rsp),%xmm0
subsd  0x38(%rsp),%xmm0
divsd  0x60(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x20(%rsp),%xmm0
call   10a0 <cos@plt>
movsd  0xcd7(%rip),%xmm1
call   10c0 <pow@plt>
mulsd  0x10(%rsp),%xmm0
movsd  0x90(%rsp),%xmm1
divsd  %xmm1,%xmm0
addsd  0xca7(%rip),%xmm0
ucomisd 0xccf(%rip),%xmm0
jb     1371 <GPS_Math_Swiss_EN_To_LatLon+0x1c1>
sqrtsd %xmm0,%xmm0
jmp    1376 <GPS_Math_Swiss_EN_To_LatLon+0x1c6>
call   10d0 <sqrt@plt>
movsd  %xmm0,0x38(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
divsd  0x38(%rsp),%xmm0
call   1060 <asin@plt>
movsd  %xmm0,0x60(%rsp)
call   10a0 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x78(%rsp)
movsd  0x60(%rsp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x58(%rsp)
movsd  0x8(%rsp),%xmm0
call   10a0 <cos@plt>
mulsd  0x58(%rsp),%xmm0
movsd  %xmm0,0x58(%rsp)
movsd  0x40(%rsp),%xmm0
call   10a0 <cos@plt>
mulsd  0x58(%rsp),%xmm0
movsd  0x78(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  %xmm1,%xmm0
call   1060 <asin@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   10a0 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x40(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x10(%rsp),%xmm0
call   10a0 <cos@plt>
movsd  0x40(%rsp),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1060 <asin@plt>
divsd  0x38(%rsp),%xmm0
addsd  0x98(%rsp),%xmm0
call   1090 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%rbx)
movsd  0xb92(%rip),%xmm1
movsd  0x60(%rsp),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xba0(%rip),%xmm0
call   1080 <tan@plt>
call   10b0 <log@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x20(%rsp),%xmm0
mulsd  0xb62(%rip),%xmm0
addsd  0xb7a(%rip),%xmm0
call   1080 <tan@plt>
call   10b0 <log@plt>
movsd  %xmm0,0x40(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
movapd %xmm0,%xmm1
mulsd  0x80(%rsp),%xmm1
movsd  0xb32(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  %xmm1,0x60(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
movapd 0xb4d(%rip),%xmm2
movapd 0x80(%rsp),%xmm1
xorpd  %xmm1,%xmm2
movapd %xmm2,0x20(%rsp)
mulsd  %xmm1,%xmm0
movsd  0xaf6(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0x60(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   10b0 <log@plt>
movapd 0x80(%rsp),%xmm1
mulsd  0xaf2(%rip),%xmm1
movapd %xmm1,0x60(%rsp)
mulsd  %xmm1,%xmm0
addsd  0x40(%rsp),%xmm0
mulsd  0x38(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
mulsd  0xa96(%rip),%xmm0
addsd  0xaae(%rip),%xmm0
call   1080 <tan@plt>
call   10b0 <log@plt>
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
divsd  0x38(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
movapd 0x80(%rsp),%xmm0
unpcklpd 0x20(%rsp),%xmm0
movapd %xmm0,0x80(%rsp)
nopw   0x0(%rax,%rax,1)
movsd  0x10(%rsp),%xmm0
mulsd  0xa42(%rip),%xmm0
addsd  0xa5a(%rip),%xmm0
call   1080 <tan@plt>
call   10b0 <log@plt>
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,0x40(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <sin@plt>
movapd 0x40(%rsp),%xmm1
unpcklpd %xmm0,%xmm1
mulpd  0x80(%rsp),%xmm1
addpd  0xa3e(%rip),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   10b0 <log@plt>
mulsd  0x60(%rsp),%xmm0
addsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <sin@plt>
movsd  0x20(%rsp),%xmm1
mulsd  0xa0(%rsp),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x998(%rip),%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x10(%rsp),%xmm0
call   10a0 <cos@plt>
mulsd  0x20(%rsp),%xmm0
divsd  0x90(%rsp),%xmm0
mulsd  0x40(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
andpd  0x9b2(%rip),%xmm0
ucomisd 0x97a(%rip),%xmm0
ja     15b0 <GPS_Math_Swiss_EN_To_LatLon+0x400>
movsd  0x10(%rsp),%xmm0
call   1090 <GPS_Math_Rad_To_Deg@plt>
movsd  %xmm0,(%r14)
add    $0xb8,%rsp
pop    %rbx
pop    %r14
ret

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