#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 asin(double);
double atan(int /*<<< orphan*/);
double cos(double);
int /*<<< orphan*/ exp(double);
double log(double);
double pow(double, double);
double sin(double);
double sqrt(double);
double tan(double);
void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double *E,
                                 double *N, double phi0, double lambda0,
                                 double E0, double N0, double a, double b) {
  double a2;
  double b2;
  double esq;
  double e;
  double c;
  double ephi0p;
  double phip;
  double sphip;
  double phid;
  double slambda2;
  double lambda1;
  double lambda2;
  double K;
  double po4;
  double w;
  double R;
  lambda0 = GPS_Math_Deg_To_Rad(lambda0);
  phi0 = GPS_Math_Deg_To_Rad(phi0);
  lambda = GPS_Math_Deg_To_Rad(lambda);
  phi = GPS_Math_Deg_To_Rad(phi);
  po4 = 3.141592653589 / (double)4.0;
  a2 = a * a;
  b2 = b * b;
  esq = (a2 - b2) / a2;
  e = pow(esq, (double)0.5);
  c = sqrt(1 + ((esq * pow(cos(phi0), (double)4.)) / ((double)1. - esq)));
  ephi0p = asin(sin(phi0) / c);
  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))));
  lambda1 = c * (lambda - lambda0);
  w = c * (log(tan(po4 + phi / (double)2.)) -
           e / (double)2. *
               log(((double)1. + e * sin(phi)) / ((double)1. - e * sin(phi)))) +
      K;
  phip = (double)2. * (atan(exp(w)) - po4);
  sphip = cos(ephi0p) * sin(phip) - sin(ephi0p) * cos(phip) * cos(lambda1);
  phid = asin(sphip);
  slambda2 = cos(phip) * sin(lambda1) / cos(phid);
  lambda2 = asin(slambda2);
  R = a * sqrt((double)1. - esq) / ((double)1. - esq * sin(phi0) * sin(phi0));
  *N = R * log(tan(po4 + phid / (double)2.)) + N0;
  *E = R * lambda2 + E0;
  return;
}


