void fltrep_stod(s, p) char *s;
int *p;
{
  int ds, dh, dm, dl, bx;
  int th, tm, tl, x, x1, ch, dot;
  ds = 0;
  switch (ch = *s++) {
  case '-':
    ds = 0x80000000;
  case '+':
    ch = *s++;
  default:
    break;
  }
  dh = dm = dl = bx = 0;
  th = 0x00100000;
  tm = tl = x = x1 = dot = 0;
  while (ch == '0')
    ch = *s++;
  if (ch == '.') {
    dot = 1;
    while ((ch = *s++) == '0')
      x -= 1;
  }
  while (1) {
    if (!dot && ch == '.')
      ch = *s++, dot = 1;
    else if (isdigit(ch)) {
      int carry = ((th % 10) << 24) + tm;
      th = th / 10;
      tm = carry / 10;
      tl = (((carry % 10) << 24) + tl) / 10;
      ch = ((ch) - '0');
      dl += ch * tl;
      dm += ch * tm + ((dl >> 24) & 0xff);
      dh += ch * th + ((dm >> 24) & 0xff);
      dl &= 0x00ffffff;
      dm &= 0x00ffffff;
      if (!dot)
        x += 1;
      ch = *s++;
    } else
      break;
  }
  if (dh == 0) {
    *p++ = 0;
    *p++ = 0;
    return;
  }
  if (ch == 'e' || ch == 'E') {
    int sx = 0;
    switch (ch = *s++) {
    case '-':
      sx = 1;
    case '+':
      ch = *s++;
    default:
      break;
    }
    while (isdigit(ch)) {
      x1 = 10 * x1 + ((ch) - '0');
      ch = *s++;
    }
    if (sx)
      x -= x1;
    else
      x += x1;
  }
  if (x > 0) {
    while (x > 0) {
      dl *= 10;
      dm = 10 * dm + ((dl >> 24) & 0xff);
      dh = 10 * dh + ((dm >> 24) & 0xff);
      dl &= 0x00ffffff;
      dm &= 0x00ffffff;
      while ((dh & 0xffe00000) != 0) {
        dl = (dl >> 1) | ((dm & 1) << 23);
        dm = (dm >> 1) | ((dh & 1) << 23);
        dh = dh >> 1;
        bx += 1;
      }
      x -= 1;
    }
  } else if (x < 0) {
    while (x < 0) {
      int carry = ((dh % 10) << 24) + dm;
      dh /= 10;
      dm = carry / 10;
      dl = (dl + ((carry % 10) << 24)) / 10;
      dm += ((dl >> 24) & 0xff);
      dh += ((dm >> 24) & 0xff);
      dl &= 0x00ffffff;
      dm &= 0x00ffffff;
      while ((dh & 0xfff00000) == 0) {
        dh = (dh << 1) | ((dm >> 23) & 1);
        dm = ((dm << 1) | ((dl >> 23) & 1)) & 0x00ffffff;
        dl = (dl << 1) & 0x00ffffff;
        bx -= 1;
      }
      x += 1;
    }
  }
  for (;;) {
    while ((dh & 0xfff00000) == 0) {
      dh = (dh << 1) | ((dm >> 23) & 1);
      dm = ((dm << 1) | ((dl >> 23) & 1)) & 0x00ffffff;
      dl = (dl << 1) & 0x00ffffff;
      bx -= 1;
    }
    while ((dh & 0xffe00000) != 0) {
      dl = (dl >> 1) | ((dm & 1) << 23);
      dm = (dm >> 1) | ((dh & 1) << 23);
      dh = dh >> 1;
      bx += 1;
    }
    if ((dl & 0xff00) > 0x8000) {
      dl += 0x00010000;
      dm += (dl >> 24) & 0xff;
      dh += (dm >> 24) & 0xff;
      dl &= 0x00ff0000;
      dm &= 0x00ffffff;
      continue;
    } else if ((dl & 0xff00) == 0x8000)
      dl &= 0x00fe0000;
    break;
  }
  bx += 0x3ff;
  if (bx <= 0) {
    cc_rerr("Small floating point value converted to 0.0");
    *p++ = 0;
    *p++ = 0;
    return;
  }
  if (bx > 0x7ff) {
    cc_err("Overlarge floating point value found");
    bx = 0x7ff;
    dh = dm = dl = 0;
  }
  dh = ds | (bx << 20) | (dh & 0x000fffff);
  dm = (dm << 8) | ((dl >> 16) & 0xff);
  *p++ = dh;
  *p++ = dm;
  return;
}


