#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 atof(unsigned char const *);
char *strchr(char const *, unsigned char const);
int interpret_coord(const unsigned char *i, int islat, double *result) {
  int expnow = 0;
  double d = 0, m = 0, s = 0;
  const char *winds = islat ? "nsNS+- " : "ewEW+- ";
  char *p;
  int sign = 1;
  while (*i && (p = strchr(winds, *i)) != NULL) {
    {
      if ((p - winds) & 1)
        sign *= -1;
    }
    i++;
  }
  if (!((*i) >= '0' && (*i) <= '9'))
    return -12;
  while (expnow < 4 && ((*i) >= '0' && (*i) <= '9')) {
    double v = atof(i);
    {
      {
        while (((*i) >= '0' && (*i) <= '9'))
          i++;
      };
      if (*i == '.') {
        i++;
        {
          while (((*i) >= '0' && (*i) <= '9'))
            i++;
        };
      }
    };
    {
      while (((*i) > 0 && (*i) <= 32))
        i++;
    };
    if (*i && strchr("oOdD\x0F8\x0BA\x0B0\x0A7", *i)) {
      i++;
      {
        while (((*i) > 0 && (*i) <= 32))
          i++;
      };
      d = v;
      expnow = 1;
    } else if (*i && strchr("\'`mM\x0B4\x093", *i) && i[1] != i[0]) {
      i++;
      {
        while (((*i) > 0 && (*i) <= 32))
          i++;
      };
      m = v;
      expnow = 2;
    } else if (*i && strchr("\"\'`\x094\x084", *i)) {
      if (i[0] == i[1])
        i++;
      i++;
      {
        while (((*i) > 0 && (*i) <= 32))
          i++;
      };
      s = v;
      expnow = 3;
    } else {
      if (expnow == 0)
        d = v;
      else if (expnow == 1)
        m = v;
      else if (expnow == 2)
        s = v;
      else
        return -18;
      expnow = 4;
    }
  }
  {
    while (*i && (p = strchr(winds, *i)) != NULL) {
      if ((p - winds) & 1)
        sign *= -1;
      i++;
    }
  }
  if (*i)
    return -17;
  *result = (d + m / 60.0 + s / 3600.0) * sign;
  if (islat && (*result < -90 || *result > 90))
    return -13;
  if (!islat && (*result < -180 || *result > 180))
    return -14;
  return 0;
}