x86 assembly (clang, -O0):
<GPS_Math_Swiss_LatLon_To_EN>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1a0,%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  -0x10(%rbp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x10(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,-0x8(%rbp)
movsd  0xe01(%rip),%xmm0
movsd  %xmm0,-0xc0(%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  0xdb2(%rip),%xmm1
call   10b0 <pow@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1090 <cos@plt>
movsd  0xd81(%rip),%xmm1
call   10b0 <pow@plt>
movsd  -0x198(%rbp),%xmm1
ff
mulsd  %xmm0,%xmm1
movsd  0xd60(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  0xd4f(%rip),%xmm0
addsd  %xmm1,%xmm0
call   10c0 <sqrt@plt>
movsd  %xmm0,-0x78(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
divsd  -0x78(%rbp),%xmm0
call   1060 <asin@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm1
movsd  0xd0b(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
call   1080 <tan@plt>
call   10a0 <log@plt>
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0x28(%rbp),%xmm1
movsd  0xccf(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
call   1080 <tan@plt>
call   10a0 <log@plt>
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xca8(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x190(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0xc76(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movsd  -0x188(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x180(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0xc1d(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   10a0 <log@plt>
movsd  -0x178(%rbp),%xmm2
ff
movsd  -0x170(%rbp),%xmm3
ff
movsd  -0x168(%rbp),%xmm1
ff
movaps %xmm0,%xmm4
movsd  -0x160(%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,-0xb8(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
subsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0x8(%rbp),%xmm1
movsd  0xb62(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
call   1080 <tan@plt>
call   10a0 <log@plt>
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xb3b(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x158(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0xb09(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
call   1040 <sin@plt>
movsd  -0x150(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x148(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0xab0(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   10a0 <log@plt>
movsd  -0x140(%rbp),%xmm2
ff
movsd  -0x138(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0x130(%rbp),%xmm0
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1070 <exp@plt>
mov    %eax,%edi
call   1050 <atan@plt>
movaps %xmm0,%xmm1
subsd  -0xc0(%rbp),%xmm1
ff
movsd  0xa22(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
call   1090 <cos@plt>
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1040 <sin@plt>
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1090 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1090 <cos@plt>
movsd  -0x120(%rbp),%xmm1
ff
movsd  -0x118(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x110(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1060 <asin@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1090 <cos@plt>
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x108(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
call   1090 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x100(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
call   1060 <asin@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  0x8d2(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
call   10c0 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1040 <sin@plt>
movsd  -0xe8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xe0(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0x843(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  0x803(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
call   1080 <tan@plt>
call   10a0 <log@plt>
movaps %xmm0,%xmm2
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x1a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GPS_Math_Swiss_LatLon_To_EN>:
push   %r14
push   %rbx
sub    $0x78,%rsp
movsd  %xmm7,(%rsp)
movsd  %xmm6,0x58(%rsp)
movsd  %xmm5,0x68(%rsp)
movsd  %xmm4,0x70(%rsp)
movsd  %xmm2,0x10(%rsp)
mov    %rsi,%rbx
mov    %rdi,%r14
movsd  %xmm1,0x18(%rsp)
movsd  %xmm0,0x8(%rsp)
movaps %xmm3,%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x48(%rsp)
movsd  0x10(%rsp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x18(%rsp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x8(%rsp),%xmm0
call   1030 <GPS_Math_Deg_To_Rad@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0x58(%rsp),%xmm2
mulsd  %xmm2,%xmm2
movsd  (%rsp),%xmm1
mulsd  %xmm1,%xmm1
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0xdbc(%rip),%xmm1
call   10b0 <pow@plt>
movsd  %xmm0,(%rsp)
movsd  0x10(%rsp),%xmm0
call   1090 <cos@plt>
movsd  0xda7(%rip),%xmm1
call   10b0 <pow@plt>
movsd  0x50(%rsp),%xmm3
mulsd  %xmm3,%xmm0
movsd  0xd98(%rip),%xmm1
movapd %xmm1,%xmm2
subsd  %xmm3,%xmm2
movsd  %xmm2,0x60(%rsp)
divsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     129e <GPS_Math_Swiss_LatLon_To_EN+0xfe>
sqrtsd %xmm0,%xmm0
jmp    12a3 <GPS_Math_Swiss_LatLon_To_EN+0x103>
call   10c0 <sqrt@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <sin@plt>
divsd  0x8(%rsp),%xmm0
call   1060 <asin@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0xd33(%rip),%xmm1
mulsd  %xmm1,%xmm0
addsd  0xd3f(%rip),%xmm0
call   1080 <tan@plt>
call   10a0 <log@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0x10(%rsp),%xmm0
mulsd  0xd09(%rip),%xmm0
addsd  0xd19(%rip),%xmm0
call   1080 <tan@plt>
call   10a0 <log@plt>
movsd  %xmm0,0x38(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <sin@plt>
movapd %xmm0,%xmm1
mulsd  (%rsp),%xmm1
movsd  0xce5(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  %xmm1,0x40(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
movsd  0xcc3(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0x40(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   10a0 <log@plt>
movsd  0xcb8(%rip),%xmm1
mulsd  (%rsp),%xmm1
movsd  %xmm1,0x40(%rsp)
mulsd  %xmm1,%xmm0
addsd  0x38(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x28(%rsp),%xmm2
subsd  %xmm0,%xmm2
movsd  %xmm2,0x28(%rsp)
movsd  0x18(%rsp),%xmm0
subsd  0x48(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x20(%rsp),%xmm0
mulsd  0xc45(%rip),%xmm0
addsd  0xc55(%rip),%xmm0
call   1080 <tan@plt>
call   10a0 <log@plt>
movsd  %xmm0,0x48(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
addsd  0xc25(%rip),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
movsd  0xc07(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0x38(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   10a0 <log@plt>
mulsd  0x40(%rsp),%xmm0
addsd  0x48(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
addsd  0x28(%rsp),%xmm0
call   1070 <exp@plt>
mov    %eax,%edi
call   1050 <atan@plt>
addsd  0xbe0(%rip),%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
call   1090 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x20(%rsp)
movsd  0x30(%rsp),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x28(%rsp)
movsd  (%rsp),%xmm0
call   1090 <cos@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0x18(%rsp),%xmm0
call   1090 <cos@plt>
movsd  0x30(%rsp),%xmm1
mulsd  0x28(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x20(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
subsd  %xmm1,%xmm0
call   1060 <asin@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1090 <cos@plt>
movsd  %xmm0,(%rsp)
movsd  0x18(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x8(%rsp),%xmm0
call   1090 <cos@plt>
movsd  (%rsp),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1060 <asin@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x60(%rsp),%xmm0
ucomisd 0xb12(%rip),%xmm0
jb     1526 <GPS_Math_Swiss_LatLon_To_EN+0x386>
sqrtsd %xmm0,%xmm0
jmp    152b <GPS_Math_Swiss_LatLon_To_EN+0x38b>
call   10c0 <sqrt@plt>
mulsd  0x58(%rsp),%xmm0
movsd  %xmm0,(%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  0x50(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xaa6(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  (%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0xa76(%rip),%xmm0
addsd  0xa86(%rip),%xmm0
call   1080 <tan@plt>
call   10a0 <log@plt>
movsd  (%rsp),%xmm1
mulsd  %xmm1,%xmm0
addsd  0x68(%rsp),%xmm0
movsd  %xmm0,(%rbx)
mulsd  0x18(%rsp),%xmm1
addsd  0x70(%rsp),%xmm1
movsd  %xmm1,(%r14)
add    $0x78,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @GPS_Math_Swiss_LatLon_To_EN(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
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
%37 = load double, double* %16
%38 = call double @GPS_Math_Deg_To_Rad(double %37)
store double %38, double* %16
%39 = load double, double* %15
%40 = call double @GPS_Math_Deg_To_Rad(double %39)
store double %40, double* %15
%41 = load double, double* %12
%42 = call double @GPS_Math_Deg_To_Rad(double %41)
store double %42, double* %12
%43 = load double, double* %11
%44 = call double @GPS_Math_Deg_To_Rad(double %43)
store double %44, double* %11
store double 0x3FE921FB5444261E, double* %34
%45 = load double, double* %19
%46 = load double, double* %19
%47 = fmul double %45, %46
store double %47, double* %21
%48 = load double, double* %20
%49 = load double, double* %20
%50 = fmul double %48, %49
store double %50, double* %22
%51 = load double, double* %21
%52 = load double, double* %22
%53 = fsub double %51, %52
%54 = load double, double* %21
%55 = fdiv double %53, %54
store double %55, double* %23
%56 = load double, double* %23
%57 = call double @pow(double %56, double 5.000000e-01)
store double %57, double* %24
%58 = load double, double* %23
%59 = load double, double* %15
%60 = call double @cos(double %59)
%61 = call double @pow(double %60, double 4.000000e+00)
%62 = fmul double %58, %61
%63 = load double, double* %23
%64 = fsub double 1.000000e+00, %63
%65 = fdiv double %62, %64
%66 = fadd double 1.000000e+00, %65
%67 = call double @sqrt(double %66)
store double %67, double* %25
%68 = load double, double* %15
%69 = call double @sin(double %68)
%70 = load double, double* %25
%71 = fdiv double %69, %70
%72 = call double @asin(double %71)
store double %72, double* %26
%73 = load double, double* %34
%74 = load double, double* %26
%75 = fdiv double %74, 2.000000e+00
%76 = fadd double %73, %75
%77 = call double @tan(double %76)
%78 = call double @log(double %77)
%79 = load double, double* %25
%80 = load double, double* %34
%81 = load double, double* %15
%82 = fdiv double %81, 2.000000e+00
%83 = fadd double %80, %82
%84 = call double @tan(double %83)
%85 = call double @log(double %84)
%86 = load double, double* %24
%87 = fdiv double %86, 2.000000e+00
%88 = load double, double* %24
%89 = load double, double* %15
%90 = call double @sin(double %89)
%91 = call double @llvm.fmuladd.f64(double %88, double %90, double 1.000000e+00)
%92 = load double, double* %24
%93 = load double, double* %15
%94 = call double @sin(double %93)
%95 = fneg double %92
%96 = call double @llvm.fmuladd.f64(double %95, double %94, double 1.000000e+00)
%97 = fdiv double %91, %96
%98 = call double @log(double %97)
%99 = fneg double %87
%100 = call double @llvm.fmuladd.f64(double %99, double %98, double %85)
%101 = fneg double %79
%102 = call double @llvm.fmuladd.f64(double %101, double %100, double %78)
store double %102, double* %33
%103 = load double, double* %25
%104 = load double, double* %12
%105 = load double, double* %16
%106 = fsub double %104, %105
%107 = fmul double %103, %106
store double %107, double* %31
%108 = load double, double* %25
%109 = load double, double* %34
%110 = load double, double* %11
%111 = fdiv double %110, 2.000000e+00
%112 = fadd double %109, %111
%113 = call double @tan(double %112)
%114 = call double @log(double %113)
%115 = load double, double* %24
%116 = fdiv double %115, 2.000000e+00
%117 = load double, double* %24
%118 = load double, double* %11
%119 = call double @sin(double %118)
%120 = call double @llvm.fmuladd.f64(double %117, double %119, double 1.000000e+00)
%121 = load double, double* %24
%122 = load double, double* %11
%123 = call double @sin(double %122)
%124 = fneg double %121
%125 = call double @llvm.fmuladd.f64(double %124, double %123, double 1.000000e+00)
%126 = fdiv double %120, %125
%127 = call double @log(double %126)
%128 = fneg double %116
%129 = call double @llvm.fmuladd.f64(double %128, double %127, double %114)
%130 = load double, double* %33
%131 = call double @llvm.fmuladd.f64(double %108, double %129, double %130)
store double %131, double* %35
%132 = load double, double* %35
%133 = call i32 @exp(double %132)
%134 = call double @atan(i32 %133)
%135 = load double, double* %34
%136 = fsub double %134, %135
%137 = fmul double 2.000000e+00, %136
store double %137, double* %27
%138 = load double, double* %26
%139 = call double @cos(double %138)
%140 = load double, double* %27
%141 = call double @sin(double %140)
%142 = load double, double* %26
%143 = call double @sin(double %142)
%144 = load double, double* %27
%145 = call double @cos(double %144)
%146 = fmul double %143, %145
%147 = load double, double* %31
%148 = call double @cos(double %147)
%149 = fmul double %146, %148
%150 = fneg double %149
%151 = call double @llvm.fmuladd.f64(double %139, double %141, double %150)
store double %151, double* %28
%152 = load double, double* %28
%153 = call double @asin(double %152)
store double %153, double* %29
%154 = load double, double* %27
%155 = call double @cos(double %154)
%156 = load double, double* %31
%157 = call double @sin(double %156)
%158 = fmul double %155, %157
%159 = load double, double* %29
%160 = call double @cos(double %159)
%161 = fdiv double %158, %160
store double %161, double* %30
%162 = load double, double* %30
%163 = call double @asin(double %162)
store double %163, double* %32
%164 = load double, double* %19
%165 = load double, double* %23
%166 = fsub double 1.000000e+00, %165
%167 = call double @sqrt(double %166)
%168 = fmul double %164, %167
%169 = load double, double* %23
%170 = load double, double* %15
%171 = call double @sin(double %170)
%172 = fmul double %169, %171
%173 = load double, double* %15
%174 = call double @sin(double %173)
%175 = fneg double %172
%176 = call double @llvm.fmuladd.f64(double %175, double %174, double 1.000000e+00)
%177 = fdiv double %168, %176
store double %177, double* %36
%178 = load double, double* %36
%179 = load double, double* %34
%180 = load double, double* %29
%181 = fdiv double %180, 2.000000e+00
%182 = fadd double %179, %181
%183 = call double @tan(double %182)
%184 = call double @log(double %183)
%185 = load double, double* %18
%186 = call double @llvm.fmuladd.f64(double %178, double %184, double %185)
%187 = load double*, double** %14
store double %186, double* %187
%188 = load double, double* %36
%189 = load double, double* %32
%190 = load double, double* %17
%191 = call double @llvm.fmuladd.f64(double %188, double %189, double %190)
%192 = load double*, double** %13
store double %191, double* %192
ret void
}

LLVM IR (-O2):
define void @GPS_Math_Swiss_LatLon_To_EN(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 = tail call double @GPS_Math_Deg_To_Rad(double %1)
%14 = tail call double @GPS_Math_Deg_To_Rad(double %0)
%15 = fmul double %8, %8
%16 = fmul double %9, %9
%17 = fsub double %15, %16
%18 = fdiv double %17, %15
%19 = tail call double @pow(double %18, double 5.000000e-01)
%20 = tail call double @cos(double %12)
%21 = tail call double @pow(double %20, double 4.000000e+00)
%22 = fmul double %18, %21
%23 = fsub double 1.000000e+00, %18
%24 = fdiv double %22, %23
%25 = fadd double %24, 1.000000e+00
%26 = tail call double @sqrt(double %25)
%27 = tail call double @sin(double %12)
%28 = fdiv double %27, %26
%29 = tail call double @asin(double %28)
%30 = fmul double %29, 5.000000e-01
%31 = fadd double %30, 0x3FE921FB5444261E
%32 = tail call double @tan(double %31)
%33 = tail call double @log(double %32)
%34 = fmul double %12, 5.000000e-01
%35 = fadd double %34, 0x3FE921FB5444261E
%36 = tail call double @tan(double %35)
%37 = tail call double @log(double %36)
%38 = tail call double @sin(double %12)
%39 = tail call double @llvm.fmuladd.f64(double %19, double %38, double 1.000000e+00)
%40 = tail call double @sin(double %12)
%41 = fneg double %19
%42 = tail call double @llvm.fmuladd.f64(double %41, double %40, double 1.000000e+00)
%43 = fdiv double %39, %42
%44 = tail call double @log(double %43)
%45 = fmul double %19, -5.000000e-01
%46 = tail call double @llvm.fmuladd.f64(double %45, double %44, double %37)
%47 = fneg double %26
%48 = tail call double @llvm.fmuladd.f64(double %47, double %46, double %33)
%49 = fsub double %13, %11
%50 = fmul double %49, %26
%51 = fmul double %14, 5.000000e-01
%52 = fadd double %51, 0x3FE921FB5444261E
%53 = tail call double @tan(double %52)
%54 = tail call double @log(double %53)
%55 = tail call double @sin(double %14)
%56 = tail call double @llvm.fmuladd.f64(double %19, double %55, double 1.000000e+00)
%57 = tail call double @sin(double %14)
%58 = tail call double @llvm.fmuladd.f64(double %41, double %57, double 1.000000e+00)
%59 = fdiv double %56, %58
%60 = tail call double @log(double %59)
%61 = tail call double @llvm.fmuladd.f64(double %45, double %60, double %54)
%62 = tail call double @llvm.fmuladd.f64(double %26, double %61, double %48)
%63 = tail call i32 @exp(double %62)
%64 = tail call double @atan(i32 %63)
%65 = fadd double %64, 0xBFE921FB5444261E
%66 = fmul double %65, 2.000000e+00
%67 = tail call double @cos(double %29)
%68 = tail call double @sin(double %66)
%69 = tail call double @sin(double %29)
%70 = tail call double @cos(double %66)
%71 = tail call double @cos(double %50)
%72 = fneg double %69
%73 = fmul double %70, %72
%74 = fmul double %73, %71
%75 = tail call double @llvm.fmuladd.f64(double %67, double %68, double %74)
%76 = tail call double @asin(double %75)
%77 = tail call double @cos(double %66)
%78 = tail call double @sin(double %50)
%79 = fmul double %77, %78
%80 = tail call double @cos(double %76)
%81 = fdiv double %79, %80
%82 = tail call double @asin(double %81)
%83 = tail call double @sqrt(double %23)
%84 = fmul double %83, %8
%85 = tail call double @sin(double %12)
%86 = tail call double @sin(double %12)
%87 = fneg double %18
%88 = fmul double %85, %87
%89 = tail call double @llvm.fmuladd.f64(double %88, double %86, double 1.000000e+00)
%90 = fdiv double %84, %89
%91 = fmul double %76, 5.000000e-01
%92 = fadd double %91, 0x3FE921FB5444261E
%93 = tail call double @tan(double %92)
%94 = tail call double @log(double %93)
%95 = tail call double @llvm.fmuladd.f64(double %90, double %94, double %7)
store double %95, double* %3
%96 = tail call double @llvm.fmuladd.f64(double %90, double %82, double %6)
store double %96, double* %2
ret void
}