x86 assembly (clang, -O0):
<fltrep_stod>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x50(%rbp)
mov    %eax,-0x3c(%rbp)
sub    $0x2b,%eax
je     1185 <fltrep_stod+0x55>
jmp    116d <fltrep_stod+0x3d>
mov    -0x50(%rbp),%eax
sub    $0x2d,%eax
jne    119a <fltrep_stod+0x6a>
jmp    117e <fltrep_stod+0x4e>
movl   $0x80000000,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
jmp    119f <fltrep_stod+0x6f>
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x100000,-0x28(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpl   $0x30,-0x3c(%rbp)
jne    1209 <fltrep_stod+0xd9>
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
jmp    11e5 <fltrep_stod+0xb5>
cmpl   $0x2e,-0x3c(%rbp)
jne    124b <fltrep_stod+0x11b>
movl   $0x1,-0x40(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
cmp    $0x30,%eax
jne    1246 <fltrep_stod+0x116>
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    121a <fltrep_stod+0xea>
jmp    124b <fltrep_stod+0x11b>
jmp    1250 <fltrep_stod+0x120>
cmpl   $0x0,-0x40(%rbp)
jne    1285 <fltrep_stod+0x155>
cmpl   $0x2e,-0x3c(%rbp)
jne    1285 <fltrep_stod+0x155>
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
jmp    137f <fltrep_stod+0x24f>
mov    -0x3c(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1375 <fltrep_stod+0x245>
mov    -0x28(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
shl    $0x18,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x28(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x28(%rbp)
mov    -0x44(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x2c(%rbp)
mov    -0x44(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
shl    $0x18,%eax
add    -0x30(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x30(%rbp)
mov    -0x3c(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
imul   -0x30(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x3c(%rbp),%eax
imul   -0x2c(%rbp),%eax
mov    -0x20(%rbp),%ecx
sar    $0x18,%ecx
and    $0xff,%ecx
add    %ecx,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x3c(%rbp),%eax
imul   -0x28(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    $0x18,%ecx
and    $0xff,%ecx
add    %ecx,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
and    $0xffffff,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
and    $0xffffff,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x40(%rbp)
jne    135b <fltrep_stod+0x22b>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
jmp    137a <fltrep_stod+0x24a>
jmp    1384 <fltrep_stod+0x254>
jmp    137f <fltrep_stod+0x24f>
jmp    1250 <fltrep_stod+0x120>
cmpl   $0x0,-0x18(%rbp)
jne    13bd <fltrep_stod+0x28d>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
movl   $0x0,(%rax)
jmp    1890 <fltrep_stod+0x760>
cmpl   $0x65,-0x3c(%rbp)
je     13d1 <fltrep_stod+0x2a1>
cmpl   $0x45,-0x3c(%rbp)
jne    1497 <fltrep_stod+0x367>
movl   $0x0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x54(%rbp)
mov    %eax,-0x3c(%rbp)
sub    $0x2b,%eax
je     1416 <fltrep_stod+0x2e6>
jmp    13fe <fltrep_stod+0x2ce>
mov    -0x54(%rbp),%eax
sub    $0x2d,%eax
jne    142b <fltrep_stod+0x2fb>
jmp    140f <fltrep_stod+0x2df>
movl   $0x1,-0x48(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
jmp    1430 <fltrep_stod+0x300>
jmp    1435 <fltrep_stod+0x305>
mov    -0x3c(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     146f <fltrep_stod+0x33f>
imul   $0xa,-0x38(%rbp),%eax
mov    -0x3c(%rbp),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
jmp    1435 <fltrep_stod+0x305>
cmpl   $0x0,-0x48(%rbp)
je     1489 <fltrep_stod+0x359>
mov    -0x38(%rbp),%ecx
mov    -0x34(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    1492 <fltrep_stod+0x362>
mov    -0x38(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    1497 <fltrep_stod+0x367>
cmpl   $0x0,-0x34(%rbp)
jle    155a <fltrep_stod+0x42a>
jmp    14a6 <fltrep_stod+0x376>
cmpl   $0x0,-0x34(%rbp)
jle    1555 <fltrep_stod+0x425>
imul   $0xa,-0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
imul   $0xa,-0x1c(%rbp),%eax
mov    -0x20(%rbp),%ecx
sar    $0x18,%ecx
and    $0xff,%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
imul   $0xa,-0x18(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    $0x18,%ecx
and    $0xff,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
and    $0xffffff,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
and    $0xffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
and    $0xffe00000,%eax
cmp    $0x0,%eax
je     1547 <fltrep_stod+0x417>
mov    -0x20(%rbp),%eax
sar    $0x1,%eax
mov    -0x1c(%rbp),%ecx
and    $0x1,%ecx
shl    $0x17,%ecx
or     %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0x1,%eax
mov    -0x18(%rbp),%ecx
and    $0x1,%ecx
shl    $0x17,%ecx
or     %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    14f7 <fltrep_stod+0x3c7>
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    14a6 <fltrep_stod+0x376>
jmp    1673 <fltrep_stod+0x543>
cmpl   $0x0,-0x34(%rbp)
jge    166e <fltrep_stod+0x53e>
jmp    1569 <fltrep_stod+0x439>
cmpl   $0x0,-0x34(%rbp)
jge    1669 <fltrep_stod+0x539>
mov    -0x18(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
shl    $0x18,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x18(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x18(%rbp)
mov    -0x4c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x4c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    -0x58(%rbp),%eax
shl    $0x18,%edx
add    %edx,%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
sar    $0x18,%eax
and    $0xff,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0x18,%eax
and    $0xff,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
and    $0xffffff,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
and    $0xffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
and    $0xfff00000,%eax
cmp    $0x0,%eax
jne    165b <fltrep_stod+0x52b>
mov    -0x18(%rbp),%eax
shl    $0x1,%eax
mov    -0x1c(%rbp),%ecx
sar    $0x17,%ecx
and    $0x1,%ecx
or     %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
mov    -0x20(%rbp),%ecx
sar    $0x17,%ecx
and    $0x1,%ecx
or     %ecx,%eax
and    $0xffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x1,%eax
and    $0xffffff,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1601 <fltrep_stod+0x4d1>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1569 <fltrep_stod+0x439>
jmp    166e <fltrep_stod+0x53e>
jmp    1673 <fltrep_stod+0x543>
jmp    1678 <fltrep_stod+0x548>
jmp    167d <fltrep_stod+0x54d>
mov    -0x18(%rbp),%eax
and    $0xfff00000,%eax
cmp    $0x0,%eax
jne    16d7 <fltrep_stod+0x5a7>
mov    -0x18(%rbp),%eax
shl    $0x1,%eax
mov    -0x1c(%rbp),%ecx
sar    $0x17,%ecx
and    $0x1,%ecx
or     %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
mov    -0x20(%rbp),%ecx
sar    $0x17,%ecx
and    $0x1,%ecx
or     %ecx,%eax
and    $0xffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x1,%eax
and    $0xffffff,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    167d <fltrep_stod+0x54d>
jmp    16dc <fltrep_stod+0x5ac>
mov    -0x18(%rbp),%eax
and    $0xffe00000,%eax
cmp    $0x0,%eax
je     172c <fltrep_stod+0x5fc>
mov    -0x20(%rbp),%eax
sar    $0x1,%eax
mov    -0x1c(%rbp),%ecx
and    $0x1,%ecx
shl    $0x17,%ecx
or     %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0x1,%eax
mov    -0x18(%rbp),%ecx
and    $0x1,%ecx
shl    $0x17,%ecx
or     %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    16dc <fltrep_stod+0x5ac>
mov    -0x20(%rbp),%eax
and    $0xff00,%eax
cmp    $0x8000,%eax
jle    1787 <fltrep_stod+0x657>
mov    -0x20(%rbp),%eax
add    $0x10000,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
sar    $0x18,%eax
and    $0xff,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0x18,%eax
and    $0xff,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
and    $0xff0000,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
and    $0xffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1678 <fltrep_stod+0x548>
mov    -0x20(%rbp),%eax
and    $0xff00,%eax
cmp    $0x8000,%eax
jne    17a5 <fltrep_stod+0x675>
mov    -0x20(%rbp),%eax
and    $0xfe0000,%eax
mov    %eax,-0x20(%rbp)
jmp    17aa <fltrep_stod+0x67a>
jmp    17af <fltrep_stod+0x67f>
mov    -0x24(%rbp),%eax
add    $0x3ff,%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jg     1801 <fltrep_stod+0x6d1>
lea    0x835(%rip),%rdi
mov    $0x0,%al
call   1040 <cc_rerr@plt>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
movl   $0x0,(%rax)
jmp    1890 <fltrep_stod+0x760>
cmpl   $0x7ff,-0x24(%rbp)
jle    1838 <fltrep_stod+0x708>
lea    0x817(%rip),%rdi
mov    $0x0,%al
call   1050 <cc_err@plt>
movl   $0x7ff,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x24(%rbp),%ecx
shl    $0x14,%ecx
or     %ecx,%eax
mov    -0x18(%rbp),%ecx
and    $0xfffff,%ecx
or     %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x8,%eax
mov    -0x20(%rbp),%ecx
sar    $0x10,%ecx
and    $0xff,%ecx
or     %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
mov    %ecx,(%rax)
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x10(%rbp)
mov    %ecx,(%rax)
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fltrep_stod>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rsi,%r15
movsbl (%rdi),%esi
xor    %r14d,%r14d
cmp    $0x2b,%esi
je     1141 <fltrep_stod+0x21>
cmp    $0x2d,%esi
jne    114b <fltrep_stod+0x2b>
mov    $0x80000000,%r14d
movsbl 0x1(%rdi),%esi
add    $0x2,%rdi
jmp    1167 <fltrep_stod+0x47>
add    $0x1,%rdi
jmp    1167 <fltrep_stod+0x47>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsbl (%rdi),%esi
add    $0x1,%rdi
cmp    $0x30,%esi
je     1160 <fltrep_stod+0x40>
cmp    $0x2e,%esi
jne    1198 <fltrep_stod+0x78>
mov    $0x1,%r8d
nopw   0x0(%rax,%rax,1)
movsbl (%rdi),%esi
add    $0x1,%rdi
add    $0xffffffff,%r8d
cmp    $0x30,%esi
je     1180 <fltrep_stod+0x60>
mov    $0x1,%r9d
jmp    119e <fltrep_stod+0x7e>
xor    %r8d,%r8d
xor    %r9d,%r9d
add    $0x1,%rdi
mov    $0x100000,%r11d
xor    %ebx,%ebx
xor    %eax,%eax
xor    %ecx,%ecx
xor    %r12d,%r12d
xor    %r10d,%r10d
jmp    11ce <fltrep_stod+0xae>
cs nopw 0x0(%rax,%rax,1)
mov    $0x1,%r9d
movsbl -0x1(%rdi),%esi
add    $0x1,%rdi
test   %r9d,%r9d
jne    11d8 <fltrep_stod+0xb8>
cmp    $0x2e,%esi
je     11c0 <fltrep_stod+0xa0>
lea    -0x30(%rsi),%ebp
cmp    $0x9,%ebp
ja     128d <fltrep_stod+0x16d>
movslq %r11d,%rsi
imul   $0x66666667,%rsi,%r11
mov    %r11,%rdx
shr    $0x3f,%rdx
sar    $0x22,%r11
add    %edx,%r11d
lea    (%r11,%r11,1),%edx
lea    (%rdx,%rdx,4),%edx
sub    %edx,%esi
shl    $0x18,%esi
add    %r12d,%esi
movslq %esi,%rdx
imul   $0x66666667,%rdx,%r12
mov    %r12,%rsi
shr    $0x3f,%rsi
sar    $0x22,%r12
add    %esi,%r12d
lea    (%r12,%r12,1),%esi
lea    (%rsi,%rsi,4),%esi
sub    %esi,%edx
shl    $0x18,%edx
add    %r10d,%edx
movslq %edx,%rdx
imul   $0x66666667,%rdx,%r10
mov    %r10,%rdx
shr    $0x3f,%rdx
sar    $0x22,%r10
add    %edx,%r10d
mov    %r10d,%edx
imul   %ebp,%edx
add    %ecx,%edx
mov    %ebp,%ecx
imul   %r12d,%ecx
mov    %edx,%esi
shr    $0x18,%esi
add    %eax,%ecx
add    %esi,%ecx
imul   %r11d,%ebp
mov    %ecx,%eax
shr    $0x18,%eax
add    %ebx,%ebp
add    %eax,%ebp
and    $0xffffff,%edx
and    $0xffffff,%ecx
cmp    $0x1,%r9d
adc    $0x0,%r8d
mov    %ebp,%ebx
mov    %ecx,%eax
mov    %edx,%ecx
jmp    11c6 <fltrep_stod+0xa6>
test   %ebx,%ebx
je     12ae <fltrep_stod+0x18e>
and    $0xffffffdf,%esi
cmp    $0x45,%esi
jne    12f5 <fltrep_stod+0x1d5>
movsbl -0x1(%rdi),%esi
cmp    $0x2b,%esi
je     12b7 <fltrep_stod+0x197>
cmp    $0x2d,%esi
jne    12c2 <fltrep_stod+0x1a2>
mov    $0x1,%edx
jmp    12b9 <fltrep_stod+0x199>
xor    %ebx,%ebx
xor    %ecx,%ecx
jmp    158c <fltrep_stod+0x46c>
xor    %edx,%edx
movsbl (%rdi),%esi
add    $0x1,%rdi
jmp    12c4 <fltrep_stod+0x1a4>
xor    %edx,%edx
add    $0xffffffd0,%esi
xor    %ebp,%ebp
cmp    $0x9,%esi
ja     12e6 <fltrep_stod+0x1c6>
xor    %ebp,%ebp
lea    0x0(%rbp,%rbp,4),%ebp
lea    (%rsi,%rbp,2),%ebp
movsbl (%rdi),%esi
add    $0x1,%rdi
add    $0xffffffd0,%esi
cmp    $0xa,%esi
jb     12d0 <fltrep_stod+0x1b0>
mov    %ebp,%esi
neg    %esi
test   %edx,%edx
cmove  %ebp,%esi
add    %r8d,%esi
mov    %esi,%r8d
test   %r8d,%r8d
jle    1379 <fltrep_stod+0x259>
xor    %esi,%esi
jmp    1313 <fltrep_stod+0x1f3>
xchg   %ax,%ax
mov    %edx,%ebx
lea    -0x1(%r8),%edx
cmp    $0x1,%r8d
mov    %edx,%r8d
jle    1494 <fltrep_stod+0x374>
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
lea    (%rax,%rax,4),%eax
mov    %ecx,%edx
shr    $0x18,%edx
lea    (%rdx,%rax,2),%eax
lea    (%rbx,%rbx,4),%edx
mov    %eax,%edi
shr    $0x18,%edi
lea    (%rdi,%rdx,2),%edx
and    $0xfffffe,%ecx
and    $0xffffff,%eax
cmp    $0x200000,%edx
jb     1300 <fltrep_stod+0x1e0>
mov    %edx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
sar    %ecx
mov    %eax,%edi
and    $0x1,%edi
shl    $0x17,%edi
or     %edi,%ecx
sar    %eax
mov    %edx,%edi
and    $0x1,%edi
shl    $0x17,%edi
or     %edi,%eax
sar    %ebx
add    $0x1,%esi
cmp    $0x3fffff,%edx
mov    %ebx,%edx
ja     1350 <fltrep_stod+0x230>
jmp    1302 <fltrep_stod+0x1e2>
je     1466 <fltrep_stod+0x346>
mov    $0xffffffff,%r9d
cmovns %r8d,%r9d
xor    %esi,%esi
jmp    13a0 <fltrep_stod+0x280>
nopl   (%rax)
lea    0x1(%r8),%edx
cmp    %r9d,%r8d
mov    %edx,%r8d
je     1494 <fltrep_stod+0x374>
movslq %ebx,%rdx
imul   $0x66666667,%rdx,%r10
mov    %r10,%rdi
shr    $0x3f,%rdi
sar    $0x22,%r10
add    %edi,%r10d
lea    (%r10,%r10,1),%edi
lea    (%rdi,%rdi,4),%edi
sub    %edi,%edx
shl    $0x18,%edx
add    %eax,%edx
movslq %edx,%rdx
imul   $0x66666667,%rdx,%rax
mov    %rax,%rdi
shr    $0x3f,%rdi
sar    $0x22,%rax
add    %edi,%eax
lea    (%rax,%rax,1),%edi
lea    (%rdi,%rdi,4),%edi
sub    %edi,%edx
shl    $0x18,%edx
add    %ecx,%edx
movslq %edx,%rcx
imul   $0x66666667,%rcx,%rdx
mov    %rdx,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rdx
add    %ecx,%edx
mov    %edx,%ebp
shr    $0x18,%ebp
add    %eax,%ebp
mov    %ebp,%ebx
shr    $0x18,%ebx
add    %r10d,%ebx
mov    %edx,%ecx
and    $0xffffff,%ecx
mov    %ebp,%eax
and    $0xffffff,%eax
cmp    $0xfffff,%ebx
ja     1390 <fltrep_stod+0x270>
nopl   0x0(%rax,%rax,1)
shr    $0x17,%ebp
and    $0x1,%ebp
lea    0x0(%rbp,%rbx,2),%ebx
shr    $0x17,%edx
and    $0x1,%edx
lea    (%rdx,%rax,2),%ebp
mov    %ecx,%edx
add    %edx,%edx
add    $0xffffffff,%esi
mov    %edx,%ecx
and    $0xfffffe,%ecx
mov    %ebp,%eax
and    $0xffffff,%eax
cmp    $0x100000,%ebx
jb     1430 <fltrep_stod+0x310>
jmp    1390 <fltrep_stod+0x270>
xor    %esi,%esi
jmp    1494 <fltrep_stod+0x374>
nopw   0x0(%rax,%rax,1)
add    $0x10000,%ecx
mov    %ecx,%edx
shr    $0x18,%edx
add    %eax,%edx
mov    %edx,%eax
shr    $0x18,%eax
add    %ebx,%eax
and    $0xff0000,%ecx
and    $0xffffff,%edx
mov    %eax,%ebx
mov    %edx,%eax
cmp    $0xfffff,%ebx
ja     14ce <fltrep_stod+0x3ae>
nopl   0x0(%rax)
mov    %eax,%edx
shr    $0x17,%edx
and    $0x1,%edx
lea    (%rdx,%rbx,2),%ebx
mov    %ecx,%edx
shr    $0x17,%edx
and    $0x1,%edx
and    $0x7fffff,%eax
lea    (%rdx,%rax,2),%eax
add    %ecx,%ecx
and    $0xfffffe,%ecx
add    $0xffffffff,%esi
cmp    $0x100000,%ebx
jb     14a0 <fltrep_stod+0x380>
cmp    $0x200000,%ebx
jb     1509 <fltrep_stod+0x3e9>
cs nopw 0x0(%rax,%rax,1)
sar    %ecx
mov    %eax,%edx
and    $0x1,%edx
shl    $0x17,%edx
or     %edx,%ecx
sar    %eax
mov    %ebx,%edx
and    $0x1,%edx
shl    $0x17,%edx
or     %edx,%eax
mov    %ebx,%edx
sar    %edx
add    $0x1,%esi
cmp    $0x3fffff,%ebx
mov    %edx,%ebx
ja     14e0 <fltrep_stod+0x3c0>
mov    %ecx,%edi
and    $0xff00,%edi
cmp    $0x8001,%edi
jae    1470 <fltrep_stod+0x350>
cmp    $0xfffffc01,%esi
jg     1539 <fltrep_stod+0x419>
lea    0xad4(%rip),%rdi
xor    %ebx,%ebx
xor    %eax,%eax
call   1030 <cc_rerr@plt>
xor    %ecx,%ecx
jmp    158c <fltrep_stod+0x46c>
mov    %ecx,%edx
and    $0xfe0000,%edx
cmp    $0x8000,%edi
cmovne %ecx,%edx
cmp    $0x401,%esi
jl     156d <fltrep_stod+0x44d>
lea    0xad3(%rip),%rdi
xor    %ebx,%ebx
xor    %eax,%eax
call   1040 <cc_err@plt>
mov    $0x7ff,%esi
xor    %eax,%eax
xor    %edx,%edx
jmp    1573 <fltrep_stod+0x453>
add    $0x3ff,%esi
shl    $0x14,%esi
and    $0xfffff,%ebx
or     %r14d,%ebx
or     %esi,%ebx
shl    $0x8,%eax
shr    $0x10,%edx
movzbl %dl,%ecx
or     %eax,%ecx
mov    %ebx,(%r15)
mov    %ecx,0x4(%r15)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [44 x i8] c"Small floating point value converted to 0.0\00"
@.str.1 = [37 x i8] c"Overlarge floating point value found\00"
define void @fltrep_stod(i8* nocapture %0, i32* nocapture writeonly %1) {
%3 = getelementptr inbounds i8, i8* %0, i64 1
%4 = load i8, i8* %0
%5 = sext i8 %4 to i32
switch i32 %5, label %12 [
i32 45, label %6
i32 43, label %7
]
6: ; preds = %2
br label %7
7: ; preds = %2, %6
%8 = phi i32 [ 0, %2 ], [ -2147483648, %6 ]
%9 = getelementptr inbounds i8, i8* %0, i64 2
%10 = load i8, i8* %3
%11 = sext i8 %10 to i32
br label %12
12: ; preds = %7, %2
%13 = phi i32 [ 0, %2 ], [ %8, %7 ]
%14 = phi i32 [ %5, %2 ], [ %11, %7 ]
%15 = phi i8* [ %3, %2 ], [ %9, %7 ]
br label %16
16: ; preds = %19, %12
%17 = phi i32 [ %14, %12 ], [ %22, %19 ]
%18 = phi i8* [ %15, %12 ], [ %20, %19 ]
switch i32 %17, label %32 [
i32 48, label %19
i32 46, label %23
]
19: ; preds = %16
%20 = getelementptr inbounds i8, i8* %18, i64 1
%21 = load i8, i8* %18
%22 = sext i8 %21 to i32
br label %16
23: ; preds = %16, %23
%24 = phi i32 [ %29, %23 ], [ 0, %16 ]
%25 = phi i8* [ %26, %23 ], [ %18, %16 ]
%26 = getelementptr inbounds i8, i8* %25, i64 1
%27 = load i8, i8* %25
%28 = icmp eq i8 %27, 48
%29 = add nsw i32 %24, -1
br i1 %28, label %23, label %30
30: ; preds = %23
%31 = sext i8 %27 to i32
br label %32
32: ; preds = %16, %30
%33 = phi i32 [ %24, %30 ], [ 0, %16 ]
%34 = phi i32 [ %31, %30 ], [ %17, %16 ]
%35 = phi i32 [ 1, %30 ], [ 0, %16 ]
%36 = phi i8* [ %26, %30 ], [ %18, %16 ]
br label %37
37: ; preds = %32, %78
%38 = phi i32 [ %79, %78 ], [ 0, %32 ]
%39 = phi i32 [ %80, %78 ], [ 0, %32 ]
%40 = phi i32 [ %81, %78 ], [ 0, %32 ]
%41 = phi i32 [ %82, %78 ], [ 1048576, %32 ]
%42 = phi i32 [ %83, %78 ], [ 0, %32 ]
%43 = phi i32 [ %84, %78 ], [ 0, %32 ]
%44 = phi i32 [ %85, %78 ], [ %33, %32 ]
%45 = phi i32 [ %89, %78 ], [ %34, %32 ]
%46 = phi i32 [ %86, %78 ], [ %35, %32 ]
%47 = phi i8* [ %87, %78 ], [ %36, %32 ]
%48 = icmp eq i32 %46, 0
%49 = icmp eq i32 %45, 46
%50 = select i1 %48, i1 %49, i1 false
br i1 %50, label %78, label %51
51: ; preds = %37
%52 = add nsw i32 %45, -48
%53 = icmp ult i32 %52, 10
br i1 %53, label %54, label %90
54: ; preds = %51
%55 = srem i32 %41, 10
%56 = shl nsw i32 %55, 24
%57 = add nsw i32 %56, %42
%58 = sdiv i32 %41, 10
%59 = sdiv i32 %57, 10
%60 = srem i32 %57, 10
%61 = shl nsw i32 %60, 24
%62 = add nsw i32 %61, %43
%63 = sdiv i32 %62, 10
%64 = mul nsw i32 %63, %52
%65 = add nsw i32 %64, %40
%66 = mul nsw i32 %52, %59
%67 = lshr i32 %65, 24
%68 = add i32 %66, %39
%69 = add i32 %68, %67
%70 = mul nsw i32 %52, %58
%71 = lshr i32 %69, 24
%72 = add i32 %70, %38
%73 = add i32 %72, %71
%74 = and i32 %65, 16777215
%75 = and i32 %69, 16777215
%76 = zext i1 %48 to i32
%77 = add nsw i32 %44, %76
br label %78
78: ; preds = %37, %54
%79 = phi i32 [ %73, %54 ], [ %38, %37 ]
%80 = phi i32 [ %75, %54 ], [ %39, %37 ]
%81 = phi i32 [ %74, %54 ], [ %40, %37 ]
%82 = phi i32 [ %58, %54 ], [ %41, %37 ]
%83 = phi i32 [ %59, %54 ], [ %42, %37 ]
%84 = phi i32 [ %63, %54 ], [ %43, %37 ]
%85 = phi i32 [ %77, %54 ], [ %44, %37 ]
%86 = phi i32 [ %46, %54 ], [ 1, %37 ]
%87 = getelementptr inbounds i8, i8* %47, i64 1
%88 = load i8, i8* %47
%89 = sext i8 %88 to i32
br label %37
90: ; preds = %51
%91 = icmp eq i32 %38, 0
br i1 %91, label %316, label %92
92: ; preds = %90
%93 = and i32 %45, -33
%94 = icmp eq i32 %93, 69
br i1 %94, label %95, label %128
95: ; preds = %92
%96 = getelementptr inbounds i8, i8* %47, i64 1
%97 = load i8, i8* %47
%98 = sext i8 %97 to i32
switch i32 %98, label %105 [
i32 45, label %99
i32 43, label %100
]
99: ; preds = %95
br label %100
100: ; preds = %95, %99
%101 = phi i32 [ 0, %95 ], [ 1, %99 ]
%102 = getelementptr inbounds i8, i8* %47, i64 2
%103 = load i8, i8* %96
%104 = sext i8 %103 to i32
br label %105
105: ; preds = %100, %95
%106 = phi i32 [ %98, %95 ], [ %104, %100 ]
%107 = phi i32 [ 0, %95 ], [ %101, %100 ]
%108 = phi i8* [ %96, %95 ], [ %102, %100 ]
%109 = add nsw i32 %106, -48
%110 = icmp ult i32 %109, 10
br i1 %110, label %111, label %122
111: ; preds = %105, %111
%112 = phi i32 [ %120, %111 ], [ %109, %105 ]
%113 = phi i8* [ %117, %111 ], [ %108, %105 ]
%114 = phi i32 [ %116, %111 ], [ 0, %105 ]
%115 = mul nsw i32 %114, 10
%116 = add nsw i32 %112, %115
%117 = getelementptr inbounds i8, i8* %113, i64 1
%118 = load i8, i8* %113
%119 = sext i8 %118 to i32
%120 = add nsw i32 %119, -48
%121 = icmp ult i32 %120, 10
br i1 %121, label %111, label %122
122: ; preds = %111, %105
%123 = phi i32 [ 0, %105 ], [ %116, %111 ]
%124 = icmp eq i32 %107, 0
%125 = sub i32 0, %123
%126 = select i1 %124, i32 %123, i32 %125
%127 = add i32 %126, %44
br label %128
128: ; preds = %92, %122
%129 = phi i32 [ %127, %122 ], [ %44, %92 ]
%130 = icmp sgt i32 %129, 0
br i1 %130, label %131, label %170
131: ; preds = %128, %163
%132 = phi i32 [ %168, %163 ], [ %129, %128 ]
%133 = phi i32 [ %167, %163 ], [ 0, %128 ]
%134 = phi i32 [ %166, %163 ], [ %40, %128 ]
%135 = phi i32 [ %165, %163 ], [ %39, %128 ]
%136 = phi i32 [ %164, %163 ], [ %38, %128 ]
%137 = mul nsw i32 %134, 10
%138 = mul nsw i32 %135, 10
%139 = lshr i32 %137, 24
%140 = add nsw i32 %139, %138
%141 = mul nsw i32 %136, 10
%142 = lshr i32 %140, 24
%143 = add nsw i32 %142, %141
%144 = and i32 %137, 16777214
%145 = and i32 %140, 16777215
%146 = icmp ult i32 %143, 2097152
br i1 %146, label %163, label %147
147: ; preds = %131, %147
%148 = phi i32 [ %161, %147 ], [ %133, %131 ]
%149 = phi i32 [ %155, %147 ], [ %144, %131 ]
%150 = phi i32 [ %159, %147 ], [ %145, %131 ]
%151 = phi i32 [ %160, %147 ], [ %143, %131 ]
%152 = ashr i32 %149, 1
%153 = shl i32 %150, 23
%154 = and i32 %153, 8388608
%155 = or i32 %152, %154
%156 = ashr i32 %150, 1
%157 = shl i32 %151, 23
%158 = and i32 %157, 8388608
%159 = or i32 %156, %158
%160 = ashr i32 %151, 1
%161 = add nsw i32 %148, 1
%162 = icmp ult i32 %151, 4194304
br i1 %162, label %163, label %147
163: ; preds = %147, %131
%164 = phi i32 [ %143, %131 ], [ %160, %147 ]
%165 = phi i32 [ %145, %131 ], [ %159, %147 ]
%166 = phi i32 [ %144, %131 ], [ %155, %147 ]
%167 = phi i32 [ %133, %131 ], [ %161, %147 ]
%168 = add nsw i32 %132, -1
%169 = icmp sgt i32 %132, 1
br i1 %169, label %131, label %225
170: ; preds = %128
%171 = icmp eq i32 %129, 0
br i1 %171, label %225, label %172
172: ; preds = %170
%173 = call i32 @llvm.smax.i32(i32 %129, i32 -1)
br label %174
174: ; preds = %172, %218
%175 = phi i32 [ %219, %218 ], [ %38, %172 ]
%176 = phi i32 [ %222, %218 ], [ %39, %172 ]
%177 = phi i32 [ %221, %218 ], [ %40, %172 ]
%178 = phi i32 [ %220, %218 ], [ 0, %172 ]
%179 = phi i32 [ %223, %218 ], [ %129, %172 ]
%180 = srem i32 %175, 10
%181 = shl nsw i32 %180, 24
%182 = add nsw i32 %181, %176
%183 = sdiv i32 %175, 10
%184 = sdiv i32 %182, 10
%185 = srem i32 %182, 10
%186 = shl nsw i32 %185, 24
%187 = add nsw i32 %186, %177
%188 = sdiv i32 %187, 10
%189 = ashr i32 %188, 24
%190 = and i32 %189, 255
%191 = add nsw i32 %190, %184
%192 = ashr i32 %191, 24
%193 = and i32 %192, 255
%194 = add nsw i32 %193, %183
%195 = and i32 %188, 16777215
%196 = and i32 %191, 16777215
%197 = icmp ult i32 %194, 1048576
br i1 %197, label %198, label %218
198: ; preds = %174, %198
%199 = phi i32 [ %216, %198 ], [ %196, %174 ]
%200 = phi i32 [ %215, %198 ], [ %195, %174 ]
%201 = phi i32 [ %214, %198 ], [ %178, %174 ]
%202 = phi i32 [ %213, %198 ], [ %188, %174 ]
%203 = phi i32 [ %212, %198 ], [ %191, %174 ]
%204 = phi i32 [ %208, %198 ], [ %194, %174 ]
%205 = shl nuw nsw i32 %204, 1
%206 = lshr i32 %203, 23
%207 = and i32 %206, 1
%208 = or i32 %207, %205
%209 = shl nuw nsw i32 %199, 1
%210 = lshr i32 %202, 23
%211 = and i32 %210, 1
%212 = or i32 %211, %209
%213 = shl nuw nsw i32 %200, 1
%214 = add nsw i32 %201, -1
%215 = and i32 %213, 16777214
%216 = and i32 %212, 16777215
%217 = icmp ult i32 %208, 1048576
br i1 %217, label %198, label %218
218: ; preds = %198, %174
%219 = phi i32 [ %194, %174 ], [ %208, %198 ]
%220 = phi i32 [ %178, %174 ], [ %214, %198 ]
%221 = phi i32 [ %195, %174 ], [ %215, %198 ]
%222 = phi i32 [ %196, %174 ], [ %216, %198 ]
%223 = add i32 %179, 1
%224 = icmp eq i32 %179, %173
br i1 %224, label %225, label %174
225: ; preds = %218, %163, %170
%226 = phi i32 [ %38, %170 ], [ %164, %163 ], [ %219, %218 ]
%227 = phi i32 [ %39, %170 ], [ %165, %163 ], [ %222, %218 ]
%228 = phi i32 [ %40, %170 ], [ %166, %163 ], [ %221, %218 ]
%229 = phi i32 [ 0, %170 ], [ %167, %163 ], [ %220, %218 ]
br label %230
230: ; preds = %225, %283
%231 = phi i32 [ %288, %283 ], [ %226, %225 ]
%232 = phi i32 [ %290, %283 ], [ %227, %225 ]
%233 = phi i32 [ %289, %283 ], [ %228, %225 ]
%234 = phi i32 [ %280, %283 ], [ %229, %225 ]
%235 = icmp ult i32 %231, 1048576
br i1 %235, label %242, label %236
236: ; preds = %242, %230
%237 = phi i32 [ %231, %230 ], [ %250, %242 ]
%238 = phi i32 [ %232, %230 ], [ %255, %242 ]
%239 = phi i32 [ %233, %230 ], [ %257, %242 ]
%240 = phi i32 [ %234, %230 ], [ %258, %242 ]
%241 = icmp ult i32 %237, 2097152
br i1 %241, label %276, label %260
242: ; preds = %230, %242
%243 = phi i32 [ %258, %242 ], [ %234, %230 ]
%244 = phi i32 [ %257, %242 ], [ %233, %230 ]
%245 = phi i32 [ %255, %242 ], [ %232, %230 ]
%246 = phi i32 [ %250, %242 ], [ %231, %230 ]
%247 = shl nuw nsw i32 %246, 1
%248 = lshr i32 %245, 23
%249 = and i32 %248, 1
%250 = or i32 %249, %247
%251 = shl i32 %245, 1
%252 = lshr i32 %244, 23
%253 = and i32 %252, 1
%254 = and i32 %251, 16777214
%255 = or i32 %253, %254
%256 = shl i32 %244, 1
%257 = and i32 %256, 16777214
%258 = add nsw i32 %243, -1
%259 = icmp ult i32 %250, 1048576
br i1 %259, label %242, label %236
260: ; preds = %236, %260
%261 = phi i32 [ %274, %260 ], [ %240, %236 ]
%262 = phi i32 [ %268, %260 ], [ %239, %236 ]
%263 = phi i32 [ %272, %260 ], [ %238, %236 ]
%264 = phi i32 [ %273, %260 ], [ %237, %236 ]
%265 = ashr i32 %262, 1
%266 = shl i32 %263, 23
%267 = and i32 %266, 8388608
%268 = or i32 %265, %267
%269 = ashr i32 %263, 1
%270 = shl i32 %264, 23
%271 = and i32 %270, 8388608
%272 = or i32 %269, %271
%273 = ashr i32 %264, 1
%274 = add nsw i32 %261, 1
%275 = icmp ult i32 %264, 4194304
br i1 %275, label %276, label %260
276: ; preds = %260, %236
%277 = phi i32 [ %237, %236 ], [ %273, %260 ]
%278 = phi i32 [ %238, %236 ], [ %272, %260 ]
%279 = phi i32 [ %239, %236 ], [ %268, %260 ]
%280 = phi i32 [ %240, %236 ], [ %274, %260 ]
%281 = and i32 %279, 65280
%282 = icmp ugt i32 %281, 32768
br i1 %282, label %283, label %291
283: ; preds = %276
%284 = add nsw i32 %279, 65536
%285 = lshr i32 %284, 24
%286 = add nsw i32 %285, %278
%287 = lshr i32 %286, 24
%288 = add nuw nsw i32 %287, %277
%289 = and i32 %284, 16711680
%290 = and i32 %286, 16777215
br label %230
291: ; preds = %276
%292 = icmp slt i32 %280, -1022
br i1 %292, label %293, label %295
293: ; preds = %291
%294 = tail call i32 (i8*, ...) bitcast (i32 (...)* @cc_rerr to i32 (i8*, ...)*)(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str, i64 0, i64 0))
br label %316
295: ; preds = %291
%296 = icmp eq i32 %281, 32768
%297 = and i32 %279, 16646144
%298 = select i1 %296, i32 %297, i32 %279
%299 = add nsw i32 %280, 1023
%300 = icmp sgt i32 %280, 1024
br i1 %300, label %301, label %303
301: ; preds = %295
%302 = tail call i32 (i8*, ...) bitcast (i32 (...)* @cc_err to i32 (i8*, ...)*)(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.1, i64 0, i64 0))
br label %303
303: ; preds = %301, %295
%304 = phi i32 [ 0, %301 ], [ %277, %295 ]
%305 = phi i32 [ 0, %301 ], [ %278, %295 ]
%306 = phi i32 [ 0, %301 ], [ %298, %295 ]
%307 = phi i32 [ 2047, %301 ], [ %299, %295 ]
%308 = shl nuw nsw i32 %307, 20
%309 = and i32 %304, 1048575
%310 = or i32 %309, %13
%311 = or i32 %310, %308
%312 = shl i32 %305, 8
%313 = lshr i32 %306, 16
%314 = and i32 %313, 255
%315 = or i32 %314, %312
br label %316
316: ; preds = %90, %303, %293
%317 = phi i32 [ %311, %303 ], [ 0, %293 ], [ 0, %90 ]
%318 = phi i32 [ %315, %303 ], [ 0, %293 ], [ 0, %90 ]
%319 = getelementptr inbounds i32, i32* %1, i64 1
store i32 %317, i32* %1
store i32 %318, i32* %319
ret void
}