x86 assembly (clang, -O0):
<interpret_coord>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x14(%rbp),%edx
lea    0xedc(%rip),%rax
lea    0xecd(%rip),%rcx
cmp    $0x0,%edx
cmovne %rcx,%rax
mov    %rax,-0x48(%rbp)
movl   $0x1,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x61(%rbp)
je     11a8 <interpret_coord+0x88>
mov    -0x48(%rbp),%rdi
mov    -0x10(%rbp),%rax
movzbl (%rax),%esi
call   1040 <strchr@plt>
mov    %rax,-0x50(%rbp)
cmp    $0x0,%rax
setne  %al
mov    %al,-0x61(%rbp)
mov    -0x61(%rbp),%al
test   $0x1,%al
jne    11b8 <interpret_coord+0x98>
jmp    11e9 <interpret_coord+0xc9>
mov    -0x50(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    %rcx,%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     11d8 <interpret_coord+0xb8>
imul   $0xffffffff,-0x54(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1175 <interpret_coord+0x55>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x30,%eax
jl     1209 <interpret_coord+0xe9>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
jle    1215 <interpret_coord+0xf5>
movl   $0xfffffff4,-0x4(%rbp)
jmp    173f <interpret_coord+0x61f>
jmp    121a <interpret_coord+0xfa>
xor    %eax,%eax
cmpl   $0x4,-0x24(%rbp)
mov    %al,-0x62(%rbp)
jge    1254 <interpret_coord+0x134>
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x30,%ecx
mov    %al,-0x63(%rbp)
jl     124e <interpret_coord+0x12e>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
setle  %al
mov    %al,-0x63(%rbp)
mov    -0x63(%rbp),%al
mov    %al,-0x62(%rbp)
mov    -0x62(%rbp),%al
test   $0x1,%al
jne    1264 <interpret_coord+0x144>
jmp    15da <interpret_coord+0x4ba>
mov    -0x10(%rbp),%rdi
call   1030 <atof@plt>
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x30,%ecx
mov    %al,-0x64(%rbp)
jl     1297 <interpret_coord+0x177>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
setle  %al
mov    %al,-0x64(%rbp)
mov    -0x64(%rbp),%al
test   $0x1,%al
jne    12a7 <interpret_coord+0x187>
jmp    12b8 <interpret_coord+0x198>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1272 <interpret_coord+0x152>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2e,%eax
jne    131f <interpret_coord+0x1ff>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x30,%ecx
mov    %al,-0x65(%rbp)
jl     12f9 <interpret_coord+0x1d9>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
setle  %al
mov    %al,-0x65(%rbp)
mov    -0x65(%rbp),%al
test   $0x1,%al
jne    1309 <interpret_coord+0x1e9>
jmp    131a <interpret_coord+0x1fa>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12d4 <interpret_coord+0x1b4>
jmp    131f <interpret_coord+0x1ff>
jmp    1324 <interpret_coord+0x204>
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x66(%rbp)
jle    1349 <interpret_coord+0x229>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x20,%eax
setle  %al
mov    %al,-0x66(%rbp)
mov    -0x66(%rbp),%al
test   $0x1,%al
jne    1359 <interpret_coord+0x239>
jmp    136a <interpret_coord+0x24a>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1324 <interpret_coord+0x204>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     13ff <interpret_coord+0x2df>
mov    -0x10(%rbp),%rax
lea    0xcbb(%rip),%rdi
movzbl (%rax),%esi
call   1040 <strchr@plt>
cmp    $0x0,%rax
je     13ff <interpret_coord+0x2df>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x67(%rbp)
jle    13c8 <interpret_coord+0x2a8>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x20,%eax
setle  %al
mov    %al,-0x67(%rbp)
mov    -0x67(%rbp),%al
test   $0x1,%al
jne    13d8 <interpret_coord+0x2b8>
jmp    13e9 <interpret_coord+0x2c9>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13a3 <interpret_coord+0x283>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x1,-0x24(%rbp)
jmp    15d5 <interpret_coord+0x4b5>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     14ab <interpret_coord+0x38b>
mov    -0x10(%rbp),%rax
lea    0xc2f(%rip),%rdi
movzbl (%rax),%esi
call   1040 <strchr@plt>
cmp    $0x0,%rax
je     14ab <interpret_coord+0x38b>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl (%rcx),%ecx
cmp    %ecx,%eax
je     14ab <interpret_coord+0x38b>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x68(%rbp)
jle    1474 <interpret_coord+0x354>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x20,%eax
setle  %al
mov    %al,-0x68(%rbp)
mov    -0x68(%rbp),%al
test   $0x1,%al
jne    1484 <interpret_coord+0x364>
jmp    1495 <interpret_coord+0x375>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    144f <interpret_coord+0x32f>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x2,-0x24(%rbp)
jmp    15d0 <interpret_coord+0x4b0>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     1563 <interpret_coord+0x443>
mov    -0x10(%rbp),%rax
lea    0xb8a(%rip),%rdi
movzbl (%rax),%esi
call   1040 <strchr@plt>
cmp    $0x0,%rax
je     1563 <interpret_coord+0x443>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
cmp    %ecx,%eax
jne    14fb <interpret_coord+0x3db>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x69(%rbp)
jle    152c <interpret_coord+0x40c>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x20,%eax
setle  %al
mov    %al,-0x69(%rbp)
mov    -0x69(%rbp),%al
test   $0x1,%al
jne    153c <interpret_coord+0x41c>
jmp    154d <interpret_coord+0x42d>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1507 <interpret_coord+0x3e7>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0x3,-0x24(%rbp)
jmp    15cb <interpret_coord+0x4ab>
cmpl   $0x0,-0x24(%rbp)
jne    157c <interpret_coord+0x45c>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    15c4 <interpret_coord+0x4a4>
cmpl   $0x1,-0x24(%rbp)
jne    1595 <interpret_coord+0x475>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    15bf <interpret_coord+0x49f>
cmpl   $0x2,-0x24(%rbp)
jne    15ae <interpret_coord+0x48e>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    15ba <interpret_coord+0x49a>
movl   $0xffffffee,-0x4(%rbp)
jmp    173f <interpret_coord+0x61f>
jmp    15bf <interpret_coord+0x49f>
jmp    15c4 <interpret_coord+0x4a4>
movl   $0x4,-0x24(%rbp)
jmp    15d0 <interpret_coord+0x4b0>
jmp    15d5 <interpret_coord+0x4b5>
jmp    121a <interpret_coord+0xfa>
jmp    15df <interpret_coord+0x4bf>
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x6a(%rbp)
je     1612 <interpret_coord+0x4f2>
mov    -0x48(%rbp),%rdi
mov    -0x10(%rbp),%rax
movzbl (%rax),%esi
call   1040 <strchr@plt>
mov    %rax,-0x50(%rbp)
cmp    $0x0,%rax
setne  %al
mov    %al,-0x6a(%rbp)
mov    -0x6a(%rbp),%al
test   $0x1,%al
jne    1622 <interpret_coord+0x502>
jmp    1653 <interpret_coord+0x533>
mov    -0x50(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    %rcx,%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     1642 <interpret_coord+0x522>
imul   $0xffffffff,-0x54(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    15df <interpret_coord+0x4bf>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     166c <interpret_coord+0x54c>
movl   $0xffffffef,-0x4(%rbp)
jmp    173f <interpret_coord+0x61f>
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  0x98a(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  0x96d(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,-0x14(%rbp)
je     16f2 <interpret_coord+0x5d2>
mov    -0x20(%rbp),%rax
movsd  0x94e(%rip),%xmm0
ucomisd (%rax),%xmm0
ja     16e6 <interpret_coord+0x5c6>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x93c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16f2 <interpret_coord+0x5d2>
movl   $0xfffffff3,-0x4(%rbp)
jmp    173f <interpret_coord+0x61f>
cmpl   $0x0,-0x14(%rbp)
jne    1738 <interpret_coord+0x618>
mov    -0x20(%rbp),%rax
movsd  0x918(%rip),%xmm0
ucomisd (%rax),%xmm0
ja     172c <interpret_coord+0x60c>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x906(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1738 <interpret_coord+0x618>
movl   $0xfffffff2,-0x4(%rbp)
jmp    173f <interpret_coord+0x61f>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<interpret_coord>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
test   %esi,%esi
lea    0xf01(%rip),%rax
lea    0xef2(%rip),%rbx
cmove  %rax,%rbx
mov    (%rdi),%r15b
mov    $0xfffffff4,%r13d
test   %r15b,%r15b
je     148a <interpret_coord+0x36a>
mov    %rdi,%r12
mov    %rdx,0x40(%rsp)
mov    %esi,0x38(%rsp)
mov    $0x1,%r14d
cs nopw 0x0(%rax,%rax,1)
movzbl %r15b,%esi
mov    %rbx,%rdi
call   1040 <strchr@plt>
test   %rax,%rax
je     11a2 <interpret_coord+0x82>
sub    %ebx,%eax
mov    %r14d,%ecx
neg    %ecx
test   $0x1,%al
cmovne %ecx,%r14d
movzbl 0x1(%r12),%r15d
add    $0x1,%r12
test   %r15b,%r15b
jne    1170 <interpret_coord+0x50>
jmp    148a <interpret_coord+0x36a>
lea    -0x30(%r15),%eax
cmp    $0x9,%al
ja     148a <interpret_coord+0x36a>
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
xorpd  %xmm0,%xmm0
ja     11e4 <interpret_coord+0xc4>
movsd  %xmm0,0x18(%rsp)
xor    %ecx,%ecx
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x8(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
mov    %rbx,0x28(%rsp)
jmp    12cc <interpret_coord+0x1ac>
movsd  %xmm0,0x8(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
mov    (%r12),%al
test   %al,%al
je     122e <interpret_coord+0x10e>
add    $0x1,%r12
movzbl %al,%esi
mov    %rbx,%rdi
call   1040 <strchr@plt>
test   %rax,%rax
je     1436 <interpret_coord+0x316>
sub    %ebx,%eax
mov    %r14d,%ecx
neg    %ecx
test   $0x1,%al
cmovne %ecx,%r14d
movzbl (%r12),%eax
add    $0x1,%r12
test   %al,%al
jne    1200 <interpret_coord+0xe0>
movsd  0x8(%rsp),%xmm0
divsd  0xdc4(%rip),%xmm0
movsd  0x18(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  0x10(%rsp),%xmm2
divsd  0xdb4(%rip),%xmm2
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
addsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm0
mov    0x40(%rsp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x0,0x38(%rsp)
je     1469 <interpret_coord+0x349>
movsd  0xd90(%rip),%xmm1
ucomisd %xmm0,%xmm1
mov    $0xfffffff3,%r13d
ja     148a <interpret_coord+0x36a>
ucomisd 0xd80(%rip),%xmm0
jbe    1487 <interpret_coord+0x367>
jmp    148a <interpret_coord+0x36a>
movsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
mov    %rbp,%r12
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x30(%r15),%eax
cmp    $0xa,%al
jae    11f4 <interpret_coord+0xd4>
mov    %ecx,0x3c(%rsp)
mov    %r12,%rdi
call   1030 <atof@plt>
lea    -0x30(%r15),%eax
cmp    $0x9,%al
ja     12f2 <interpret_coord+0x1d2>
movzbl 0x1(%r12),%r15d
add    $0x1,%r12
lea    -0x30(%r15),%eax
cmp    $0xa,%al
jb     12e0 <interpret_coord+0x1c0>
cmp    $0x2e,%r15b
jne    1310 <interpret_coord+0x1f0>
nopl   0x0(%rax,%rax,1)
movzbl 0x1(%r12),%eax
add    $0x1,%r12
add    $0xd0,%al
cmp    $0xa,%al
jb     1300 <interpret_coord+0x1e0>
mov    %r12,%rbp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl 0x0(%rbp),%r13d
lea    -0x1(%r13),%eax
add    $0x1,%rbp
cmp    $0x20,%al
jb     1320 <interpret_coord+0x200>
test   %r13b,%r13b
je     143e <interpret_coord+0x31e>
movsd  %xmm0,0x20(%rsp)
lea    -0x1(%rbp),%r12
movzbl %r13b,%ebx
lea    0xcf1(%rip),%rdi
mov    %ebx,%esi
call   1040 <strchr@plt>
test   %rax,%rax
je     1390 <interpret_coord+0x270>
mov    0x28(%rsp),%rbx
movzbl 0x1(%r12),%r15d
add    $0x1,%r12
lea    -0x1(%r15),%eax
cmp    $0x20,%al
jb     1360 <interpret_coord+0x240>
mov    $0x1,%ecx
movsd  0x20(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
jmp    12c0 <interpret_coord+0x1a0>
nopl   0x0(%rax,%rax,1)
lea    0xcb2(%rip),%rdi
mov    %ebx,0x34(%rsp)
mov    %ebx,%esi
call   1040 <strchr@plt>
test   %rax,%rax
je     13b0 <interpret_coord+0x290>
mov    0x0(%rbp),%r15b
cmp    %r13b,%r15b
jne    1402 <interpret_coord+0x2e2>
lea    0xc99(%rip),%rdi
mov    0x34(%rsp),%esi
call   1040 <strchr@plt>
test   %rax,%rax
movsd  0x20(%rsp),%xmm0
mov    0x28(%rsp),%rbx
je     143e <interpret_coord+0x31e>
cmp    0x0(%rbp),%r13b
cmove  %rbp,%r12
nopl   0x0(%rax,%rax,1)
movzbl 0x1(%r12),%r15d
add    $0x1,%r12
lea    -0x1(%r15),%eax
cmp    $0x20,%al
jb     13e0 <interpret_coord+0x2c0>
mov    $0x3,%ecx
movsd  %xmm0,0x10(%rsp)
jmp    12c0 <interpret_coord+0x1a0>
lea    -0x1(%r15),%eax
mov    $0x2,%ecx
cmp    $0x1f,%al
mov    0x28(%rsp),%rbx
ja     12a3 <interpret_coord+0x183>
movsd  0x20(%rsp),%xmm0
xchg   %ax,%ax
movzbl 0x1(%rbp),%r15d
add    $0x1,%rbp
lea    -0x1(%r15),%eax
cmp    $0x20,%al
jb     1420 <interpret_coord+0x300>
jmp    12a9 <interpret_coord+0x189>
mov    $0xffffffef,%r13d
jmp    148a <interpret_coord+0x36a>
add    $0xffffffffffffffff,%rbp
mov    0x3c(%rsp),%eax
cmp    $0x2,%eax
je     149c <interpret_coord+0x37c>
cmp    $0x1,%eax
je     14aa <interpret_coord+0x38a>
mov    $0xffffffee,%r13d
movsd  %xmm0,0x18(%rsp)
mov    %rbp,%r12
test   %eax,%eax
je     11f4 <interpret_coord+0xd4>
jmp    148a <interpret_coord+0x36a>
movsd  0xbaf(%rip),%xmm1
ucomisd %xmm0,%xmm1
mov    $0xfffffff2,%r13d
ja     148a <interpret_coord+0x36a>
ucomisd 0xba3(%rip),%xmm0
ja     148a <interpret_coord+0x36a>
xor    %r13d,%r13d
mov    %r13d,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movsd  %xmm0,0x10(%rsp)
mov    %rbp,%r12
jmp    11f4 <interpret_coord+0xd4>
movsd  %xmm0,0x8(%rsp)
mov    %rbp,%r12
jmp    11f4 <interpret_coord+0xd4>

LLVM IR (-O0):
@.str = [8 x i8] c"nsNS+- \00"
@.str.1 = [8 x i8] c"ewEW+- \00"
@.str.2 = [9 x i8] c"oOdD\F8\BA\B0\A7\00"
@.str.3 = [7 x i8] c"'`mM\B4\93\00"
@.str.4 = [6 x i8] c"\22'`\94\84\00"
define i32 @interpret_coord(i8* %0, i32 %1, double* %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32
%7 = alloca double*
%8 = alloca i32
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca i8*
%13 = alloca i8*
%14 = alloca i32
%15 = alloca double
store i8* %0, i8** %5
store i32 %1, i32* %6
store double* %2, double** %7
store i32 0, i32* %8
store double 0.000000e+00, double* %9
store double 0.000000e+00, double* %10
store double 0.000000e+00, double* %11
%16 = load i32, i32* %6
%17 = icmp ne i32 %16, 0
%18 = zext i1 %17 to i64
%19 = select i1 %17, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0)
store i8* %19, i8** %12
store i32 1, i32* %14
br label %20
20: ; preds = %44, %3
%21 = load i8*, i8** %5
%22 = load i8, i8* %21
%23 = zext i8 %22 to i32
%24 = icmp ne i32 %23, 0
br i1 %24, label %25, label %31
25: ; preds = %20
%26 = load i8*, i8** %12
%27 = load i8*, i8** %5
%28 = load i8, i8* %27
%29 = call i8* @strchr(i8* %26, i8 zeroext %28)
store i8* %29, i8** %13
%30 = icmp ne i8* %29, null
br label %31
31: ; preds = %25, %20
%32 = phi i1 [ false, %20 ], [ %30, %25 ]
br i1 %32, label %33, label %47
33: ; preds = %31
%34 = load i8*, i8** %13
%35 = load i8*, i8** %12
%36 = ptrtoint i8* %34 to i64
%37 = ptrtoint i8* %35 to i64
%38 = sub i64 %36, %37
%39 = and i64 %38, 1
%40 = icmp ne i64 %39, 0
br i1 %40, label %41, label %44
41: ; preds = %33
%42 = load i32, i32* %14
%43 = mul nsw i32 %42, -1
store i32 %43, i32* %14
br label %44
44: ; preds = %41, %33
%45 = load i8*, i8** %5
%46 = getelementptr inbounds i8, i8* %45, i32 1
store i8* %46, i8** %5
br label %20
47: ; preds = %31
%48 = load i8*, i8** %5
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = icmp sge i32 %50, 48
br i1 %51, label %52, label %57
52: ; preds = %47
%53 = load i8*, i8** %5
%54 = load i8, i8* %53
%55 = zext i8 %54 to i32
%56 = icmp sle i32 %55, 57
br i1 %56, label %58, label %57
57: ; preds = %52, %47
store i32 -12, i32* %4
br label %338
58: ; preds = %52
br label %59
59: ; preds = %268, %58
%60 = load i32, i32* %8
%61 = icmp slt i32 %60, 4
br i1 %61, label %62, label %74
62: ; preds = %59
%63 = load i8*, i8** %5
%64 = load i8, i8* %63
%65 = zext i8 %64 to i32
%66 = icmp sge i32 %65, 48
br i1 %66, label %67, label %72
67: ; preds = %62
%68 = load i8*, i8** %5
%69 = load i8, i8* %68
%70 = zext i8 %69 to i32
%71 = icmp sle i32 %70, 57
br label %72
72: ; preds = %67, %62
%73 = phi i1 [ false, %62 ], [ %71, %67 ]
br label %74
74: ; preds = %72, %59
%75 = phi i1 [ false, %59 ], [ %73, %72 ]
br i1 %75, label %76, label %269
76: ; preds = %74
%77 = load i8*, i8** %5
%78 = call double @atof(i8* %77)
store double %78, double* %15
br label %79
79: ; preds = %91, %76
%80 = load i8*, i8** %5
%81 = load i8, i8* %80
%82 = zext i8 %81 to i32
%83 = icmp sge i32 %82, 48
br i1 %83, label %84, label %89
84: ; preds = %79
%85 = load i8*, i8** %5
%86 = load i8, i8* %85
%87 = zext i8 %86 to i32
%88 = icmp sle i32 %87, 57
br label %89
89: ; preds = %84, %79
%90 = phi i1 [ false, %79 ], [ %88, %84 ]
br i1 %90, label %91, label %94
91: ; preds = %89
%92 = load i8*, i8** %5
%93 = getelementptr inbounds i8, i8* %92, i32 1
store i8* %93, i8** %5
br label %79
94: ; preds = %89
%95 = load i8*, i8** %5
%96 = load i8, i8* %95
%97 = zext i8 %96 to i32
%98 = icmp eq i32 %97, 46
br i1 %98, label %99, label %118
99: ; preds = %94
%100 = load i8*, i8** %5
%101 = getelementptr inbounds i8, i8* %100, i32 1
store i8* %101, i8** %5
br label %102
102: ; preds = %114, %99
%103 = load i8*, i8** %5
%104 = load i8, i8* %103
%105 = zext i8 %104 to i32
%106 = icmp sge i32 %105, 48
br i1 %106, label %107, label %112
107: ; preds = %102
%108 = load i8*, i8** %5
%109 = load i8, i8* %108
%110 = zext i8 %109 to i32
%111 = icmp sle i32 %110, 57
br label %112
112: ; preds = %107, %102
%113 = phi i1 [ false, %102 ], [ %111, %107 ]
br i1 %113, label %114, label %117
114: ; preds = %112
%115 = load i8*, i8** %5
%116 = getelementptr inbounds i8, i8* %115, i32 1
store i8* %116, i8** %5
br label %102
117: ; preds = %112
br label %118
118: ; preds = %117, %94
br label %119
119: ; preds = %131, %118
%120 = load i8*, i8** %5
%121 = load i8, i8* %120
%122 = zext i8 %121 to i32
%123 = icmp sgt i32 %122, 0
br i1 %123, label %124, label %129
124: ; preds = %119
%125 = load i8*, i8** %5
%126 = load i8, i8* %125
%127 = zext i8 %126 to i32
%128 = icmp sle i32 %127, 32
br label %129
129: ; preds = %124, %119
%130 = phi i1 [ false, %119 ], [ %128, %124 ]
br i1 %130, label %131, label %134
131: ; preds = %129
%132 = load i8*, i8** %5
%133 = getelementptr inbounds i8, i8* %132, i32 1
store i8* %133, i8** %5
br label %119
134: ; preds = %129
%135 = load i8*, i8** %5
%136 = load i8, i8* %135
%137 = zext i8 %136 to i32
%138 = icmp ne i32 %137, 0
br i1 %138, label %139, label %164
139: ; preds = %134
%140 = load i8*, i8** %5
%141 = load i8, i8* %140
%142 = call i8* @strchr(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i8 zeroext %141)
%143 = icmp ne i8* %142, null
br i1 %143, label %144, label %164
144: ; preds = %139
%145 = load i8*, i8** %5
%146 = getelementptr inbounds i8, i8* %145, i32 1
store i8* %146, i8** %5
br label %147
147: ; preds = %159, %144
%148 = load i8*, i8** %5
%149 = load i8, i8* %148
%150 = zext i8 %149 to i32
%151 = icmp sgt i32 %150, 0
br i1 %151, label %152, label %157
152: ; preds = %147
%153 = load i8*, i8** %5
%154 = load i8, i8* %153
%155 = zext i8 %154 to i32
%156 = icmp sle i32 %155, 32
br label %157
157: ; preds = %152, %147
%158 = phi i1 [ false, %147 ], [ %156, %152 ]
br i1 %158, label %159, label %162
159: ; preds = %157
%160 = load i8*, i8** %5
%161 = getelementptr inbounds i8, i8* %160, i32 1
store i8* %161, i8** %5
br label %147
162: ; preds = %157
%163 = load double, double* %15
store double %163, double* %9
store i32 1, i32* %8
br label %268
164: ; preds = %139, %134
%165 = load i8*, i8** %5
%166 = load i8, i8* %165
%167 = zext i8 %166 to i32
%168 = icmp ne i32 %167, 0
br i1 %168, label %169, label %204
169: ; preds = %164
%170 = load i8*, i8** %5
%171 = load i8, i8* %170
%172 = call i8* @strchr(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0), i8 zeroext %171)
%173 = icmp ne i8* %172, null
br i1 %173, label %174, label %204
174: ; preds = %169
%175 = load i8*, i8** %5
%176 = getelementptr inbounds i8, i8* %175, i64 1
%177 = load i8, i8* %176
%178 = zext i8 %177 to i32
%179 = load i8*, i8** %5
%180 = getelementptr inbounds i8, i8* %179, i64 0
%181 = load i8, i8* %180
%182 = zext i8 %181 to i32
%183 = icmp ne i32 %178, %182
br i1 %183, label %184, label %204
184: ; preds = %174
%185 = load i8*, i8** %5
%186 = getelementptr inbounds i8, i8* %185, i32 1
store i8* %186, i8** %5
br label %187
187: ; preds = %199, %184
%188 = load i8*, i8** %5
%189 = load i8, i8* %188
%190 = zext i8 %189 to i32
%191 = icmp sgt i32 %190, 0
br i1 %191, label %192, label %197
192: ; preds = %187
%193 = load i8*, i8** %5
%194 = load i8, i8* %193
%195 = zext i8 %194 to i32
%196 = icmp sle i32 %195, 32
br label %197
197: ; preds = %192, %187
%198 = phi i1 [ false, %187 ], [ %196, %192 ]
br i1 %198, label %199, label %202
199: ; preds = %197
%200 = load i8*, i8** %5
%201 = getelementptr inbounds i8, i8* %200, i32 1
store i8* %201, i8** %5
br label %187
202: ; preds = %197
%203 = load double, double* %15
store double %203, double* %10
store i32 2, i32* %8
br label %267
204: ; preds = %174, %169, %164
%205 = load i8*, i8** %5
%206 = load i8, i8* %205
%207 = zext i8 %206 to i32
%208 = icmp ne i32 %207, 0
br i1 %208, label %209, label %247
209: ; preds = %204
%210 = load i8*, i8** %5
%211 = load i8, i8* %210
%212 = call i8* @strchr(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0), i8 zeroext %211)
%213 = icmp ne i8* %212, null
br i1 %213, label %214, label %247
214: ; preds = %209
%215 = load i8*, i8** %5
%216 = getelementptr inbounds i8, i8* %215, i64 0
%217 = load i8, i8* %216
%218 = zext i8 %217 to i32
%219 = load i8*, i8** %5
%220 = getelementptr inbounds i8, i8* %219, i64 1
%221 = load i8, i8* %220
%222 = zext i8 %221 to i32
%223 = icmp eq i32 %218, %222
br i1 %223, label %224, label %227
224: ; preds = %214
%225 = load i8*, i8** %5
%226 = getelementptr inbounds i8, i8* %225, i32 1
store i8* %226, i8** %5
br label %227
227: ; preds = %224, %214
%228 = load i8*, i8** %5
%229 = getelementptr inbounds i8, i8* %228, i32 1
store i8* %229, i8** %5
br label %230
230: ; preds = %242, %227
%231 = load i8*, i8** %5
%232 = load i8, i8* %231
%233 = zext i8 %232 to i32
%234 = icmp sgt i32 %233, 0
br i1 %234, label %235, label %240
235: ; preds = %230
%236 = load i8*, i8** %5
%237 = load i8, i8* %236
%238 = zext i8 %237 to i32
%239 = icmp sle i32 %238, 32
br label %240
240: ; preds = %235, %230
%241 = phi i1 [ false, %230 ], [ %239, %235 ]
br i1 %241, label %242, label %245
242: ; preds = %240
%243 = load i8*, i8** %5
%244 = getelementptr inbounds i8, i8* %243, i32 1
store i8* %244, i8** %5
br label %230
245: ; preds = %240
%246 = load double, double* %15
store double %246, double* %11
store i32 3, i32* %8
br label %266
247: ; preds = %209, %204
%248 = load i32, i32* %8
%249 = icmp eq i32 %248, 0
br i1 %249, label %250, label %252
250: ; preds = %247
%251 = load double, double* %15
store double %251, double* %9
br label %265
252: ; preds = %247
%253 = load i32, i32* %8
%254 = icmp eq i32 %253, 1
br i1 %254, label %255, label %257
255: ; preds = %252
%256 = load double, double* %15
store double %256, double* %10
br label %264
257: ; preds = %252
%258 = load i32, i32* %8
%259 = icmp eq i32 %258, 2
br i1 %259, label %260, label %262
260: ; preds = %257
%261 = load double, double* %15
store double %261, double* %11
br label %263
262: ; preds = %257
store i32 -18, i32* %4
br label %338
263: ; preds = %260
br label %264
264: ; preds = %263, %255
br label %265
265: ; preds = %264, %250
store i32 4, i32* %8
br label %266
266: ; preds = %265, %245
br label %267
267: ; preds = %266, %202
br label %268
268: ; preds = %267, %162
br label %59
269: ; preds = %74
br label %270
270: ; preds = %294, %269
%271 = load i8*, i8** %5
%272 = load i8, i8* %271
%273 = zext i8 %272 to i32
%274 = icmp ne i32 %273, 0
br i1 %274, label %275, label %281
275: ; preds = %270
%276 = load i8*, i8** %12
%277 = load i8*, i8** %5
%278 = load i8, i8* %277
%279 = call i8* @strchr(i8* %276, i8 zeroext %278)
store i8* %279, i8** %13
%280 = icmp ne i8* %279, null
br label %281
281: ; preds = %275, %270
%282 = phi i1 [ false, %270 ], [ %280, %275 ]
br i1 %282, label %283, label %297
283: ; preds = %281
%284 = load i8*, i8** %13
%285 = load i8*, i8** %12
%286 = ptrtoint i8* %284 to i64
%287 = ptrtoint i8* %285 to i64
%288 = sub i64 %286, %287
%289 = and i64 %288, 1
%290 = icmp ne i64 %289, 0
br i1 %290, label %291, label %294
291: ; preds = %283
%292 = load i32, i32* %14
%293 = mul nsw i32 %292, -1
store i32 %293, i32* %14
br label %294
294: ; preds = %291, %283
%295 = load i8*, i8** %5
%296 = getelementptr inbounds i8, i8* %295, i32 1
store i8* %296, i8** %5
br label %270
297: ; preds = %281
%298 = load i8*, i8** %5
%299 = load i8, i8* %298
%300 = icmp ne i8 %299, 0
br i1 %300, label %301, label %302
301: ; preds = %297
store i32 -17, i32* %4
br label %338
302: ; preds = %297
%303 = load double, double* %9
%304 = load double, double* %10
%305 = fdiv double %304, 6.000000e+01
%306 = fadd double %303, %305
%307 = load double, double* %11
%308 = fdiv double %307, 3.600000e+03
%309 = fadd double %306, %308
%310 = load i32, i32* %14
%311 = sitofp i32 %310 to double
%312 = fmul double %309, %311
%313 = load double*, double** %7
store double %312, double* %313
%314 = load i32, i32* %6
%315 = icmp ne i32 %314, 0
br i1 %315, label %316, label %325
316: ; preds = %302
%317 = load double*, double** %7
%318 = load double, double* %317
%319 = fcmp olt double %318, -9.000000e+01
br i1 %319, label %324, label %320
320: ; preds = %316
%321 = load double*, double** %7
%322 = load double, double* %321
%323 = fcmp ogt double %322, 9.000000e+01
br i1 %323, label %324, label %325
324: ; preds = %320, %316
store i32 -13, i32* %4
br label %338
325: ; preds = %320, %302
%326 = load i32, i32* %6
%327 = icmp ne i32 %326, 0
br i1 %327, label %337, label %328
328: ; preds = %325
%329 = load double*, double** %7
%330 = load double, double* %329
%331 = fcmp olt double %330, -1.800000e+02
br i1 %331, label %336, label %332
332: ; preds = %328
%333 = load double*, double** %7
%334 = load double, double* %333
%335 = fcmp ogt double %334, 1.800000e+02
br i1 %335, label %336, label %337
336: ; preds = %332, %328
store i32 -14, i32* %4
br label %338
337: ; preds = %332, %325
store i32 0, i32* %4
br label %338
338: ; preds = %337, %336, %324, %301, %262, %57
%339 = load i32, i32* %4
ret i32 %339
}

LLVM IR (-O2):
@.str = [8 x i8] c"nsNS+- \00"
@.str.1 = [8 x i8] c"ewEW+- \00"
@.str.2 = [9 x i8] c"oOdD\F8\BA\B0\A7\00"
@.str.3 = [7 x i8] c"'`mM\B4\93\00"
@.str.4 = [6 x i8] c"\22'`\94\84\00"
define i32 @interpret_coord(i8* nocapture %0, i32 %1, double* nocapture %2) {
%4 = icmp eq i32 %1, 0
%5 = select i1 %4, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0)
%6 = load i8, i8* %0
%7 = icmp eq i8 %6, 0
br i1 %7, label %160, label %8
8: ; preds = %3
%9 = ptrtoint i8* %5 to i64
br label %10
10: ; preds = %8, %16
%11 = phi i8 [ %6, %8 ], [ %24, %16 ]
%12 = phi i32 [ 1, %8 ], [ %22, %16 ]
%13 = phi i8* [ %0, %8 ], [ %23, %16 ]
%14 = tail call i8* @strchr(i8* dereferenceable(8) %5, i8 zeroext %11)
%15 = icmp eq i8* %14, null
br i1 %15, label %26, label %16
16: ; preds = %10
%17 = ptrtoint i8* %14 to i64
%18 = sub i64 %17, %9
%19 = and i64 %18, 1
%20 = icmp eq i64 %19, 0
%21 = sub nsw i32 0, %12
%22 = select i1 %20, i32 %12, i32 %21
%23 = getelementptr inbounds i8, i8* %13, i64 1
%24 = load i8, i8* %23
%25 = icmp eq i8 %24, 0
br i1 %25, label %160, label %10
26: ; preds = %10
%27 = add i8 %11, -48
%28 = icmp ult i8 %27, 10
br i1 %28, label %29, label %160
29: ; preds = %26
%30 = add i8 %11, -48
%31 = icmp ult i8 %30, 10
br i1 %31, label %32, label %120
32: ; preds = %29, %111
%33 = phi i32 [ %113, %111 ], [ 0, %29 ]
%34 = phi double [ %114, %111 ], [ 0.000000e+00, %29 ]
%35 = phi double [ %115, %111 ], [ 0.000000e+00, %29 ]
%36 = phi double [ %116, %111 ], [ 0.000000e+00, %29 ]
%37 = phi i8* [ %117, %111 ], [ %13, %29 ]
%38 = phi i8 [ %112, %111 ], [ %11, %29 ]
%39 = tail call double @atof(i8* %37)
%40 = add i8 %38, -48
%41 = icmp ult i8 %40, 10
br i1 %41, label %42, label %48
42: ; preds = %32, %42
%43 = phi i8* [ %44, %42 ], [ %37, %32 ]
%44 = getelementptr inbounds i8, i8* %43, i64 1
%45 = load i8, i8* %44
%46 = add i8 %45, -48
%47 = icmp ult i8 %46, 10
br i1 %47, label %42, label %48
48: ; preds = %42, %32
%49 = phi i8 [ %38, %32 ], [ %45, %42 ]
%50 = phi i8* [ %37, %32 ], [ %44, %42 ]
%51 = icmp eq i8 %49, 46
br i1 %51, label %52, label %58
52: ; preds = %48, %52
%53 = phi i8* [ %54, %52 ], [ %50, %48 ]
%54 = getelementptr inbounds i8, i8* %53, i64 1
%55 = load i8, i8* %54
%56 = add i8 %55, -48
%57 = icmp ult i8 %56, 10
br i1 %57, label %52, label %58
58: ; preds = %52, %48
%59 = phi i8* [ %50, %48 ], [ %54, %52 ]
br label %60
60: ; preds = %58, %60
%61 = phi i8* [ %65, %60 ], [ %59, %58 ]
%62 = load i8, i8* %61
%63 = add i8 %62, -1
%64 = icmp ult i8 %63, 32
%65 = getelementptr inbounds i8, i8* %61, i64 1
br i1 %64, label %60, label %66
66: ; preds = %60
%67 = icmp eq i8 %62, 0
br i1 %67, label %108, label %68
68: ; preds = %66
%69 = tail call i8* @strchr(i8* dereferenceable(9) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i8 zeroext %62)
%70 = icmp eq i8* %69, null
br i1 %70, label %77, label %71
71: ; preds = %68, %71
%72 = phi i8* [ %73, %71 ], [ %61, %68 ]
%73 = getelementptr inbounds i8, i8* %72, i64 1
%74 = load i8, i8* %73
%75 = add i8 %74, -1
%76 = icmp ult i8 %75, 32
br i1 %76, label %71, label %111
77: ; preds = %68
%78 = tail call i8* @strchr(i8* dereferenceable(7) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0), i8 zeroext %62)
%79 = icmp eq i8* %78, null
br i1 %79, label %95, label %80
80: ; preds = %77
%81 = load i8, i8* %65
%82 = icmp eq i8 %81, %62
br i1 %82, label %95, label %83
83: ; preds = %80
%84 = getelementptr inbounds i8, i8* %61, i64 1
%85 = add i8 %81, -1
%86 = icmp ult i8 %85, 32
br i1 %86, label %87, label %111
87: ; preds = %83, %87
%88 = phi i8* [ %92, %87 ], [ %84, %83 ]
%89 = phi i8* [ %88, %87 ], [ %61, %83 ]
%90 = getelementptr inbounds i8, i8* %89, i64 2
%91 = load i8, i8* %90
%92 = getelementptr inbounds i8, i8* %88, i64 1
%93 = add i8 %91, -1
%94 = icmp ult i8 %93, 32
br i1 %94, label %87, label %111
95: ; preds = %80, %77
%96 = tail call i8* @strchr(i8* dereferenceable(6) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0), i8 zeroext %62)
%97 = icmp eq i8* %96, null
br i1 %97, label %108, label %98
98: ; preds = %95
%99 = load i8, i8* %65
%100 = icmp eq i8 %62, %99
%101 = select i1 %100, i8* %65, i8* %61
br label %102
102: ; preds = %102, %98
%103 = phi i8* [ %101, %98 ], [ %104, %102 ]
%104 = getelementptr inbounds i8, i8* %103, i64 1
%105 = load i8, i8* %104
%106 = add i8 %105, -1
%107 = icmp ult i8 %106, 32
br i1 %107, label %102, label %111
108: ; preds = %66, %95
switch i32 %33, label %160 [
i32 0, label %120
i32 1, label %109
i32 2, label %110
]
109: ; preds = %108
br label %120
110: ; preds = %108
br label %120
111: ; preds = %71, %87, %102, %83
%112 = phi i8 [ %81, %83 ], [ %105, %102 ], [ %91, %87 ], [ %74, %71 ]
%113 = phi i32 [ 2, %83 ], [ 3, %102 ], [ 2, %87 ], [ 1, %71 ]
%114 = phi double [ %34, %83 ], [ %34, %102 ], [ %34, %87 ], [ %39, %71 ]
%115 = phi double [ %39, %83 ], [ %35, %102 ], [ %39, %87 ], [ %35, %71 ]
%116 = phi double [ %36, %83 ], [ %39, %102 ], [ %36, %87 ], [ %36, %71 ]
%117 = phi i8* [ %84, %83 ], [ %104, %102 ], [ %92, %87 ], [ %73, %71 ]
%118 = add i8 %112, -48
%119 = icmp ult i8 %118, 10
br i1 %119, label %32, label %120
120: ; preds = %111, %29, %110, %109, %108
%121 = phi double [ %34, %110 ], [ %34, %109 ], [ %39, %108 ], [ 0.000000e+00, %29 ], [ %114, %111 ]
%122 = phi double [ %35, %110 ], [ %39, %109 ], [ %35, %108 ], [ 0.000000e+00, %29 ], [ %115, %111 ]
%123 = phi double [ %39, %110 ], [ %36, %109 ], [ %36, %108 ], [ 0.000000e+00, %29 ], [ %116, %111 ]
%124 = phi i8* [ %61, %110 ], [ %61, %109 ], [ %61, %108 ], [ %13, %29 ], [ %117, %111 ]
%125 = load i8, i8* %124
%126 = icmp eq i8 %125, 0
br i1 %126, label %143, label %127
127: ; preds = %120, %133
%128 = phi i8 [ %141, %133 ], [ %125, %120 ]
%129 = phi i32 [ %139, %133 ], [ %12, %120 ]
%130 = phi i8* [ %140, %133 ], [ %124, %120 ]
%131 = tail call i8* @strchr(i8* dereferenceable(8) %5, i8 zeroext %128)
%132 = icmp eq i8* %131, null
br i1 %132, label %160, label %133
133: ; preds = %127
%134 = ptrtoint i8* %131 to i64
%135 = sub i64 %134, %9
%136 = and i64 %135, 1
%137 = icmp eq i64 %136, 0
%138 = sub nsw i32 0, %129
%139 = select i1 %137, i32 %129, i32 %138
%140 = getelementptr inbounds i8, i8* %130, i64 1
%141 = load i8, i8* %140
%142 = icmp eq i8 %141, 0
br i1 %142, label %143, label %127
143: ; preds = %133, %120
%144 = phi i32 [ %12, %120 ], [ %139, %133 ]
%145 = fdiv double %122, 6.000000e+01
%146 = fadd double %121, %145
%147 = fdiv double %123, 3.600000e+03
%148 = fadd double %146, %147
%149 = sitofp i32 %144 to double
%150 = fmul double %148, %149
store double %150, double* %2
br i1 %4, label %155, label %151
151: ; preds = %143
%152 = fcmp olt double %150, -9.000000e+01
%153 = fcmp ogt double %150, 9.000000e+01
%154 = or i1 %152, %153
br i1 %154, label %160, label %159
155: ; preds = %143
%156 = fcmp olt double %150, -1.800000e+02
%157 = fcmp ogt double %150, 1.800000e+02
%158 = or i1 %156, %157
br i1 %158, label %160, label %159
159: ; preds = %151, %155
br label %160
160: ; preds = %16, %127, %108, %3, %155, %151, %26, %159
%161 = phi i32 [ 0, %159 ], [ -12, %26 ], [ -13, %151 ], [ -14, %155 ], [ -12, %3 ], [ -18, %108 ], [ -17, %127 ], [ -12, %16 ]
ret i32 %161
}