void latlon2utm(double lat, double lon, double *yptr, double *xptr) {
  double a, b, k0, e, e1s, es, n, rho, nu, p, sin1, A1, B1, C1, D1, E1, S,
      radlat;
  double K1, K2, K3, K4, K5;
  double x, y;
  int zone, zonecm;
  if (lon > 0) {
    zone = ((int)(lon / 6)) + 31;
  } else {
    zone = ((int)((lon + 180) / 6)) + 1;
  }
  zonecm = 6 * zone - 183;
  zonecm = 12;
  radlat = degree2radiant(lat);
  a = 6378137;
  b = 6356752.3142;
  k0 = 0.9996;
  e = sqrt(1 - ((b / a) * (b / a)));
  e1s = (e * e) / (1 - e * e);
  es = e * e;
  n = (a - b) / (a + b);
  rho = (a * (1 - es)) / (pow((1 - es * (sin(radlat) * sin(radlat))), 1.5));
  nu = a / pow((1 - es * (sin(radlat) * sin(radlat))), 0.5);
  p = lon - zonecm;
  p = (p * 3600) / 10000;
  sin1 = 0.0000048481368;
  A1 = a * (1 - n + (5.0 / 4.0) * ((n * n) - (n * n * n)) +
            (81.0 / 64.0) * ((n * n * n * n) - (n * n * n * n * n)));
  B1 = (3.0 * a * n / 2.0) *
       (1 - n - (7 * n * n / 8) * (1 - n) + 55 * (n * n * n * n) / 64);
  C1 = ((15 * a * (n * n)) / 16.0) *
       (1 - n + (3.0 / 4.0) * ((n * n) - (n * n * n)));
  D1 = ((35 * a * (n * n * n)) / 48.0) *
       (1 - n + (11.0 / 16.0) * ((n * n) - (n * n * n)));
  E1 = (315 * a * (n * n * n * n) / 51.0) * (1 - n);
  S = A1 * radlat - B1 * sin(2 * radlat) + C1 * sin(4 * radlat) -
      D1 * sin(6 * radlat) + E1 * sin(8 * radlat);
  K1 = S * k0;
  K2 = (k0 * (sin1 * sin1) * nu * sin(radlat) * cos(radlat)) / 2;
  K2 *= 100000000;
  K3 = (k0 * (sin1 * sin1 * sin1 * sin1) * nu * sin(radlat) *
        (cos(radlat) * cos(radlat) * cos(radlat))) /
       24;
  K3 *=
      5 - (tan(radlat) * tan(radlat)) + 9 * e1s * (cos(radlat) * cos(radlat)) +
      4 * (e1s * e1s) * (cos(radlat) * cos(radlat) * cos(radlat) * cos(radlat));
  K3 *= 10000000000000000LL;
  K4 = k0 * sin1 * nu * cos(radlat);
  K4 *= 10000;
  K5 = ((k0 * (sin1 * sin1 * sin1) * nu *
         (cos(radlat) * cos(radlat) * cos(radlat))) /
        6);
  K5 *= 1 - (tan(radlat) * tan(radlat)) + e1s * (cos(radlat) * cos(radlat));
  K5 *= 1000000000000LL;
  y = K1 + K2 * (p * p) + K3 * (p * p * p * p);
  x = K4 * p + K5 * (p * p * p);
  x += 500000;
  *xptr = x;
  *yptr = y;
}


