_fnum(val, prec, width, efmt, pputc) double val;
char width, prec, efmt;
void (*pputc)();
{
  register char *cp, *xp;
  int exp;
  char digs;
  short twid;
  unsigned char sign;
  char xbuf[60];
  if (prec < 0)
    prec = 6;
  twid = 0;
  if (val < 0.0) {
    val = -val;
    sign = 1;
  } else
    sign = 0;
  exp = 0;
  _fbcd(val, &exp, (xbuf + 2));
  cp = (xbuf + 2);
  while (*cp == '0')
    cp++;
  if (*cp == 0)
    cp--;
  if (strlen(cp) > 1) {
    xp = cp + strlen(cp) - 1;
    while (*xp == '0') {
      *xp-- = 0;
      exp++;
    }
  } else if (*cp == '0')
    exp = 0;
  cp[-1] = '0';
  digs = strlen(cp);
  if (efmt == 0 && prec == 0 || efmt == 1 && exp >= 0 && exp <= 5 + prec) {
    if (exp < 0) {
      char c;
      xp = cp + digs + exp;
      c = *xp;
      *xp = 0;
      if (c >= '5')
        for (;;)
          if ((*--xp += 1) == '9' + 1)
            *xp = '0';
          else
            break;
      if (xp < cp)
        cp = xp;
      digs = strlen(cp);
      exp = 0;
    }
    width -= (twid = digs + exp + sign);
    while (width > 0) {
      (*pputc)(' ');
      width--;
      twid++;
    }
    if (sign)
      (*pputc)('-');
    while (*cp)
      (*pputc)(*cp++);
    while (exp > 0) {
      (*pputc)('0');
      exp--;
    }
    return twid;
  }
  if (efmt == 1 && exp >= 5 || exp + digs < -4)
    efmt++;
  if (efmt >= 2) {
    width -= (twid = sign + prec + 6);
    if (digs > prec + 1) {
      char c;
    loop:
      xp = cp + prec + 1;
      exp += digs - (prec + 1);
      c = *xp;
      *xp = 0;
      if (c >= '5')
        for (;;)
          if ((*--xp += 1) == '9' + 1)
            *xp = '0';
          else
            break;
      if (xp < cp)
        cp = xp;
      digs = strlen(cp);
      if (digs > prec + 1)
        goto loop;
    }
    exp += digs - 1;
    if (abs(exp) >= 100)
      width--;
    prec -= digs - 1;
    while (width > 0) {
      (*pputc)(' ');
      width--;
      twid++;
    }
    if (sign)
      (*pputc)('-');
    (*pputc)(*cp++);
    (*pputc)('.');
    while (*cp)
      (*pputc)(*cp++);
    while (prec > 0) {
      (*pputc)('0');
      prec--;
    }
    (*pputc)('e');
    if (exp < 0) {
      exp = -exp;
      (*pputc)('-');
    } else
      (*pputc)('+');
    if (exp >= 100) {
      (*pputc)(exp / 100 + '0');
      exp %= 100;
    }
    (*pputc)(exp / 10 + '0');
    (*pputc)(exp % 10 + '0');
    return twid;
  }
  if (exp + prec < 0) {
    char c;
    xp = cp + digs + exp + prec;
    c = *xp;
    *xp = 0;
    if (c >= '5')
      for (;;)
        if ((*--xp += 1) == '9' + 1)
          *xp = '0';
        else
          break;
    if (xp < cp)
      cp = xp;
    digs = strlen(cp);
    exp = -prec;
  }
  prec += exp;
  twid = 1 + prec + sign + digs;
  digs = -digs;
  if (exp <= digs)
    twid += digs - exp + 1;
  width -= twid;
  while (width > 0) {
    (*pputc)(' ');
    width--;
  }
  if (sign)
    (*pputc)('-');
  if (exp <= digs) {
    (*pputc)('0');
    (*pputc)('.');
    while (exp < digs) {
      (*pputc)('0');
      exp++;
    }
  }
  while (*cp) {
    (*pputc)(*cp++);
    if (++digs == exp)
      (*pputc)('.');
  }
  while (exp > 0) {
    (*pputc)('0');
    prec--;
    if (--exp == 0)
      (*pputc)('.');
  }
  while (prec > 0) {
    (*pputc)('0');
    prec--;
  }
  return twid;
}