x86 assembly (clang, -O0):
<latlon2utm>:
push   %rbp
mov    %rsp,%rbp
sub    $0x220,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    11b2 <latlon2utm+0x52>
movsd  -0x10(%rbp),%xmm0
movsd  0xe64(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
add    $0x1f,%eax
mov    %eax,-0xec(%rbp)
jmp    11d8 <latlon2utm+0x78>
movsd  0xe4e(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  0xe39(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
add    $0x1,%eax
mov    %eax,-0xec(%rbp)
imul   $0x6,-0xec(%rbp),%eax
sub    $0xb7,%eax
mov    %eax,-0xf0(%rbp)
movl   $0xc,-0xf0(%rbp)
movsd  -0x8(%rbp),%xmm0
mov    $0x1,%al
call   1080 <degree2radiant@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xefc(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xee7(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xed2(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
divsd  -0x28(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xdb6(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1070 <sqrt@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0xd71(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
addsd  -0x30(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xd2b(%rip),%xmm1
subsd  -0x50(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x210(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x218(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  %xmm0,-0x220(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  -0x220(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x218(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xcb1(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xd7d(%rip),%xmm1
call   1060 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x210(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x1f8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x200(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  %xmm0,-0x208(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  -0x208(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x200(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc16(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xcda(%rip),%xmm1
call   1060 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1f8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0xf0(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xc9b(%rip),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  0xbce(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xc75(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xba3(%rip),%xmm1
subsd  -0x58(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm4
movsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movsd  0xc16(%rip),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm4
movsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movsd  0xbb2(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xb91(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  0xb17(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xacb(%rip),%xmm2
subsd  -0x58(%rbp),%xmm2
movsd  0xb5e(%rip),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movsd  0xaf4(%rip),%xmm3
divsd  %xmm3,%xmm1
movsd  0xaa0(%rip),%xmm3
subsd  -0x58(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
movsd  0xaf8(%rip),%xmm2
mulsd  %xmm3,%xmm2
movsd  0xae4(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xac0(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa9d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa11(%rip),%xmm2
subsd  -0x58(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm4
movsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movsd  0xa44(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xa20(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9f8(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0x984(%rip),%xmm2
subsd  -0x58(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm4
movsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
mulsd  -0x58(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movsd  0x99f(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x97b(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x94e(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0x8f2(%rip),%xmm1
subsd  -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x1e0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1e8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x1f0(%rbp)
ff
movsd  0x8ec(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  -0x1f0(%rbp),%xmm1
ff
movsd  -0x1e8(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x1e0(%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,-0x1d8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  0x859(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  -0x1d8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1d0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  0x7d9(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  -0x1c8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1c0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  0x7e2(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  -0x1b8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1b0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1a8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x1a0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  0x72d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0x711(%rip),%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x198(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x190(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  -0x188(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x180(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x642(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1040 <tan@plt>
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1040 <tan@plt>
movaps %xmm0,%xmm1
movsd  -0x178(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x5de(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  0x5c2(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  -0x170(%rbp),%xmm2
ff
movsd  -0x168(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0x160(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x48(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
movsd  0x54a(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x158(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x150(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  -0x148(%rbp),%xmm2
ff
movsd  -0x140(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0x138(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0x48d(%rip),%xmm0
mulsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x130(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0x432(%rip),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x128(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  -0x120(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x118(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x36c(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1040 <tan@plt>
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1040 <tan@plt>
movaps %xmm0,%xmm1
movsd  -0x110(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x330(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <cos@plt>
movsd  -0x108(%rbp),%xmm2
ff
movsd  -0x100(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0x2ae(%rip),%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm2
mulsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
mulsd  -0x70(%rbp),%xmm2
mulsd  -0x70(%rbp),%xmm2
mulsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm3
mulsd  -0x70(%rbp),%xmm3
mulsd  -0x70(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0x208(%rip),%xmm0
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x220,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<latlon2utm>:
push   %r14
push   %rbx
sub    $0x48,%rsp
mov    %rsi,%r14
mov    %rdi,%rbx
movsd  %xmm1,0x38(%rsp)
mov    $0x1,%al
call   1070 <degree2radiant@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,(%rsp)
call   1030 <sin@plt>
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm0
call   1030 <sin@plt>
mulsd  0x18(%rsp),%xmm0
mulsd  0xe67(%rip),%xmm0
movsd  0xe67(%rip),%xmm1
movsd  %xmm1,0x40(%rsp)
addsd  %xmm1,%xmm0
movsd  0xe5d(%rip),%xmm1
call   1060 <pow@plt>
movsd  (%rsp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm0
call   1030 <sin@plt>
mulsd  0x18(%rsp),%xmm0
mulsd  0xe20(%rip),%xmm0
addsd  0xe20(%rip),%xmm0
movsd  0xe28(%rip),%xmm1
call   1060 <pow@plt>
movsd  0xe23(%rip),%xmm2
movsd  0x38(%rsp),%xmm1
addsd  0xe1d(%rip),%xmm1
mulsd  0xe1d(%rip),%xmm1
divsd  %xmm0,%xmm2
movsd  %xmm2,0x18(%rsp)
divsd  0xe13(%rip),%xmm1
movsd  %xmm1,0x38(%rsp)
movsd  (%rsp),%xmm0
addsd  %xmm0,%xmm0
call   1030 <sin@plt>
mulsd  0xdff(%rip),%xmm0
movsd  0xdff(%rip),%xmm2
movsd  (%rsp),%xmm1
mulsd  %xmm1,%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm2,0x28(%rsp)
movsd  0xdec(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1030 <sin@plt>
mulsd  0xde3(%rip),%xmm0
addsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  (%rsp),%xmm0
mulsd  0xdd2(%rip),%xmm0
call   1030 <sin@plt>
mulsd  0xdcd(%rip),%xmm0
addsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0xdc1(%rip),%xmm0
mulsd  (%rsp),%xmm0
call   1030 <sin@plt>
mulsd  0xdb7(%rip),%xmm0
addsd  0x28(%rsp),%xmm0
mulsd  0xdb1(%rip),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0xdab(%rip),%xmm0
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  (%rsp),%xmm0
call   1030 <sin@plt>
mulsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x30(%rsp),%xmm0
mulsd  0xd01(%rip),%xmm0
mulsd  0xd71(%rip),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0xd6b(%rip),%xmm0
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  (%rsp),%xmm0
call   1030 <sin@plt>
mulsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x10(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
divsd  0xd0d(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  (%rsp),%xmm0
call   1040 <tan@plt>
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1040 <tan@plt>
mulsd  0x10(%rsp),%xmm0
movsd  0xce7(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x8(%rsp),%xmm0
mulsd  0xcbd(%rip),%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x8(%rsp),%xmm0
mulsd  0xc65(%rip),%xmm0
addsd  0x10(%rsp),%xmm0
mulsd  0x20(%rsp),%xmm0
mulsd  0xc59(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0xc53(%rip),%xmm0
mulsd  0x18(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x10(%rsp),%xmm0
mulsd  0xb9f(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x18(%rsp),%xmm0
mulsd  0xc23(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x8(%rsp),%xmm0
mulsd  0x18(%rsp),%xmm0
divsd  0xb69(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm0
call   1040 <tan@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1040 <tan@plt>
mulsd  0x8(%rsp),%xmm0
movsd  0x40(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x40(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0x8(%rsp),%xmm0
mulsd  0xb83(%rip),%xmm0
addsd  0x40(%rsp),%xmm0
mulsd  0x18(%rsp),%xmm0
mulsd  0xb77(%rip),%xmm0
movsd  0x38(%rsp),%xmm2
movapd %xmm2,%xmm1
mulsd  %xmm2,%xmm1
movsd  0x30(%rsp),%xmm3
mulsd  %xmm1,%xmm3
addsd  0x28(%rsp),%xmm3
mulsd  %xmm2,%xmm1
movsd  0x10(%rsp),%xmm4
mulsd  %xmm2,%xmm4
mulsd  %xmm1,%xmm2
mulsd  0x20(%rsp),%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm0,%xmm1
addsd  %xmm4,%xmm1
addsd  0xb35(%rip),%xmm1
movsd  %xmm1,(%r14)
movsd  %xmm2,(%rbx)
add    $0x48,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define void @latlon2utm(double %0, double %1, double* nocapture writeonly %2, double* nocapture writeonly %3) {
%5 = tail call i32 (double, ...) bitcast (i32 (...)* @degree2radiant to i32 (double, ...)*)(double %0)
%6 = sitofp i32 %5 to double
%7 = tail call double @sin(double %6)
%8 = tail call double @sin(double %6)
%9 = fmul double %7, %8
%10 = tail call double @llvm.fmuladd.f64(double %9, double 0xBF7B6B90F2F6F9DE, double 1.000000e+00)
%11 = tail call double @pow(double %10, double 1.500000e+00)
%12 = tail call double @sin(double %6)
%13 = tail call double @sin(double %6)
%14 = fmul double %12, %13
%15 = tail call double @llvm.fmuladd.f64(double %14, double 0xBF7B6B90F2F6F9DE, double 1.000000e+00)
%16 = tail call double @pow(double %15, double 5.000000e-01)
%17 = fdiv double 0x415854A640000000, %16
%18 = fadd double %1, -1.200000e+01
%19 = fmul double %18, 3.600000e+03
%20 = fdiv double %19, 1.000000e+04
%21 = fmul double %6, 2.000000e+00
%22 = tail call double @sin(double %21)
%23 = fmul double %22, 0xC0CF5336FB99110F
%24 = tail call double @llvm.fmuladd.f64(double %6, double 0x41584A364954CD11, double %23)
%25 = fmul double %6, 4.000000e+00
%26 = tail call double @sin(double %25)
%27 = tail call double @llvm.fmuladd.f64(double %26, double 0x4030D52625C12E06, double %24)
%28 = fmul double %6, 6.000000e+00
%29 = tail call double @sin(double %28)
%30 = tail call double @llvm.fmuladd.f64(double %29, double 0xBF96831464479DC3, double %27)
%31 = fmul double %6, 8.000000e+00
%32 = tail call double @sin(double %31)
%33 = tail call double @llvm.fmuladd.f64(double %32, double 0x3F347E52AF33E730, double %30)
%34 = fmul double %33, 9.996000e-01
%35 = fmul double %17, 0x3DB9D5433CAEEFC9
%36 = tail call double @sin(double %6)
%37 = fmul double %35, %36
%38 = tail call double @cos(double %6)
%39 = fmul double %37, %38
%40 = fmul double %39, 5.000000e-01
%41 = fmul double %40, 1.000000e+08
%42 = fmul double %17, 0x3B84DCE93F3E44BE
%43 = tail call double @sin(double %6)
%44 = fmul double %42, %43
%45 = tail call double @cos(double %6)
%46 = tail call double @cos(double %6)
%47 = fmul double %45, %46
%48 = tail call double @cos(double %6)
%49 = fmul double %47, %48
%50 = fmul double %44, %49
%51 = fdiv double %50, 2.400000e+01
%52 = tail call double @tan(double %6)
%53 = tail call double @tan(double %6)
%54 = fneg double %52
%55 = tail call double @llvm.fmuladd.f64(double %54, double %53, double 5.000000e+00)
%56 = tail call double @cos(double %6)
%57 = tail call double @cos(double %6)
%58 = fmul double %56, %57
%59 = tail call double @llvm.fmuladd.f64(double %58, double 0x3FAF0E3BDEE61179, double %55)
%60 = tail call double @cos(double %6)
%61 = tail call double @cos(double %6)
%62 = fmul double %60, %61
%63 = tail call double @cos(double %6)
%64 = fmul double %62, %63
%65 = tail call double @cos(double %6)
%66 = fmul double %64, %65
%67 = tail call double @llvm.fmuladd.f64(double %66, double 0x3F27D0475F5C4B32, double %59)
%68 = fmul double %51, %67
%69 = fmul double %68, 1.000000e+16
%70 = fmul double %17, 0x3ED45390A34C58E8
%71 = tail call double @cos(double %6)
%72 = fmul double %70, %71
%73 = fmul double %72, 1.000000e+04
%74 = fmul double %17, 0x3CA06A6E44087182
%75 = tail call double @cos(double %6)
%76 = tail call double @cos(double %6)
%77 = fmul double %75, %76
%78 = tail call double @cos(double %6)
%79 = fmul double %77, %78
%80 = fmul double %74, %79
%81 = fdiv double %80, 6.000000e+00
%82 = tail call double @tan(double %6)
%83 = tail call double @tan(double %6)
%84 = fneg double %82
%85 = tail call double @llvm.fmuladd.f64(double %84, double %83, double 1.000000e+00)
%86 = tail call double @cos(double %6)
%87 = tail call double @cos(double %6)
%88 = fmul double %86, %87
%89 = tail call double @llvm.fmuladd.f64(double %88, double 0x3F7B9ADFE2939DC1, double %85)
%90 = fmul double %81, %89
%91 = fmul double %90, 1.000000e+12
%92 = fmul double %20, %20
%93 = tail call double @llvm.fmuladd.f64(double %41, double %92, double %34)
%94 = fmul double %20, %92
%95 = fmul double %20, %94
%96 = tail call double @llvm.fmuladd.f64(double %69, double %95, double %93)
%97 = fmul double %94, %91
%98 = tail call double @llvm.fmuladd.f64(double %73, double %20, double %97)
%99 = fadd double %98, 5.000000e+05
store double %99, double* %3
store double %96, double* %2
ret void
}