x86 assembly (clang, -O0):
<_fnum>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %edx,%eax
mov    %esi,%edx
mov    %dil,%sil
movsd  %xmm0,-0x10(%rbp)
mov    %sil,-0x11(%rbp)
mov    %dl,-0x12(%rbp)
mov    %al,-0x13(%rbp)
mov    %rcx,-0x20(%rbp)
movsbl -0x11(%rbp),%eax
cmp    $0x0,%eax
jge    1166 <_fnum+0x36>
movb   $0x6,-0x11(%rbp)
movw   $0x0,-0x38(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    11a4 <_fnum+0x74>
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x10(%rbp)
movb   $0x1,-0x39(%rbp)
jmp    11a8 <_fnum+0x78>
movb   $0x0,-0x39(%rbp)
movl   $0x0,-0x34(%rbp)
movsd  -0x10(%rbp),%xmm0
lea    -0x80(%rbp),%rsi
add    $0x2,%rsi
lea    -0x34(%rbp),%rdi
mov    $0x1,%al
call   1050 <_fbcd@plt>
lea    -0x80(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    11f4 <_fnum+0xc4>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    11d3 <_fnum+0xa3>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1210 <_fnum+0xe0>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
cmp    $0x1,%rax
jbe    1281 <_fnum+0x151>
mov    -0x28(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
mov    %rax,%rcx
mov    -0x90(%rbp),%rax
add    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    127c <_fnum+0x14c>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x0,(%rax)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    124c <_fnum+0x11c>
jmp    129d <_fnum+0x16d>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    1298 <_fnum+0x168>
movl   $0x0,-0x34(%rbp)
jmp    129d <_fnum+0x16d>
mov    -0x28(%rbp),%rax
movb   $0x30,-0x1(%rax)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
mov    %al,-0x35(%rbp)
movsbl -0x13(%rbp),%eax
cmp    $0x0,%eax
jne    12cb <_fnum+0x19b>
movsbl -0x11(%rbp),%eax
cmp    $0x0,%eax
je     12f4 <_fnum+0x1c4>
movsbl -0x13(%rbp),%eax
cmp    $0x1,%eax
jne    146d <_fnum+0x33d>
cmpl   $0x0,-0x34(%rbp)
jl     146d <_fnum+0x33d>
mov    -0x34(%rbp),%eax
movsbl -0x11(%rbp),%ecx
add    $0x5,%ecx
cmp    %ecx,%eax
jg     146d <_fnum+0x33d>
cmpl   $0x0,-0x34(%rbp)
jge    13a8 <_fnum+0x278>
mov    -0x28(%rbp),%rax
movsbl -0x35(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x81(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
movsbl -0x81(%rbp),%eax
cmp    $0x35,%eax
jl     137f <_fnum+0x24f>
jmp    133f <_fnum+0x20f>
mov    -0x30(%rbp),%rcx
mov    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
movsbl -0x1(%rcx),%eax
add    $0x1,%eax
mov    %al,-0x1(%rcx)
movsbl %al,%eax
cmp    $0x3a,%eax
jne    1370 <_fnum+0x240>
mov    -0x30(%rbp),%rax
movb   $0x30,(%rax)
jmp    1375 <_fnum+0x245>
jmp    137a <_fnum+0x24a>
jmp    133f <_fnum+0x20f>
jmp    137f <_fnum+0x24f>
mov    -0x30(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    1395 <_fnum+0x265>
mov    -0x30(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
mov    %al,-0x35(%rbp)
movl   $0x0,-0x34(%rbp)
movsbl -0x35(%rbp),%eax
add    -0x34(%rbp),%eax
movzbl -0x39(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0x38(%rbp)
movswl %ax,%ecx
movsbl -0x12(%rbp),%eax
sub    %ecx,%eax
mov    %al,-0x12(%rbp)
movsbl -0x12(%rbp),%eax
cmp    $0x0,%eax
jle    13f5 <_fnum+0x2c5>
mov    $0x20,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x12(%rbp),%al
add    $0xff,%al
mov    %al,-0x12(%rbp)
mov    -0x38(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x38(%rbp)
jmp    13c5 <_fnum+0x295>
cmpb   $0x0,-0x39(%rbp)
je     1409 <_fnum+0x2d9>
mov    $0x2d,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
jmp    140e <_fnum+0x2de>
mov    -0x28(%rbp),%rax
cmpb   $0x0,(%rax)
je     143a <_fnum+0x30a>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movsbl (%rax),%edi
mov    $0x0,%al
call   *%rcx
jmp    140e <_fnum+0x2de>
jmp    143f <_fnum+0x30f>
cmpl   $0x0,-0x34(%rbp)
jle    1461 <_fnum+0x331>
mov    $0x30,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
jmp    143f <_fnum+0x30f>
movswl -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    19b4 <_fnum+0x884>
movsbl -0x13(%rbp),%eax
cmp    $0x1,%eax
jne    1484 <_fnum+0x354>
cmpl   $0x5,-0x34(%rbp)
jge    1496 <_fnum+0x366>
mov    -0x34(%rbp),%eax
movsbl -0x35(%rbp),%ecx
add    %ecx,%eax
cmp    $0xfffffffc,%eax
jge    149e <_fnum+0x36e>
mov    -0x13(%rbp),%al
add    $0x1,%al
mov    %al,-0x13(%rbp)
movsbl -0x13(%rbp),%eax
cmp    $0x2,%eax
jl     1744 <_fnum+0x614>
movzbl -0x39(%rbp),%eax
movsbl -0x11(%rbp),%ecx
add    %ecx,%eax
add    $0x6,%eax
mov    %ax,-0x38(%rbp)
movswl %ax,%ecx
movsbl -0x12(%rbp),%eax
sub    %ecx,%eax
mov    %al,-0x12(%rbp)
movsbl -0x35(%rbp),%eax
movsbl -0x11(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jle    15b0 <_fnum+0x480>
jmp    14e0 <_fnum+0x3b0>
mov    -0x28(%rbp),%rax
movsbl -0x11(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movsbl -0x35(%rbp),%eax
movsbl -0x11(%rbp),%ecx
add    $0x1,%ecx
sub    %ecx,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x82(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
movsbl -0x82(%rbp),%eax
cmp    $0x35,%eax
jl     1571 <_fnum+0x441>
jmp    1531 <_fnum+0x401>
mov    -0x30(%rbp),%rcx
mov    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
movsbl -0x1(%rcx),%eax
add    $0x1,%eax
mov    %al,-0x1(%rcx)
movsbl %al,%eax
cmp    $0x3a,%eax
jne    1562 <_fnum+0x432>
mov    -0x30(%rbp),%rax
movb   $0x30,(%rax)
jmp    1567 <_fnum+0x437>
jmp    156c <_fnum+0x43c>
jmp    1531 <_fnum+0x401>
jmp    1571 <_fnum+0x441>
mov    -0x30(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    1587 <_fnum+0x457>
mov    -0x30(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
mov    %al,-0x35(%rbp)
movsbl -0x35(%rbp),%eax
movsbl -0x11(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jle    15ab <_fnum+0x47b>
jmp    14e0 <_fnum+0x3b0>
jmp    15b0 <_fnum+0x480>
movsbl -0x35(%rbp),%eax
sub    $0x1,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%edi
call   1030 <abs@plt>
cmp    $0x64,%eax
jl     15d6 <_fnum+0x4a6>
mov    -0x12(%rbp),%al
add    $0xff,%al
mov    %al,-0x12(%rbp)
movsbl -0x35(%rbp),%ecx
sub    $0x1,%ecx
movsbl -0x11(%rbp),%eax
sub    %ecx,%eax
mov    %al,-0x11(%rbp)
movsbl -0x12(%rbp),%eax
cmp    $0x0,%eax
jle    1616 <_fnum+0x4e6>
mov    $0x20,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x12(%rbp),%al
add    $0xff,%al
mov    %al,-0x12(%rbp)
mov    -0x38(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x38(%rbp)
jmp    15e6 <_fnum+0x4b6>
cmpb   $0x0,-0x39(%rbp)
je     162a <_fnum+0x4fa>
mov    $0x2d,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movsbl (%rax),%edi
mov    $0x0,%al
call   *%rcx
mov    $0x2e,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x28(%rbp),%rax
cmpb   $0x0,(%rax)
je     167a <_fnum+0x54a>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movsbl (%rax),%edi
mov    $0x0,%al
call   *%rcx
jmp    164e <_fnum+0x51e>
jmp    167f <_fnum+0x54f>
movsbl -0x11(%rbp),%eax
cmp    $0x0,%eax
jle    16a3 <_fnum+0x573>
mov    $0x30,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
jmp    167f <_fnum+0x54f>
mov    $0x65,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
cmpl   $0x0,-0x34(%rbp)
jge    16ce <_fnum+0x59e>
xor    %eax,%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    $0x2d,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
jmp    16d8 <_fnum+0x5a8>
mov    $0x2b,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
cmpl   $0x64,-0x34(%rbp)
jl     1708 <_fnum+0x5d8>
mov    -0x20(%rbp),%rcx
mov    -0x34(%rbp),%eax
mov    $0x64,%esi
cltd
idiv   %esi
mov    %eax,%edi
add    $0x30,%edi
mov    $0x0,%al
call   *%rcx
mov    -0x34(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,-0x34(%rbp)
mov    -0x20(%rbp),%rcx
mov    -0x34(%rbp),%eax
mov    $0xa,%esi
cltd
idiv   %esi
mov    %eax,%edi
add    $0x30,%edi
mov    $0x0,%al
call   *%rcx
mov    -0x20(%rbp),%rcx
mov    -0x34(%rbp),%eax
mov    $0xa,%esi
cltd
idiv   %esi
mov    %edx,%edi
add    $0x30,%edi
mov    $0x0,%al
call   *%rcx
movswl -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    19b4 <_fnum+0x884>
mov    -0x34(%rbp),%eax
movsbl -0x11(%rbp),%ecx
add    %ecx,%eax
cmp    $0x0,%eax
jge    180e <_fnum+0x6de>
mov    -0x28(%rbp),%rax
movsbl -0x35(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
add    %rcx,%rax
movsbl -0x11(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x83(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
movsbl -0x83(%rbp),%eax
cmp    $0x35,%eax
jl     17e1 <_fnum+0x6b1>
jmp    17a1 <_fnum+0x671>
mov    -0x30(%rbp),%rcx
mov    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
movsbl -0x1(%rcx),%eax
add    $0x1,%eax
mov    %al,-0x1(%rcx)
movsbl %al,%eax
cmp    $0x3a,%eax
jne    17d2 <_fnum+0x6a2>
mov    -0x30(%rbp),%rax
movb   $0x30,(%rax)
jmp    17d7 <_fnum+0x6a7>
jmp    17dc <_fnum+0x6ac>
jmp    17a1 <_fnum+0x671>
jmp    17e1 <_fnum+0x6b1>
mov    -0x30(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    17f7 <_fnum+0x6c7>
mov    -0x30(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
mov    %al,-0x35(%rbp)
movsbl -0x11(%rbp),%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%ecx
movsbl -0x11(%rbp),%eax
add    %ecx,%eax
mov    %al,-0x11(%rbp)
movsbl -0x11(%rbp),%eax
add    $0x1,%eax
movzbl -0x39(%rbp),%ecx
add    %ecx,%eax
movsbl -0x35(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0x38(%rbp)
movsbl -0x35(%rbp),%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %al,-0x35(%rbp)
mov    -0x34(%rbp),%eax
movsbl -0x35(%rbp),%ecx
cmp    %ecx,%eax
jg     185f <_fnum+0x72f>
movsbl -0x35(%rbp),%ecx
sub    -0x34(%rbp),%ecx
add    $0x1,%ecx
movswl -0x38(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0x38(%rbp)
movswl -0x38(%rbp),%ecx
movsbl -0x12(%rbp),%eax
sub    %ecx,%eax
mov    %al,-0x12(%rbp)
movsbl -0x12(%rbp),%eax
cmp    $0x0,%eax
jle    1890 <_fnum+0x760>
mov    $0x20,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x12(%rbp),%al
add    $0xff,%al
mov    %al,-0x12(%rbp)
jmp    186c <_fnum+0x73c>
cmpb   $0x0,-0x39(%rbp)
je     18a4 <_fnum+0x774>
mov    $0x2d,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x34(%rbp),%eax
movsbl -0x35(%rbp),%ecx
cmp    %ecx,%eax
jg     18f3 <_fnum+0x7c3>
mov    $0x30,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    $0x2e,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x34(%rbp),%eax
movsbl -0x35(%rbp),%ecx
cmp    %ecx,%eax
jge    18ee <_fnum+0x7be>
mov    $0x30,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    18c7 <_fnum+0x797>
jmp    18f3 <_fnum+0x7c3>
jmp    18f8 <_fnum+0x7c8>
mov    -0x28(%rbp),%rax
cmpb   $0x0,(%rax)
je     1942 <_fnum+0x812>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movsbl (%rax),%edi
mov    $0x0,%al
call   *%rcx
mov    -0x35(%rbp),%al
add    $0x1,%al
mov    %al,-0x35(%rbp)
movsbl %al,%eax
cmp    -0x34(%rbp),%eax
jne    193d <_fnum+0x80d>
mov    $0x2e,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
jmp    18f8 <_fnum+0x7c8>
jmp    1947 <_fnum+0x817>
cmpl   $0x0,-0x34(%rbp)
jle    1984 <_fnum+0x854>
mov    $0x30,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
cmp    $0x0,%eax
jne    197f <_fnum+0x84f>
mov    $0x2e,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
jmp    1947 <_fnum+0x817>
jmp    1989 <_fnum+0x859>
movsbl -0x11(%rbp),%eax
cmp    $0x0,%eax
jle    19ad <_fnum+0x87d>
mov    $0x30,%edi
mov    $0x0,%al
call   *-0x20(%rbp)
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
jmp    1989 <_fnum+0x859>
movswl -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<_fnum>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %rcx,%r14
mov    %edx,%ebx
mov    %esi,%ebp
movapd %xmm0,%xmm1
test   $0x80,%dil
mov    $0x6,%r13d
cmove  %edi,%r13d
xorpd  %xmm0,%xmm0
xor    %r12d,%r12d
ucomisd %xmm1,%xmm0
seta   %al
movapd %xmm1,0x20(%rsp)
ja     1166 <_fnum+0x46>
movapd %xmm1,%xmm0
jmp    1172 <_fnum+0x52>
movapd 0xe92(%rip),%xmm0
xorpd  %xmm1,%xmm0
mov    %al,%r12b
movl   $0x0,0xc(%rsp)
lea    0x42(%rsp),%r15
lea    0xc(%rsp),%rdi
mov    %r15,%rsi
mov    $0x1,%al
call   1040 <_fbcd@plt>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl (%r15),%eax
cmp    $0x30,%al
jne    11ae <_fnum+0x8e>
add    $0x1,%r15
jmp    11a0 <_fnum+0x80>
test   %al,%al
jne    11b6 <_fnum+0x96>
add    $0xffffffffffffffff,%r15
mov    %r15,%rdi
call   1030 <strlen@plt>
cmp    $0x2,%rax
jb     11f4 <_fnum+0xd4>
cmpb   $0x30,-0x1(%r15,%rax,1)
jne    1202 <_fnum+0xe2>
add    %r15,%rax
add    $0xffffffffffffffff,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
addl   $0x1,0xc(%rsp)
movb   $0x0,(%rax)
cmpb   $0x30,-0x1(%rax)
lea    -0x1(%rax),%rax
je     11e0 <_fnum+0xc0>
jmp    1202 <_fnum+0xe2>
cmpb   $0x30,(%r15)
jne    1202 <_fnum+0xe2>
movl   $0x0,0xc(%rsp)
movb   $0x30,-0x1(%r15)
mov    %r15,%rdi
call   1030 <strlen@plt>
mov    %ebx,%ecx
shl    $0x18,%ecx
mov    %r13d,%edx
shl    $0x18,%edx
or     %ecx,%edx
je     132e <_fnum+0x20e>
movsbl %r13b,%edi
mov    0xc(%rsp),%esi
cmp    $0x1000000,%ecx
jne    1241 <_fnum+0x121>
test   %esi,%esi
js     1241 <_fnum+0x121>
lea    0x5(%rdi),%edx
cmp    %edx,%esi
jle    15c6 <_fnum+0x4a6>
movsbl %al,%edx
cmp    $0x1000000,%ecx
jne    1251 <_fnum+0x131>
cmp    $0x4,%esi
jg     1259 <_fnum+0x139>
lea    (%rsi,%rdx,1),%ecx
cmp    $0xfffffffb,%ecx
jg     125c <_fnum+0x13c>
add    $0x1,%ebx
movapd 0x20(%rsp),%xmm1
cmp    $0x2,%bl
jl     138e <_fnum+0x26e>
lea    (%rdi,%r12,1),%ebx
add    $0x6,%ebx
mov    %ebp,%ecx
sub    %ebx,%ecx
lea    0x1(%rdi),%r8d
cmp    %edx,%r8d
mov    %ebx,0x1c(%rsp)
mov    %ecx,0x3c(%rsp)
jge    13fe <_fnum+0x2de>
movslq %edi,%r12
not    %edi
mov    %rdi,0x10(%rsp)
mov    %r8d,%ebx
jmp    12ce <_fnum+0x1ae>
nopw   0x0(%rax,%rax,1)
mov    %rax,%rcx
cmp    %r15,%rcx
cmovb  %rcx,%r15
mov    %r15,%rdi
call   1030 <strlen@plt>
movsbl %al,%edx
mov    0xc(%rsp),%esi
mov    %ebx,%ecx
cmp    %edx,%ebx
movapd 0x20(%rsp),%xmm1
mov    0x10(%rsp),%rdi
jge    13fe <_fnum+0x2de>
add    %edi,%esi
lea    (%r15,%r12,1),%rcx
add    $0x1,%rcx
movsbl %al,%edx
add    %esi,%edx
mov    %edx,0xc(%rsp)
mov    0x1(%r15,%r12,1),%al
movb   $0x0,0x1(%r15,%r12,1)
cmp    $0x35,%al
jl     12a3 <_fnum+0x183>
lea    -0x1(%rcx),%rax
mov    -0x1(%rcx),%dl
add    $0x1,%dl
mov    %dl,-0x1(%rcx)
cmp    $0x3a,%dl
jne    12a0 <_fnum+0x180>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movb   $0x30,(%rax)
lea    -0x1(%rax),%rcx
movzbl -0x1(%rax),%edx
add    $0x1,%dl
mov    %dl,-0x1(%rax)
mov    %rcx,%rax
cmp    $0x3a,%dl
je     1310 <_fnum+0x1f0>
jmp    12a3 <_fnum+0x183>
movslq 0xc(%rsp),%rsi
test   %rsi,%rsi
jns    15c6 <_fnum+0x4a6>
movsbq %al,%rdx
add    %r15,%rdx
lea    (%rdx,%rsi,1),%rcx
mov    (%rsi,%rdx,1),%bl
movb   $0x0,(%rsi,%rdx,1)
cmp    $0x35,%bl
jl     15ad <_fnum+0x48d>
lea    -0x1(%rcx),%rax
mov    -0x1(%rcx),%dl
add    $0x1,%dl
mov    %dl,-0x1(%rcx)
cmp    $0x3a,%dl
jne    15aa <_fnum+0x48a>
nopl   (%rax)
movb   $0x30,(%rax)
lea    -0x1(%rax),%rcx
movzbl -0x1(%rax),%edx
add    $0x1,%dl
mov    %dl,-0x1(%rax)
mov    %rcx,%rax
cmp    $0x3a,%dl
je     1370 <_fnum+0x250>
jmp    15ad <_fnum+0x48d>
mov    %esi,%ecx
add    %edi,%ecx
jns    16b8 <_fnum+0x598>
movslq %esi,%rdx
movsbq %al,%rcx
add    %r15,%rcx
add    %rdx,%rcx
movslq %edi,%rdx
lea    (%rcx,%rdx,1),%rax
mov    (%rdx,%rcx,1),%bl
movb   $0x0,(%rdx,%rcx,1)
cmp    $0x35,%bl
jl     1692 <_fnum+0x572>
lea    -0x1(%rax),%rcx
mov    -0x1(%rax),%dl
add    $0x1,%dl
mov    %dl,-0x1(%rax)
mov    %rdi,%rbx
cmp    $0x3a,%dl
jne    1697 <_fnum+0x577>
cs nopw 0x0(%rax,%rax,1)
nop
movb   $0x30,(%rcx)
lea    -0x1(%rcx),%rax
movzbl -0x1(%rcx),%edx
add    $0x1,%dl
mov    %dl,-0x1(%rcx)
mov    %rax,%rcx
cmp    $0x3a,%dl
je     13e0 <_fnum+0x2c0>
jmp    169a <_fnum+0x57a>
lea    -0x1(%rdx),%r12d
lea    (%rdx,%rsi,1),%eax
add    $0xffffffff,%eax
mov    %eax,0xc(%rsp)
mov    %eax,%ecx
neg    %ecx
cmovs  %eax,%ecx
cmp    $0x64,%ecx
setae  %al
mov    0x3c(%rsp),%ecx
sub    %al,%cl
test   %cl,%cl
mov    %rdx,0x10(%rsp)
jle    1469 <_fnum+0x349>
neg    %al
xorpd  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
seta   %cl
add    %al,%bpl
sub    %cl,%bpl
sub    %r13b,%bpl
add    $0xfb,%bpl
mov    0x1c(%rsp),%ebx
cs nopw 0x0(%rax,%rax,1)
mov    $0x20,%edi
xor    %eax,%eax
call   *%r14
add    $0x1,%ebx
add    $0xff,%bpl
cmp    $0x1,%bpl
ja     1450 <_fnum+0x330>
jmp    146d <_fnum+0x34d>
mov    0x1c(%rsp),%ebx
mov    %r13d,%ebp
sub    %r12d,%ebp
xorpd  %xmm0,%xmm0
ucomisd 0x20(%rsp),%xmm0
jbe    1489 <_fnum+0x369>
mov    $0x2d,%edi
xor    %eax,%eax
call   *%r14
movsbl (%r15),%edi
xor    %eax,%eax
call   *%r14
mov    $0x2e,%edi
xor    %eax,%eax
call   *%r14
mov    0x1(%r15),%al
test   %al,%al
je     14c4 <_fnum+0x3a4>
add    $0x2,%r15
nopl   0x0(%rax,%rax,1)
movsbl %al,%edi
xor    %eax,%eax
call   *%r14
movzbl (%r15),%eax
add    $0x1,%r15
test   %al,%al
jne    14b0 <_fnum+0x390>
test   %bpl,%bpl
jle    14f4 <_fnum+0x3d4>
sub    0x10(%rsp),%r13b
add    $0x2,%r13b
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    $0x30,%edi
xor    %eax,%eax
call   *%r14
add    $0xff,%r13b
cmp    $0x1,%r13b
ja     14e0 <_fnum+0x3c0>
mov    $0x65,%edi
xor    %eax,%eax
call   *%r14
mov    0xc(%rsp),%eax
mov    $0x2b,%edi
test   %eax,%eax
jns    1516 <_fnum+0x3f6>
neg    %eax
mov    %eax,0xc(%rsp)
mov    $0x2d,%edi
xor    %eax,%eax
call   *%r14
mov    0xc(%rsp),%eax
cmp    $0x64,%eax
jl     155b <_fnum+0x43b>
mov    %eax,%eax
imul   $0x51eb851f,%rax,%rdi
shr    $0x25,%rdi
add    $0x30,%edi
xor    %eax,%eax
call   *%r14
movslq 0xc(%rsp),%rax
imul   $0x51eb851f,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x25,%rcx
add    %edx,%ecx
imul   $0x64,%ecx,%ecx
sub    %ecx,%eax
mov    %eax,0xc(%rsp)
cltq
imul   $0x66666667,%rax,%rax
mov    %rax,%rcx
sar    $0x22,%rcx
shr    $0x3f,%rax
lea    (%rcx,%rax,1),%edi
add    $0x30,%edi
xor    %eax,%eax
call   *%r14
movslq 0xc(%rsp),%rdi
imul   $0x66666667,%rdi,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
sub    %eax,%edi
add    $0x30,%edi
xor    %eax,%eax
call   *%r14
movswl %bx,%ebx
jmp    167e <_fnum+0x55e>
mov    %rax,%rcx
cmp    %r15,%rcx
cmovb  %rcx,%r15
mov    %r15,%rdi
call   1030 <strlen@plt>
movl   $0x0,0xc(%rsp)
xor    %esi,%esi
movapd 0x20(%rsp),%xmm1
movsbl %al,%ecx
add    %esi,%r12d
add    %ecx,%r12d
mov    %ebp,%ecx
sub    %r12d,%ecx
test   %cl,%cl
jle    1618 <_fnum+0x4f8>
xorpd  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
seta   %cl
add    %cl,%al
add    %al,%sil
sub    %sil,%bpl
add    $0x1,%bpl
cs nopw 0x0(%rax,%rax,1)
nop
mov    $0x20,%edi
xor    %eax,%eax
call   *%r14
add    $0x1,%r12d
add    $0xff,%bpl
cmp    $0x1,%bpl
ja     1600 <_fnum+0x4e0>
xorpd  %xmm0,%xmm0
ucomisd 0x20(%rsp),%xmm0
jbe    162e <_fnum+0x50e>
mov    $0x2d,%edi
xor    %eax,%eax
call   *%r14
mov    (%r15),%al
test   %al,%al
je     1654 <_fnum+0x534>
add    $0x1,%r15
nopl   0x0(%rax)
movsbl %al,%edi
xor    %eax,%eax
call   *%r14
movzbl (%r15),%eax
add    $0x1,%r15
test   %al,%al
jne    1640 <_fnum+0x520>
cmpl   $0x0,0xc(%rsp)
jle    167a <_fnum+0x55a>
nopl   0x0(%rax,%rax,1)
mov    $0x30,%edi
xor    %eax,%eax
call   *%r14
mov    0xc(%rsp),%eax
lea    -0x1(%rax),%ecx
mov    %ecx,0xc(%rsp)
cmp    $0x1,%eax
jg     1660 <_fnum+0x540>
movswl %r12w,%ebx
mov    %ebx,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %rdi,%rbx
jmp    169a <_fnum+0x57a>
mov    %rcx,%rax
cmp    %r15,%rax
cmovb  %rax,%r15
mov    %r15,%rdi
call   1030 <strlen@plt>
mov    %rbx,%rsi
neg    %esi
mov    %esi,0xc(%rsp)
movapd 0x20(%rsp),%xmm1
mov    %eax,%ecx
neg    %cl
movsbl %cl,%r12d
mov    %r12d,%ecx
sub    %esi,%ecx
add    $0x1,%ecx
xor    %edx,%edx
cmp    %esi,%r12d
cmovge %ecx,%edx
xorpd  %xmm0,%xmm0
xor    %ecx,%ecx
ucomisd %xmm1,%xmm0
seta   %cl
add    %esi,%r13d
movsbl %r13b,%edi
mov    %rax,0x10(%rsp)
movsbl %al,%esi
add    %esi,%ecx
add    %edi,%ecx
lea    (%rdx,%rcx,1),%ebx
add    $0x1,%ebx
mov    %ebp,%eax
sub    %ebx,%eax
test   %al,%al
jle    1724 <_fnum+0x604>
sub    %bl,%bpl
add    $0x1,%bpl
cs nopw 0x0(%rax,%rax,1)
nop
mov    $0x20,%edi
xor    %eax,%eax
call   *%r14
add    $0xff,%bpl
cmp    $0x1,%bpl
ja     1710 <_fnum+0x5f0>
xorpd  %xmm0,%xmm0
ucomisd 0x20(%rsp),%xmm0
jbe    173a <_fnum+0x61a>
mov    $0x2d,%edi
xor    %eax,%eax
call   *%r14
mov    0xc(%rsp),%ecx
cmp    %r12d,%ecx
jle    17ff <_fnum+0x6df>
mov    (%r15),%al
test   %al,%al
je     1792 <_fnum+0x672>
mov    %ebx,%ebp
mov    $0x1,%bl
sub    0x10(%rsp),%bl
add    $0x1,%r15
jmp    176f <_fnum+0x64f>
nopl   0x0(%rax)
movzbl (%r15),%eax
add    $0x1,%bl
add    $0x1,%r15
test   %al,%al
je     178c <_fnum+0x66c>
movsbl %al,%edi
xor    %eax,%eax
call   *%r14
movsbl %bl,%eax
cmp    %eax,0xc(%rsp)
jne    1760 <_fnum+0x640>
mov    $0x2e,%edi
xor    %eax,%eax
call   *%r14
jmp    1760 <_fnum+0x640>
mov    0xc(%rsp),%ecx
mov    %ebp,%ebx
test   %ecx,%ecx
jg     17d8 <_fnum+0x6b8>
movswl %bx,%ebx
test   %r13b,%r13b
jle    167e <_fnum+0x55e>
add    $0x1,%r13b
cs nopw 0x0(%rax,%rax,1)
mov    $0x30,%edi
xor    %eax,%eax
call   *%r14
add    $0xff,%r13b
cmp    $0x1,%r13b
ja     17b0 <_fnum+0x690>
jmp    167e <_fnum+0x55e>
nopl   0x0(%rax)
add    $0xff,%r13b
test   %eax,%eax
jle    1796 <_fnum+0x676>
mov    $0x30,%edi
xor    %eax,%eax
call   *%r14
mov    0xc(%rsp),%eax
add    $0xffffffff,%eax
mov    %eax,0xc(%rsp)
jne    17d0 <_fnum+0x6b0>
mov    $0x2e,%edi
xor    %eax,%eax
call   *%r14
mov    0xc(%rsp),%eax
jmp    17d0 <_fnum+0x6b0>
mov    $0x30,%edi
xor    %eax,%eax
call   *%r14
mov    $0x2e,%edi
xor    %eax,%eax
call   *%r14
mov    0xc(%rsp),%ecx
cmp    %r12d,%ecx
jge    1747 <_fnum+0x627>
mov    $0x30,%edi
xor    %eax,%eax
call   *%r14
mov    0xc(%rsp),%ecx
add    $0x1,%ecx
mov    %ecx,0xc(%rsp)
cmp    %r12d,%ecx
jl     1820 <_fnum+0x700>
jmp    1747 <_fnum+0x627>

LLVM IR (-O0):
define i32 @_fnum(double %0, i32 %1, i32 %2, i32 %3, void (...)* %4) {
%6 = alloca i32
%7 = alloca double
%8 = alloca i8
%9 = alloca i8
%10 = alloca i8
%11 = alloca void (...)*
%12 = alloca i8*
%13 = alloca i8*
%14 = alloca i32
%15 = alloca i8
%16 = alloca i16
%17 = alloca i8
%18 = alloca [60 x i8]
%19 = alloca i8
%20 = alloca i8
%21 = alloca i8
%22 = trunc i32 %1 to i8
%23 = trunc i32 %2 to i8
%24 = trunc i32 %3 to i8
store double %0, double* %7
store i8 %22, i8* %8
store i8 %23, i8* %9
store i8 %24, i8* %10
store void (...)* %4, void (...)** %11
%25 = load i8, i8* %8
%26 = sext i8 %25 to i32
%27 = icmp slt i32 %26, 0
br i1 %27, label %28, label %29
28: ; preds = %5
store i8 6, i8* %8
br label %29
29: ; preds = %28, %5
store i16 0, i16* %16
%30 = load double, double* %7
%31 = fcmp olt double %30, 0.000000e+00
br i1 %31, label %32, label %35
32: ; preds = %29
%33 = load double, double* %7
%34 = fneg double %33
store double %34, double* %7
store i8 1, i8* %17
br label %36
35: ; preds = %29
store i8 0, i8* %17
br label %36
36: ; preds = %35, %32
store i32 0, i32* %14
%37 = load double, double* %7
%38 = getelementptr inbounds [60 x i8], [60 x i8]* %18, i64 0, i64 0
%39 = getelementptr inbounds i8, i8* %38, i64 2
%40 = call i32 (double, i32*, i8*, ...) bitcast (i32 (...)* @_fbcd to i32 (double, i32*, i8*, ...)*)(double %37, i32* %14, i8* %39)
%41 = getelementptr inbounds [60 x i8], [60 x i8]* %18, i64 0, i64 0
%42 = getelementptr inbounds i8, i8* %41, i64 2
store i8* %42, i8** %12
br label %43
43: ; preds = %48, %36
%44 = load i8*, i8** %12
%45 = load i8, i8* %44
%46 = sext i8 %45 to i32
%47 = icmp eq i32 %46, 48
br i1 %47, label %48, label %51
48: ; preds = %43
%49 = load i8*, i8** %12
%50 = getelementptr inbounds i8, i8* %49, i32 1
store i8* %50, i8** %12
br label %43
51: ; preds = %43
%52 = load i8*, i8** %12
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = icmp eq i32 %54, 0
br i1 %55, label %56, label %59
56: ; preds = %51
%57 = load i8*, i8** %12
%58 = getelementptr inbounds i8, i8* %57, i32 -1
store i8* %58, i8** %12
br label %59
59: ; preds = %56, %51
%60 = load i8*, i8** %12
%61 = call i64 @strlen(i8* %60)
%62 = icmp ugt i64 %61, 1
br i1 %62, label %63, label %80
63: ; preds = %59
%64 = load i8*, i8** %12
%65 = load i8*, i8** %12
%66 = call i64 @strlen(i8* %65)
%67 = getelementptr inbounds i8, i8* %64, i64 %66
%68 = getelementptr inbounds i8, i8* %67, i64 -1
store i8* %68, i8** %13
br label %69
69: ; preds = %74, %63
%70 = load i8*, i8** %13
%71 = load i8, i8* %70
%72 = sext i8 %71 to i32
%73 = icmp eq i32 %72, 48
br i1 %73, label %74, label %79
74: ; preds = %69
%75 = load i8*, i8** %13
%76 = getelementptr inbounds i8, i8* %75, i32 -1
store i8* %76, i8** %13
store i8 0, i8* %75
%77 = load i32, i32* %14
%78 = add nsw i32 %77, 1
store i32 %78, i32* %14
br label %69
79: ; preds = %69
br label %87
80: ; preds = %59
%81 = load i8*, i8** %12
%82 = load i8, i8* %81
%83 = sext i8 %82 to i32
%84 = icmp eq i32 %83, 48
br i1 %84, label %85, label %86
85: ; preds = %80
store i32 0, i32* %14
br label %86
86: ; preds = %85, %80
br label %87
87: ; preds = %86, %79
%88 = load i8*, i8** %12
%89 = getelementptr inbounds i8, i8* %88, i64 -1
store i8 48, i8* %89
%90 = load i8*, i8** %12
%91 = call i64 @strlen(i8* %90)
%92 = trunc i64 %91 to i8
store i8 %92, i8* %15
%93 = load i8, i8* %10
%94 = sext i8 %93 to i32
%95 = icmp eq i32 %94, 0
br i1 %95, label %96, label %100
96: ; preds = %87
%97 = load i8, i8* %8
%98 = sext i8 %97 to i32
%99 = icmp eq i32 %98, 0
br i1 %99, label %113, label %100
100: ; preds = %96, %87
%101 = load i8, i8* %10
%102 = sext i8 %101 to i32
%103 = icmp eq i32 %102, 1
br i1 %103, label %104, label %211
104: ; preds = %100
%105 = load i32, i32* %14
%106 = icmp sge i32 %105, 0
br i1 %106, label %107, label %211
107: ; preds = %104
%108 = load i32, i32* %14
%109 = load i8, i8* %8
%110 = sext i8 %109 to i32
%111 = add nsw i32 5, %110
%112 = icmp sle i32 %108, %111
br i1 %112, label %113, label %211
113: ; preds = %107, %96
%114 = load i32, i32* %14
%115 = icmp slt i32 %114, 0
br i1 %115, label %116, label %156
116: ; preds = %113
%117 = load i8*, i8** %12
%118 = load i8, i8* %15
%119 = sext i8 %118 to i32
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds i8, i8* %117, i64 %120
%122 = load i32, i32* %14
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds i8, i8* %121, i64 %123
store i8* %124, i8** %13
%125 = load i8*, i8** %13
%126 = load i8, i8* %125
store i8 %126, i8* %19
%127 = load i8*, i8** %13
store i8 0, i8* %127
%128 = load i8, i8* %19
%129 = sext i8 %128 to i32
%130 = icmp sge i32 %129, 53
br i1 %130, label %131, label %146
131: ; preds = %116
br label %132
132: ; preds = %144, %131
%133 = load i8*, i8** %13
%134 = getelementptr inbounds i8, i8* %133, i32 -1
store i8* %134, i8** %13
%135 = load i8, i8* %134
%136 = sext i8 %135 to i32
%137 = add nsw i32 %136, 1
%138 = trunc i32 %137 to i8
store i8 %138, i8* %134
%139 = sext i8 %138 to i32
%140 = icmp eq i32 %139, 58
br i1 %140, label %141, label %143
141: ; preds = %132
%142 = load i8*, i8** %13
store i8 48, i8* %142
br label %144
143: ; preds = %132
br label %145
144: ; preds = %141
br label %132
145: ; preds = %143
br label %146
146: ; preds = %145, %116
%147 = load i8*, i8** %13
%148 = load i8*, i8** %12
%149 = icmp ult i8* %147, %148
br i1 %149, label %150, label %152
150: ; preds = %146
%151 = load i8*, i8** %13
store i8* %151, i8** %12
br label %152
152: ; preds = %150, %146
%153 = load i8*, i8** %12
%154 = call i64 @strlen(i8* %153)
%155 = trunc i64 %154 to i8
store i8 %155, i8* %15
store i32 0, i32* %14
br label %156
156: ; preds = %152, %113
%157 = load i8, i8* %15
%158 = sext i8 %157 to i32
%159 = load i32, i32* %14
%160 = add nsw i32 %158, %159
%161 = load i8, i8* %17
%162 = zext i8 %161 to i32
%163 = add nsw i32 %160, %162
%164 = trunc i32 %163 to i16
store i16 %164, i16* %16
%165 = sext i16 %164 to i32
%166 = load i8, i8* %9
%167 = sext i8 %166 to i32
%168 = sub nsw i32 %167, %165
%169 = trunc i32 %168 to i8
store i8 %169, i8* %9
br label %170
170: ; preds = %174, %156
%171 = load i8, i8* %9
%172 = sext i8 %171 to i32
%173 = icmp sgt i32 %172, 0
br i1 %173, label %174, label %181
174: ; preds = %170
%175 = load void (...)*, void (...)** %11
%176 = bitcast void (...)* %175 to void (i32, ...)*
%177 = load i8, i8* %9
%178 = add i8 %177, -1
store i8 %178, i8* %9
%179 = load i16, i16* %16
%180 = add i16 %179, 1
store i16 %180, i16* %16
br label %170
181: ; preds = %170
%182 = load i8, i8* %17
%183 = icmp ne i8 %182, 0
br i1 %183, label %184, label %187
184: ; preds = %181
%185 = load void (...)*, void (...)** %11
%186 = bitcast void (...)* %185 to void (i32, ...)*
br label %187
187: ; preds = %184, %181
br label %188
188: ; preds = %192, %187
%189 = load i8*, i8** %12
%190 = load i8, i8* %189
%191 = icmp ne i8 %190, 0
br i1 %191, label %192, label %199
192: ; preds = %188
%193 = load void (...)*, void (...)** %11
%194 = load i8*, i8** %12
%195 = getelementptr inbounds i8, i8* %194, i32 1
store i8* %195, i8** %12
%196 = load i8, i8* %194
%197 = sext i8 %196 to i32
%198 = bitcast void (...)* %193 to void (i32, ...)*
br label %188
199: ; preds = %188
br label %200
200: ; preds = %203, %199
%201 = load i32, i32* %14
%202 = icmp sgt i32 %201, 0
br i1 %202, label %203, label %208
203: ; preds = %200
%204 = load void (...)*, void (...)** %11
%205 = bitcast void (...)* %204 to void (i32, ...)*
%206 = load i32, i32* %14
%207 = add nsw i32 %206, -1
store i32 %207, i32* %14
br label %200
208: ; preds = %200
%209 = load i16, i16* %16
%210 = sext i16 %209 to i32
store i32 %210, i32* %6
br label %589
211: ; preds = %107, %104, %100
%212 = load i8, i8* %10
%213 = sext i8 %212 to i32
%214 = icmp eq i32 %213, 1
br i1 %214, label %215, label %218
215: ; preds = %211
%216 = load i32, i32* %14
%217 = icmp sge i32 %216, 5
br i1 %217, label %224, label %218
218: ; preds = %215, %211
%219 = load i32, i32* %14
%220 = load i8, i8* %15
%221 = sext i8 %220 to i32
%222 = add nsw i32 %219, %221
%223 = icmp slt i32 %222, -4
br i1 %223, label %224, label %227
224: ; preds = %218, %215
%225 = load i8, i8* %10
%226 = add i8 %225, 1
store i8 %226, i8* %10
br label %227
227: ; preds = %224, %218
%228 = load i8, i8* %10
%229 = sext i8 %228 to i32
%230 = icmp sge i32 %229, 2
br i1 %230, label %231, label %409
231: ; preds = %227
%232 = load i8, i8* %17
%233 = zext i8 %232 to i32
%234 = load i8, i8* %8
%235 = sext i8 %234 to i32
%236 = add nsw i32 %233, %235
%237 = add nsw i32 %236, 6
%238 = trunc i32 %237 to i16
store i16 %238, i16* %16
%239 = sext i16 %238 to i32
%240 = load i8, i8* %9
%241 = sext i8 %240 to i32
%242 = sub nsw i32 %241, %239
%243 = trunc i32 %242 to i8
store i8 %243, i8* %9
%244 = load i8, i8* %15
%245 = sext i8 %244 to i32
%246 = load i8, i8* %8
%247 = sext i8 %246 to i32
%248 = add nsw i32 %247, 1
%249 = icmp sgt i32 %245, %248
br i1 %249, label %250, label %305
250: ; preds = %231
br label %251
251: ; preds = %303, %250
%252 = load i8*, i8** %12
%253 = load i8, i8* %8
%254 = sext i8 %253 to i32
%255 = sext i32 %254 to i64
%256 = getelementptr inbounds i8, i8* %252, i64 %255
%257 = getelementptr inbounds i8, i8* %256, i64 1
store i8* %257, i8** %13
%258 = load i8, i8* %15
%259 = sext i8 %258 to i32
%260 = load i8, i8* %8
%261 = sext i8 %260 to i32
%262 = add nsw i32 %261, 1
%263 = sub nsw i32 %259, %262
%264 = load i32, i32* %14
%265 = add nsw i32 %264, %263
store i32 %265, i32* %14
%266 = load i8*, i8** %13
%267 = load i8, i8* %266
store i8 %267, i8* %20
%268 = load i8*, i8** %13
store i8 0, i8* %268
%269 = load i8, i8* %20
%270 = sext i8 %269 to i32
%271 = icmp sge i32 %270, 53
br i1 %271, label %272, label %287
272: ; preds = %251
br label %273
273: ; preds = %285, %272
%274 = load i8*, i8** %13
%275 = getelementptr inbounds i8, i8* %274, i32 -1
store i8* %275, i8** %13
%276 = load i8, i8* %275
%277 = sext i8 %276 to i32
%278 = add nsw i32 %277, 1
%279 = trunc i32 %278 to i8
store i8 %279, i8* %275
%280 = sext i8 %279 to i32
%281 = icmp eq i32 %280, 58
br i1 %281, label %282, label %284
282: ; preds = %273
%283 = load i8*, i8** %13
store i8 48, i8* %283
br label %285
284: ; preds = %273
br label %286
285: ; preds = %282
br label %273
286: ; preds = %284
br label %287
287: ; preds = %286, %251
%288 = load i8*, i8** %13
%289 = load i8*, i8** %12
%290 = icmp ult i8* %288, %289
br i1 %290, label %291, label %293
291: ; preds = %287
%292 = load i8*, i8** %13
store i8* %292, i8** %12
br label %293
293: ; preds = %291, %287
%294 = load i8*, i8** %12
%295 = call i64 @strlen(i8* %294)
%296 = trunc i64 %295 to i8
store i8 %296, i8* %15
%297 = load i8, i8* %15
%298 = sext i8 %297 to i32
%299 = load i8, i8* %8
%300 = sext i8 %299 to i32
%301 = add nsw i32 %300, 1
%302 = icmp sgt i32 %298, %301
br i1 %302, label %303, label %304
303: ; preds = %293
br label %251
304: ; preds = %293
br label %305
305: ; preds = %304, %231
%306 = load i8, i8* %15
%307 = sext i8 %306 to i32
%308 = sub nsw i32 %307, 1
%309 = load i32, i32* %14
%310 = add nsw i32 %309, %308
store i32 %310, i32* %14
%311 = load i32, i32* %14
%312 = call i32 @abs(i32 %311)
%313 = icmp sge i32 %312, 100
br i1 %313, label %314, label %317
314: ; preds = %305
%315 = load i8, i8* %9
%316 = add i8 %315, -1
store i8 %316, i8* %9
br label %317
317: ; preds = %314, %305
%318 = load i8, i8* %15
%319 = sext i8 %318 to i32
%320 = sub nsw i32 %319, 1
%321 = load i8, i8* %8
%322 = sext i8 %321 to i32
%323 = sub nsw i32 %322, %320
%324 = trunc i32 %323 to i8
store i8 %324, i8* %8
br label %325
325: ; preds = %329, %317
%326 = load i8, i8* %9
%327 = sext i8 %326 to i32
%328 = icmp sgt i32 %327, 0
br i1 %328, label %329, label %336
329: ; preds = %325
%330 = load void (...)*, void (...)** %11
%331 = bitcast void (...)* %330 to void (i32, ...)*
%332 = load i8, i8* %9
%333 = add i8 %332, -1
store i8 %333, i8* %9
%334 = load i16, i16* %16
%335 = add i16 %334, 1
store i16 %335, i16* %16
br label %325
336: ; preds = %325
%337 = load i8, i8* %17
%338 = icmp ne i8 %337, 0
br i1 %338, label %339, label %342
339: ; preds = %336
%340 = load void (...)*, void (...)** %11
%341 = bitcast void (...)* %340 to void (i32, ...)*
br label %342
342: ; preds = %339, %336
%343 = load void (...)*, void (...)** %11
%344 = load i8*, i8** %12
%345 = getelementptr inbounds i8, i8* %344, i32 1
store i8* %345, i8** %12
%346 = load i8, i8* %344
%347 = sext i8 %346 to i32
%348 = bitcast void (...)* %343 to void (i32, ...)*
%349 = load void (...)*, void (...)** %11
%350 = bitcast void (...)* %349 to void (i32, ...)*
br label %351
351: ; preds = %355, %342
%352 = load i8*, i8** %12
%353 = load i8, i8* %352
%354 = icmp ne i8 %353, 0
br i1 %354, label %355, label %362
355: ; preds = %351
%356 = load void (...)*, void (...)** %11
%357 = load i8*, i8** %12
%358 = getelementptr inbounds i8, i8* %357, i32 1
store i8* %358, i8** %12
%359 = load i8, i8* %357
%360 = sext i8 %359 to i32
%361 = bitcast void (...)* %356 to void (i32, ...)*
br label %351
362: ; preds = %351
br label %363
363: ; preds = %367, %362
%364 = load i8, i8* %8
%365 = sext i8 %364 to i32
%366 = icmp sgt i32 %365, 0
br i1 %366, label %367, label %372
367: ; preds = %363
%368 = load void (...)*, void (...)** %11
%369 = bitcast void (...)* %368 to void (i32, ...)*
%370 = load i8, i8* %8
%371 = add i8 %370, -1
store i8 %371, i8* %8
br label %363
372: ; preds = %363
%373 = load void (...)*, void (...)** %11
%374 = bitcast void (...)* %373 to void (i32, ...)*
%375 = load i32, i32* %14
%376 = icmp slt i32 %375, 0
br i1 %376, label %377, label %382
377: ; preds = %372
%378 = load i32, i32* %14
%379 = sub nsw i32 0, %378
store i32 %379, i32* %14
%380 = load void (...)*, void (...)** %11
%381 = bitcast void (...)* %380 to void (i32, ...)*
br label %385
382: ; preds = %372
%383 = load void (...)*, void (...)** %11
%384 = bitcast void (...)* %383 to void (i32, ...)*
br label %385
385: ; preds = %382, %377
%386 = load i32, i32* %14
%387 = icmp sge i32 %386, 100
br i1 %387, label %388, label %396
388: ; preds = %385
%389 = load void (...)*, void (...)** %11
%390 = load i32, i32* %14
%391 = sdiv i32 %390, 100
%392 = add nsw i32 %391, 48
%393 = bitcast void (...)* %389 to void (i32, ...)*
%394 = load i32, i32* %14
%395 = srem i32 %394, 100
store i32 %395, i32* %14
br label %396
396: ; preds = %388, %385
%397 = load void (...)*, void (...)** %11
%398 = load i32, i32* %14
%399 = sdiv i32 %398, 10
%400 = add nsw i32 %399, 48
%401 = bitcast void (...)* %397 to void (i32, ...)*
%402 = load void (...)*, void (...)** %11
%403 = load i32, i32* %14
%404 = srem i32 %403, 10
%405 = add nsw i32 %404, 48
%406 = bitcast void (...)* %402 to void (i32, ...)*
%407 = load i16, i16* %16
%408 = sext i16 %407 to i32
store i32 %408, i32* %6
br label %589
409: ; preds = %227
%410 = load i32, i32* %14
%411 = load i8, i8* %8
%412 = sext i8 %411 to i32
%413 = add nsw i32 %410, %412
%414 = icmp slt i32 %413, 0
br i1 %414, label %415, label %462
415: ; preds = %409
%416 = load i8*, i8** %12
%417 = load i8, i8* %15
%418 = sext i8 %417 to i32
%419 = sext i32 %418 to i64
%420 = getelementptr inbounds i8, i8* %416, i64 %419
%421 = load i32, i32* %14
%422 = sext i32 %421 to i64
%423 = getelementptr inbounds i8, i8* %420, i64 %422
%424 = load i8, i8* %8
%425 = sext i8 %424 to i32
%426 = sext i32 %425 to i64
%427 = getelementptr inbounds i8, i8* %423, i64 %426
store i8* %427, i8** %13
%428 = load i8*, i8** %13
%429 = load i8, i8* %428
store i8 %429, i8* %21
%430 = load i8*, i8** %13
store i8 0, i8* %430
%431 = load i8, i8* %21
%432 = sext i8 %431 to i32
%433 = icmp sge i32 %432, 53
br i1 %433, label %434, label %449
434: ; preds = %415
br label %435
435: ; preds = %447, %434
%436 = load i8*, i8** %13
%437 = getelementptr inbounds i8, i8* %436, i32 -1
store i8* %437, i8** %13
%438 = load i8, i8* %437
%439 = sext i8 %438 to i32
%440 = add nsw i32 %439, 1
%441 = trunc i32 %440 to i8
store i8 %441, i8* %437
%442 = sext i8 %441 to i32
%443 = icmp eq i32 %442, 58
br i1 %443, label %444, label %446
444: ; preds = %435
%445 = load i8*, i8** %13
store i8 48, i8* %445
br label %447
446: ; preds = %435
br label %448
447: ; preds = %444
br label %435
448: ; preds = %446
br label %449
449: ; preds = %448, %415
%450 = load i8*, i8** %13
%451 = load i8*, i8** %12
%452 = icmp ult i8* %450, %451
br i1 %452, label %453, label %455
453: ; preds = %449
%454 = load i8*, i8** %13
store i8* %454, i8** %12
br label %455
455: ; preds = %453, %449
%456 = load i8*, i8** %12
%457 = call i64 @strlen(i8* %456)
%458 = trunc i64 %457 to i8
store i8 %458, i8* %15
%459 = load i8, i8* %8
%460 = sext i8 %459 to i32
%461 = sub nsw i32 0, %460
store i32 %461, i32* %14
br label %462
462: ; preds = %455, %409
%463 = load i32, i32* %14
%464 = load i8, i8* %8
%465 = sext i8 %464 to i32
%466 = add nsw i32 %465, %463
%467 = trunc i32 %466 to i8
store i8 %467, i8* %8
%468 = load i8, i8* %8
%469 = sext i8 %468 to i32
%470 = add nsw i32 1, %469
%471 = load i8, i8* %17
%472 = zext i8 %471 to i32
%473 = add nsw i32 %470, %472
%474 = load i8, i8* %15
%475 = sext i8 %474 to i32
%476 = add nsw i32 %473, %475
%477 = trunc i32 %476 to i16
store i16 %477, i16* %16
%478 = load i8, i8* %15
%479 = sext i8 %478 to i32
%480 = sub nsw i32 0, %479
%481 = trunc i32 %480 to i8
store i8 %481, i8* %15
%482 = load i32, i32* %14
%483 = load i8, i8* %15
%484 = sext i8 %483 to i32
%485 = icmp sle i32 %482, %484
br i1 %485, label %486, label %496
486: ; preds = %462
%487 = load i8, i8* %15
%488 = sext i8 %487 to i32
%489 = load i32, i32* %14
%490 = sub nsw i32 %488, %489
%491 = add nsw i32 %490, 1
%492 = load i16, i16* %16
%493 = sext i16 %492 to i32
%494 = add nsw i32 %493, %491
%495 = trunc i32 %494 to i16
store i16 %495, i16* %16
br label %496
496: ; preds = %486, %462
%497 = load i16, i16* %16
%498 = sext i16 %497 to i32
%499 = load i8, i8* %9
%500 = sext i8 %499 to i32
%501 = sub nsw i32 %500, %498
%502 = trunc i32 %501 to i8
store i8 %502, i8* %9
br label %503
503: ; preds = %507, %496
%504 = load i8, i8* %9
%505 = sext i8 %504 to i32
%506 = icmp sgt i32 %505, 0
br i1 %506, label %507, label %512
507: ; preds = %503
%508 = load void (...)*, void (...)** %11
%509 = bitcast void (...)* %508 to void (i32, ...)*
%510 = load i8, i8* %9
%511 = add i8 %510, -1
store i8 %511, i8* %9
br label %503
512: ; preds = %503
%513 = load i8, i8* %17
%514 = icmp ne i8 %513, 0
br i1 %514, label %515, label %518
515: ; preds = %512
%516 = load void (...)*, void (...)** %11
%517 = bitcast void (...)* %516 to void (i32, ...)*
br label %518
518: ; preds = %515, %512
%519 = load i32, i32* %14
%520 = load i8, i8* %15
%521 = sext i8 %520 to i32
%522 = icmp sle i32 %519, %521
br i1 %522, label %523, label %539
523: ; preds = %518
%524 = load void (...)*, void (...)** %11
%525 = bitcast void (...)* %524 to void (i32, ...)*
%526 = load void (...)*, void (...)** %11
%527 = bitcast void (...)* %526 to void (i32, ...)*
br label %528
528: ; preds = %533, %523
%529 = load i32, i32* %14
%530 = load i8, i8* %15
%531 = sext i8 %530 to i32
%532 = icmp slt i32 %529, %531
br i1 %532, label %533, label %538
533: ; preds = %528
%534 = load void (...)*, void (...)** %11
%535 = bitcast void (...)* %534 to void (i32, ...)*
%536 = load i32, i32* %14
%537 = add nsw i32 %536, 1
store i32 %537, i32* %14
br label %528
538: ; preds = %528
br label %539
539: ; preds = %538, %518
br label %540
540: ; preds = %559, %539
%541 = load i8*, i8** %12
%542 = load i8, i8* %541
%543 = icmp ne i8 %542, 0
br i1 %543, label %544, label %560
544: ; preds = %540
%545 = load void (...)*, void (...)** %11
%546 = load i8*, i8** %12
%547 = getelementptr inbounds i8, i8* %546, i32 1
store i8* %547, i8** %12
%548 = load i8, i8* %546
%549 = sext i8 %548 to i32
%550 = bitcast void (...)* %545 to void (i32, ...)*
%551 = load i8, i8* %15
%552 = add i8 %551, 1
store i8 %552, i8* %15
%553 = sext i8 %552 to i32
%554 = load i32, i32* %14
%555 = icmp eq i32 %553, %554
br i1 %555, label %556, label %559
556: ; preds = %544
%557 = load void (...)*, void (...)** %11
%558 = bitcast void (...)* %557 to void (i32, ...)*
br label %559
559: ; preds = %556, %544
br label %540
560: ; preds = %540
br label %561
561: ; preds = %575, %560
%562 = load i32, i32* %14
%563 = icmp sgt i32 %562, 0
br i1 %563, label %564, label %576
564: ; preds = %561
%565 = load void (...)*, void (...)** %11
%566 = bitcast void (...)* %565 to void (i32, ...)*
%567 = load i8, i8* %8
%568 = add i8 %567, -1
store i8 %568, i8* %8
%569 = load i32, i32* %14
%570 = add nsw i32 %569, -1
store i32 %570, i32* %14
%571 = icmp eq i32 %570, 0
br i1 %571, label %572, label %575
572: ; preds = %564
%573 = load void (...)*, void (...)** %11
%574 = bitcast void (...)* %573 to void (i32, ...)*
br label %575
575: ; preds = %572, %564
br label %561
576: ; preds = %561
br label %577
577: ; preds = %581, %576
%578 = load i8, i8* %8
%579 = sext i8 %578 to i32
%580 = icmp sgt i32 %579, 0
br i1 %580, label %581, label %586
581: ; preds = %577
%582 = load void (...)*, void (...)** %11
%583 = bitcast void (...)* %582 to void (i32, ...)*
%584 = load i8, i8* %8
%585 = add i8 %584, -1
store i8 %585, i8* %8
br label %577
586: ; preds = %577
%587 = load i16, i16* %16
%588 = sext i16 %587 to i32
store i32 %588, i32* %6
br label %589
589: ; preds = %586, %396, %208
%590 = load i32, i32* %6
ret i32 %590
}

LLVM IR (-O2):
define i32 @_fnum(double %0, i32 %1, i32 %2, i32 %3, void (...)* nocapture %4) {
%6 = alloca i32
%7 = alloca [60 x i8]
%8 = bitcast i32* %6 to i8*
%9 = getelementptr inbounds [60 x i8], [60 x i8]* %7, i64 0, i64 0
%10 = and i32 %1, 128
%11 = icmp eq i32 %10, 0
%12 = select i1 %11, i32 %1, i32 6
%13 = fcmp olt double %0, 0.000000e+00
%14 = fneg double %0
%15 = zext i1 %13 to i32
%16 = select i1 %13, double %14, double %0
store i32 0, i32* %6
%17 = getelementptr inbounds [60 x i8], [60 x i8]* %7, i64 0, i64 2
%18 = call i32 (double, i32*, i8*, ...) bitcast (i32 (...)* @_fbcd to i32 (double, i32*, i8*, ...)*)(double %16, i32* %6, i8* %17)
br label %19
19: ; preds = %22, %5
%20 = phi i8* [ %17, %5 ], [ %23, %22 ]
%21 = load i8, i8* %20
switch i8 %21, label %26 [
i8 48, label %22
i8 0, label %24
]
22: ; preds = %19
%23 = getelementptr inbounds i8, i8* %20, i64 1
br label %19
24: ; preds = %19
%25 = getelementptr inbounds i8, i8* %20, i64 -1
br label %26
26: ; preds = %19, %24
%27 = phi i8* [ %25, %24 ], [ %20, %19 ]
%28 = call i64 @strlen(i8* %27)
%29 = icmp ugt i64 %28, 1
br i1 %29, label %30, label %42
30: ; preds = %26
%31 = getelementptr inbounds i8, i8* %27, i64 %28
%32 = getelementptr inbounds i8, i8* %31, i64 -1
%33 = load i8, i8* %32
%34 = icmp eq i8 %33, 48
br i1 %34, label %35, label %46
35: ; preds = %30, %35
%36 = phi i8* [ %39, %35 ], [ %32, %30 ]
store i8 0, i8* %36
%37 = load i32, i32* %6
%38 = add nsw i32 %37, 1
store i32 %38, i32* %6
%39 = getelementptr inbounds i8, i8* %36, i64 -1
%40 = load i8, i8* %39
%41 = icmp eq i8 %40, 48
br i1 %41, label %35, label %46
42: ; preds = %26
%43 = load i8, i8* %27
%44 = icmp eq i8 %43, 48
br i1 %44, label %45, label %46
45: ; preds = %42
store i32 0, i32* %6
br label %46
46: ; preds = %35, %30, %42, %45
%47 = getelementptr inbounds i8, i8* %27, i64 -1
store i8 48, i8* %47
%48 = call i64 @strlen(i8* %27)
%49 = trunc i64 %48 to i8
%50 = shl i32 %3, 24
%51 = shl i32 %12, 24
%52 = ashr exact i32 %51, 24
%53 = or i32 %51, %50
%54 = icmp eq i32 %53, 0
br i1 %54, label %64, label %55
55: ; preds = %46
%56 = icmp eq i32 %50, 16777216
%57 = load i32, i32* %6
%58 = icmp slt i32 %57, 0
%59 = xor i1 %56, true
%60 = select i1 %59, i1 true, i1 %58
%61 = add nsw i32 %52, 5
%62 = icmp sgt i32 %57, %61
%63 = select i1 %60, i1 true, i1 %62
br i1 %63, label %138, label %92
64: ; preds = %46
%65 = load i32, i32* %6
%66 = icmp slt i32 %65, 0
br i1 %66, label %67, label %92
67: ; preds = %64
%68 = shl i64 %48, 56
%69 = ashr exact i64 %68, 56
%70 = getelementptr inbounds i8, i8* %27, i64 %69
%71 = sext i32 %65 to i64
%72 = getelementptr inbounds i8, i8* %70, i64 %71
%73 = load i8, i8* %72
store i8 0, i8* %72
%74 = icmp sgt i8 %73, 52
br i1 %74, label %75, label %86
75: ; preds = %67
%76 = getelementptr inbounds i8, i8* %72, i64 -1
%77 = load i8, i8* %76
%78 = add i8 %77, 1
store i8 %78, i8* %76
%79 = icmp eq i8 %78, 58
br i1 %79, label %80, label %86
80: ; preds = %75, %80
%81 = phi i8* [ %82, %80 ], [ %76, %75 ]
store i8 48, i8* %81
%82 = getelementptr inbounds i8, i8* %81, i64 -1
%83 = load i8, i8* %82
%84 = add i8 %83, 1
store i8 %84, i8* %82
%85 = icmp eq i8 %84, 58
br i1 %85, label %80, label %86
86: ; preds = %80, %75, %67
%87 = phi i8* [ %72, %67 ], [ %76, %75 ], [ %82, %80 ]
%88 = icmp ult i8* %87, %27
%89 = select i1 %88, i8* %87, i8* %27
%90 = call i64 @strlen(i8* dereferenceable(1) %89)
%91 = trunc i64 %90 to i8
store i32 0, i32* %6
br label %92
92: ; preds = %55, %86, %64
%93 = phi i32 [ 0, %86 ], [ %65, %64 ], [ %57, %55 ]
%94 = phi i8* [ %89, %86 ], [ %27, %64 ], [ %27, %55 ]
%95 = phi i8 [ %91, %86 ], [ %49, %64 ], [ %49, %55 ]
%96 = sext i8 %95 to i32
%97 = add i32 %93, %15
%98 = add i32 %97, %96
%99 = trunc i32 %98 to i16
%100 = sub i32 %2, %98
%101 = trunc i32 %100 to i8
%102 = icmp sgt i8 %101, 0
br i1 %102, label %103, label %111
103: ; preds = %92
%104 = bitcast void (...)* %4 to void (i32, ...)*
br label %105
105: ; preds = %103, %105
%106 = phi i16 [ %99, %103 ], [ %109, %105 ]
%107 = phi i8 [ %101, %103 ], [ %108, %105 ]
%108 = add nsw i8 %107, -1
%109 = add i16 %106, 1
%110 = icmp ugt i8 %107, 1
br i1 %110, label %105, label %111
111: ; preds = %105, %92
%112 = phi i16 [ %99, %92 ], [ %109, %105 ]
br i1 %13, label %113, label %115
113: ; preds = %111
%114 = bitcast void (...)* %4 to void (i32, ...)*
br label %115
115: ; preds = %113, %111
%116 = load i8, i8* %94
%117 = icmp eq i8 %116, 0
br i1 %117, label %127, label %118
118: ; preds = %115
%119 = bitcast void (...)* %4 to void (i32, ...)*
br label %120
120: ; preds = %118, %120
%121 = phi i8 [ %116, %118 ], [ %125, %120 ]
%122 = phi i8* [ %94, %118 ], [ %123, %120 ]
%123 = getelementptr inbounds i8, i8* %122, i64 1
%124 = sext i8 %121 to i32
%125 = load i8, i8* %123
%126 = icmp eq i8 %125, 0
br i1 %126, label %127, label %120
127: ; preds = %120, %115
%128 = load i32, i32* %6
%129 = icmp sgt i32 %128, 0
br i1 %129, label %130, label %136
130: ; preds = %127
%131 = bitcast void (...)* %4 to void (i32, ...)*
br label %132
132: ; preds = %130, %132
%133 = load i32, i32* %6
%134 = add nsw i32 %133, -1
store i32 %134, i32* %6
%135 = icmp sgt i32 %133, 1
br i1 %135, label %132, label %136
136: ; preds = %132, %127
%137 = sext i16 %112 to i32
br label %384
138: ; preds = %55
%139 = icmp sgt i32 %57, 4
%140 = select i1 %56, i1 %139, i1 false
br i1 %140, label %145, label %141
141: ; preds = %138
%142 = sext i8 %49 to i32
%143 = add nsw i32 %57, %142
%144 = icmp slt i32 %143, -4
br i1 %144, label %145, label %147
145: ; preds = %138, %141
%146 = add i32 %3, 1
br label %147
147: ; preds = %145, %141
%148 = phi i32 [ %146, %145 ], [ %3, %141 ]
%149 = trunc i32 %148 to i8
%150 = icmp sgt i8 %149, 1
br i1 %150, label %151, label %262
151: ; preds = %147
%152 = add nsw i32 %52, %15
%153 = trunc i32 %152 to i16
%154 = add i16 %153, 6
%155 = zext i16 %154 to i32
%156 = sub i32 %2, %155
%157 = trunc i32 %156 to i8
%158 = sext i8 %49 to i32
%159 = add nsw i32 %52, 1
%160 = icmp slt i32 %159, %158
br i1 %160, label %161, label %195
161: ; preds = %151
%162 = sext i32 %52 to i64
%163 = xor i32 %52, -1
br label %164
164: ; preds = %186, %161
%165 = phi i32 [ %57, %161 ], [ %194, %186 ]
%166 = phi i8* [ %27, %161 ], [ %189, %186 ]
%167 = phi i8 [ %49, %161 ], [ %191, %186 ]
%168 = getelementptr inbounds i8, i8* %166, i64 %162
%169 = getelementptr inbounds i8, i8* %168, i64 1
%170 = sext i8 %167 to i32
%171 = add i32 %165, %163
%172 = add i32 %171, %170
store i32 %172, i32* %6
%173 = load i8, i8* %169
store i8 0, i8* %169
%174 = icmp sgt i8 %173, 52
br i1 %174, label %175, label %186
175: ; preds = %164
%176 = getelementptr inbounds i8, i8* %169, i64 -1
%177 = load i8, i8* %176
%178 = add i8 %177, 1
store i8 %178, i8* %176
%179 = icmp eq i8 %178, 58
br i1 %179, label %180, label %186
180: ; preds = %175, %180
%181 = phi i8* [ %182, %180 ], [ %176, %175 ]
store i8 48, i8* %181
%182 = getelementptr inbounds i8, i8* %181, i64 -1
%183 = load i8, i8* %182
%184 = add i8 %183, 1
store i8 %184, i8* %182
%185 = icmp eq i8 %184, 58
br i1 %185, label %180, label %186
186: ; preds = %180, %175, %164
%187 = phi i8* [ %169, %164 ], [ %176, %175 ], [ %182, %180 ]
%188 = icmp ult i8* %187, %166
%189 = select i1 %188, i8* %187, i8* %166
%190 = call i64 @strlen(i8* dereferenceable(1) %189)
%191 = trunc i64 %190 to i8
%192 = sext i8 %191 to i32
%193 = icmp slt i32 %159, %192
%194 = load i32, i32* %6
br i1 %193, label %164, label %195
195: ; preds = %186, %151
%196 = phi i32 [ %158, %151 ], [ %192, %186 ]
%197 = phi i32 [ %57, %151 ], [ %194, %186 ]
%198 = phi i8* [ %27, %151 ], [ %189, %186 ]
%199 = add nsw i32 %196, -1
%200 = add nsw i32 %199, %197
store i32 %200, i32* %6
%201 = call i32 @llvm.abs.i32(i32 %200, i1 true)
%202 = icmp ugt i32 %201, 99
%203 = sext i1 %202 to i8
%204 = add i8 %203, %157
%205 = sub i32 %12, %199
%206 = trunc i32 %205 to i8
%207 = icmp sgt i8 %204, 0
br i1 %207, label %208, label %216
208: ; preds = %195
%209 = bitcast void (...)* %4 to void (i32, ...)*
br label %210
210: ; preds = %208, %210
%211 = phi i16 [ %154, %208 ], [ %214, %210 ]
%212 = phi i8 [ %204, %208 ], [ %213, %210 ]
%213 = add nsw i8 %212, -1
%214 = add i16 %211, 1
%215 = icmp ugt i8 %212, 1
br i1 %215, label %210, label %216
216: ; preds = %210, %195
%217 = phi i16 [ %154, %195 ], [ %214, %210 ]
br i1 %13, label %218, label %220
218: ; preds = %216
%219 = bitcast void (...)* %4 to void (i32, ...)*
br label %220
220: ; preds = %216, %218
%221 = bitcast void (...)* %4 to void (i32, ...)*
%222 = load i8, i8* %198
%223 = sext i8 %222 to i32
%224 = getelementptr inbounds i8, i8* %198, i64 1
%225 = load i8, i8* %224
%226 = icmp eq i8 %225, 0
br i1 %226, label %227, label %229
227: ; preds = %229, %220
%228 = icmp sgt i8 %206, 0
br i1 %228, label %236, label %240
229: ; preds = %220, %229
%230 = phi i8 [ %234, %229 ], [ %225, %220 ]
%231 = phi i8* [ %233, %229 ], [ %224, %220 ]
%232 = sext i8 %230 to i32
%233 = getelementptr inbounds i8, i8* %231, i64 1
%234 = load i8, i8* %233
%235 = icmp eq i8 %234, 0
br i1 %235, label %227, label %229
236: ; preds = %227, %236
%237 = phi i8 [ %238, %236 ], [ %206, %227 ]
%238 = add nsw i8 %237, -1
%239 = icmp ugt i8 %237, 1
br i1 %239, label %236, label %240
240: ; preds = %236, %227
%241 = load i32, i32* %6
%242 = icmp slt i32 %241, 0
br i1 %242, label %243, label %245
243: ; preds = %240
%244 = sub nsw i32 0, %241
store i32 %244, i32* %6
br label %245
245: ; preds = %240, %243
%246 = phi i32 [ 45, %243 ], [ 43, %240 ]
%247 = load i32, i32* %6
%248 = icmp sgt i32 %247, 99
br i1 %248, label %249, label %254
249: ; preds = %245
%250 = udiv i32 %247, 100
%251 = add nuw nsw i32 %250, 48
%252 = load i32, i32* %6
%253 = srem i32 %252, 100
store i32 %253, i32* %6
br label %254
254: ; preds = %249, %245
%255 = phi i32 [ %253, %249 ], [ %247, %245 ]
%256 = sdiv i32 %255, 10
%257 = add nsw i32 %256, 48
%258 = load i32, i32* %6
%259 = srem i32 %258, 10
%260 = add nsw i32 %259, 48
%261 = sext i16 %217 to i32
br label %384
262: ; preds = %147
%263 = add nsw i32 %57, %52
%264 = icmp slt i32 %263, 0
br i1 %264, label %265, label %293
265: ; preds = %262
%266 = shl i64 %48, 56
%267 = ashr exact i64 %266, 56
%268 = getelementptr inbounds i8, i8* %27, i64 %267
%269 = sext i32 %57 to i64
%270 = getelementptr inbounds i8, i8* %268, i64 %269
%271 = sext i32 %52 to i64
%272 = getelementptr inbounds i8, i8* %270, i64 %271
%273 = load i8, i8* %272
store i8 0, i8* %272
%274 = icmp sgt i8 %273, 52
br i1 %274, label %275, label %286
275: ; preds = %265
%276 = getelementptr inbounds i8, i8* %272, i64 -1
%277 = load i8, i8* %276
%278 = add i8 %277, 1
store i8 %278, i8* %276
%279 = icmp eq i8 %278, 58
br i1 %279, label %280, label %286
280: ; preds = %275, %280
%281 = phi i8* [ %282, %280 ], [ %276, %275 ]
store i8 48, i8* %281
%282 = getelementptr inbounds i8, i8* %281, i64 -1
%283 = load i8, i8* %282
%284 = add i8 %283, 1
store i8 %284, i8* %282
%285 = icmp eq i8 %284, 58
br i1 %285, label %280, label %286
286: ; preds = %280, %275, %265
%287 = phi i8* [ %272, %265 ], [ %276, %275 ], [ %282, %280 ]
%288 = icmp ult i8* %287, %27
%289 = select i1 %288, i8* %287, i8* %27
%290 = call i64 @strlen(i8* dereferenceable(1) %289)
%291 = trunc i64 %290 to i8
%292 = sub nsw i32 0, %52
store i32 %292, i32* %6
br label %293
293: ; preds = %286, %262
%294 = phi i32 [ %292, %286 ], [ %57, %262 ]
%295 = phi i8* [ %289, %286 ], [ %27, %262 ]
%296 = phi i8 [ %291, %286 ], [ %49, %262 ]
%297 = add i32 %294, %12
%298 = trunc i32 %297 to i8
%299 = shl i32 %297, 24
%300 = ashr exact i32 %299, 24
%301 = sext i8 %296 to i32
%302 = sub i8 0, %296
%303 = sext i8 %302 to i32
%304 = icmp sgt i32 %294, %303
%305 = sub i32 1, %294
%306 = add i32 %305, %303
%307 = select i1 %304, i32 0, i32 %306
%308 = select i1 %13, i32 2, i32 1
%309 = add nsw i32 %308, %301
%310 = add nsw i32 %309, %300
%311 = add i32 %310, %307
%312 = shl i32 %311, 16
%313 = ashr exact i32 %312, 16
%314 = sub i32 %2, %311
%315 = trunc i32 %314 to i8
%316 = icmp sgt i8 %315, 0
br i1 %316, label %317, label %323
317: ; preds = %293
%318 = bitcast void (...)* %4 to void (i32, ...)*
br label %319
319: ; preds = %317, %319
%320 = phi i8 [ %315, %317 ], [ %321, %319 ]
%321 = add nsw i8 %320, -1
%322 = icmp ugt i8 %320, 1
br i1 %322, label %319, label %323
323: ; preds = %319, %293
br i1 %13, label %324, label %326
324: ; preds = %323
%325 = bitcast void (...)* %4 to void (i32, ...)*
br label %326
326: ; preds = %324, %323
%327 = load i32, i32* %6
%328 = icmp sgt i32 %327, %303
br i1 %328, label %337, label %329
329: ; preds = %326
%330 = bitcast void (...)* %4 to void (i32, ...)*
%331 = load i32, i32* %6
%332 = icmp slt i32 %331, %303
br i1 %332, label %333, label %337
333: ; preds = %329, %333
%334 = load i32, i32* %6
%335 = add nsw i32 %334, 1
store i32 %335, i32* %6
%336 = icmp slt i32 %335, %303
br i1 %336, label %333, label %337
337: ; preds = %333, %329, %326
%338 = phi i32 [ %331, %329 ], [ %327, %326 ], [ %335, %333 ]
%339 = load i8, i8* %295
%340 = icmp eq i8 %339, 0
br i1 %340, label %345, label %341
341: ; preds = %337
%342 = bitcast void (...)* %4 to void (i32, ...)*
br label %350
343: ; preds = %361
%344 = load i32, i32* %6
br label %345
345: ; preds = %343, %337
%346 = phi i32 [ %344, %343 ], [ %338, %337 ]
%347 = icmp sgt i32 %346, 0
br i1 %347, label %348, label %364
348: ; preds = %345
%349 = bitcast void (...)* %4 to void (i32, ...)*
br label %369
350: ; preds = %341, %361
%351 = phi i8 [ %339, %341 ], [ %362, %361 ]
%352 = phi i8 [ %302, %341 ], [ %356, %361 ]
%353 = phi i8* [ %295, %341 ], [ %354, %361 ]
%354 = getelementptr inbounds i8, i8* %353, i64 1
%355 = sext i8 %351 to i32
%356 = add i8 %352, 1
%357 = sext i8 %356 to i32
%358 = load i32, i32* %6
%359 = icmp eq i32 %358, %357
br i1 %359, label %360, label %361
360: ; preds = %350
br label %361
361: ; preds = %360, %350
%362 = load i8, i8* %354
%363 = icmp eq i8 %362, 0
br i1 %363, label %343, label %350
364: ; preds = %377, %345
%365 = phi i8 [ %298, %345 ], [ %371, %377 ]
%366 = icmp sgt i8 %365, 0
br i1 %366, label %367, label %384
367: ; preds = %364
%368 = bitcast void (...)* %4 to void (i32, ...)*
br label %380
369: ; preds = %348, %377
%370 = phi i8 [ %298, %348 ], [ %371, %377 ]
%371 = add i8 %370, -1
%372 = load i32, i32* %6
%373 = add nsw i32 %372, -1
store i32 %373, i32* %6
%374 = icmp eq i32 %373, 0
br i1 %374, label %375, label %377
375: ; preds = %369
%376 = load i32, i32* %6
br label %377
377: ; preds = %375, %369
%378 = phi i32 [ %376, %375 ], [ %373, %369 ]
%379 = icmp sgt i32 %378, 0
br i1 %379, label %369, label %364
380: ; preds = %367, %380
%381 = phi i8 [ %365, %367 ], [ %382, %380 ]
%382 = add nsw i8 %381, -1
%383 = icmp ugt i8 %381, 1
br i1 %383, label %380, label %384
384: ; preds = %380, %364, %254, %136
%385 = phi i32 [ %137, %136 ], [ %261, %254 ], [ %313, %364 ], [ %313, %380 ]
ret i32 %385
}