int pcard(card, val, nval, fmtlen)
char *card;
double *val;
int nval;
int *fmtlen;
{
  static double pten[] = {1., 10., 100., 1000., 1e4, 1e5, 1e6, 1e7, 1e8, 1e9};
  static int mxdec = 9;
  char *newfield;
  double tmp, fac;
  int ndec, kval, itmp, ipwr, pwrflg, ich, npwr;
  int newnum, neg, negpwr;
  if (sizeof(int) == 2)
    mxdec = 4;
  newfield = (char *)fmtlen;
  if (newfield)
    newfield = card + fmtlen[0];
  newnum = 1;
  neg = negpwr = 0;
  itmp = ipwr = pwrflg = kval = npwr = 0;
  tmp = fac = 0.;
  ndec = -1;
  while (kval < nval) {
    ich = (*card & 0xff);
    if (ich != 0) {
      if (card == newfield) {
        ich = ',';
      } else {
        card++;
      }
    }
    if (ich >= '0' && ich <= '9') {
      if (pwrflg == 0) {
        ++npwr;
      } else if (pwrflg > 0) {
        --ipwr;
      } else {
        pwrflg = -2;
      }
      if (ndec <= 0) {
        itmp = ich - '0';
        ndec = 1;
      } else if (ndec == mxdec) {
        if (pwrflg < 0)
          return kval;
        if (newnum) {
          tmp = (double)itmp;
          newnum = 0;
        } else {
          tmp = tmp * pten[ndec] + itmp;
        }
        itmp = ich - '0';
        ndec = 1;
      } else {
        ++ndec;
        itmp = itmp * 10 + ich - '0';
      }
    } else if (ich == '.' && pwrflg == 0) {
      if (ndec < 0)
        ndec = 0;
      pwrflg = 1;
    } else if (ich == '-' && pwrflg == -1) {
      negpwr = 1;
      ndec = 0;
      pwrflg = -2;
    } else if (ich == '+' && pwrflg == -1) {
      ndec = 0;
      pwrflg = -2;
    } else {
      if (ndec >= 0) {
        if (pwrflg < 0) {
          pwrflg = 0;
          if (negpwr)
            itmp = -itmp;
          npwr += itmp;
          ipwr += itmp;
        } else {
          pwrflg = 0;
          if (newnum) {
            tmp = (double)itmp;
          } else {
            tmp = itmp + tmp * pten[ndec];
          }
          if (ich == 'E' || ich == 'e' || ich == 'D' || ich == 'd') {
            pwrflg = -1;
            ndec = 0;
            negpwr = 0;
          }
        }
        if (pwrflg == 0) {
          if (npwr < -38) {
            ipwr = 0;
            tmp = 0.;
          } else if (npwr > 37) {
            ipwr = 0;
            tmp = 1.e+37;
          }
          if (ipwr != 0) {
            if (ipwr < 0) {
              ipwr = -ipwr;
              if (ipwr > 7)
                fac = 1. / pten[8];
              itmp = ipwr & 7;
              if (itmp != 0)
                tmp /= pten[itmp];
            } else {
              fac = pten[8];
              itmp = ipwr & 7;
              if (itmp != 0)
                tmp *= pten[itmp];
            }
            if (ipwr > 7) {
              ipwr = ipwr >> 3;
              if ((ipwr & 1) != 0)
                tmp *= fac;
              while (ipwr > 1) {
                ipwr = ipwr >> 1;
                fac = fac * fac;
                if ((ipwr & 1) != 0)
                  tmp *= fac;
              }
            }
            ipwr = 0;
          }
          if (neg)
            tmp = -tmp;
          val[kval] = tmp;
          ++kval;
          if (newfield && kval < nval)
            newfield += fmtlen[kval];
          ndec = -1;
          npwr = 0;
          neg = 0;
        }
        itmp = 0;
        newnum = 1;
      }
      if (ich == 0)
        return kval;
      if (ich == '.') {
        ndec = 0;
        pwrflg = 1;
      } else if (ich == '-') {
        ndec = 0;
        neg = 1;
      } else if (ich == '+') {
        ndec = 0;
        neg = 0;
      } else if (ich == ',') {
        if (ndec == -2) {
          ++kval;
          if (newfield && kval < nval)
            newfield += fmtlen[kval];
        }
        ndec = -2;
      } else if (ich == '/') {
        kval = nval;
      }
    }
  }
  return kval;
}


x86 assembly (clang, -O0):
<pcard>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
je     1138 <pcard+0x38>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
movl   $0x1,-0x60(%rbp)
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x5c(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x54(%rbp)
movl   $0x0,-0x50(%rbp)
movl   $0x0,-0x4c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0xffffffff,-0x44(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    175b <pcard+0x65b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
and    $0xff,%eax
mov    %eax,-0x58(%rbp)
cmpl   $0x0,-0x58(%rbp)
je     11d7 <pcard+0xd7>
mov    -0x10(%rbp),%rax
cmp    -0x30(%rbp),%rax
jne    11c6 <pcard+0xc6>
movl   $0x2c,-0x58(%rbp)
jmp    11d2 <pcard+0xd2>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11d7 <pcard+0xd7>
cmpl   $0x30,-0x58(%rbp)
jl     12e6 <pcard+0x1e6>
cmpl   $0x39,-0x58(%rbp)
jg     12e6 <pcard+0x1e6>
cmpl   $0x0,-0x54(%rbp)
jne    1203 <pcard+0x103>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    1227 <pcard+0x127>
cmpl   $0x0,-0x54(%rbp)
jle    121b <pcard+0x11b>
mov    -0x50(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x50(%rbp)
jmp    1222 <pcard+0x122>
movl   $0xfffffffe,-0x54(%rbp)
jmp    1227 <pcard+0x127>
cmpl   $0x0,-0x44(%rbp)
jg     1246 <pcard+0x146>
mov    -0x58(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x4c(%rbp)
movl   $0x1,-0x44(%rbp)
jmp    12e1 <pcard+0x1e1>
mov    -0x44(%rbp),%eax
cmp    0x2e31(%rip),%eax
jne    12c6 <pcard+0x1c6>
cmpl   $0x0,-0x54(%rbp)
jge    126a <pcard+0x16a>
mov    -0x48(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1761 <pcard+0x661>
cmpl   $0x0,-0x60(%rbp)
je     128a <pcard+0x18a>
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x60(%rbp)
jmp    12b1 <pcard+0x1b1>
movsd  -0x38(%rbp),%xmm0
movslq -0x44(%rbp),%rcx
lea    0x2d96(%rip),%rax
movsd  (%rax,%rcx,8),%xmm2
cvtsi2sdl -0x4c(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x58(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x4c(%rbp)
movl   $0x1,-0x44(%rbp)
jmp    12dc <pcard+0x1dc>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
imul   $0xa,-0x4c(%rbp),%eax
add    -0x58(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x4c(%rbp)
jmp    12e1 <pcard+0x1e1>
jmp    1756 <pcard+0x656>
cmpl   $0x2e,-0x58(%rbp)
jne    1317 <pcard+0x217>
cmpl   $0x0,-0x54(%rbp)
jne    1317 <pcard+0x217>
cmpl   $0x0,-0x44(%rbp)
jge    130b <pcard+0x20b>
movl   $0x0,-0x44(%rbp)
movl   $0x1,-0x54(%rbp)
jmp    1751 <pcard+0x651>
cmpl   $0x2d,-0x58(%rbp)
jne    1345 <pcard+0x245>
cmpl   $0xffffffff,-0x54(%rbp)
jne    1345 <pcard+0x245>
movl   $0x1,-0x68(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0xfffffffe,-0x54(%rbp)
jmp    174c <pcard+0x64c>
cmpl   $0x2b,-0x58(%rbp)
jne    136c <pcard+0x26c>
cmpl   $0xffffffff,-0x54(%rbp)
jne    136c <pcard+0x26c>
movl   $0x0,-0x44(%rbp)
movl   $0xfffffffe,-0x54(%rbp)
jmp    1747 <pcard+0x647>
cmpl   $0x0,-0x44(%rbp)
jl     1654 <pcard+0x554>
cmpl   $0x0,-0x54(%rbp)
jge    13b0 <pcard+0x2b0>
movl   $0x0,-0x54(%rbp)
cmpl   $0x0,-0x68(%rbp)
je     1399 <pcard+0x299>
xor    %eax,%eax
sub    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x5c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x50(%rbp),%eax
mov    %eax,-0x50(%rbp)
jmp    1439 <pcard+0x339>
movl   $0x0,-0x54(%rbp)
cmpl   $0x0,-0x60(%rbp)
je     13d0 <pcard+0x2d0>
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    13f7 <pcard+0x2f7>
cvtsi2sdl -0x4c(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movslq -0x44(%rbp),%rcx
lea    0x2c4b(%rip),%rax
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
cmpl   $0x45,-0x58(%rbp)
je     141f <pcard+0x31f>
cmpl   $0x65,-0x58(%rbp)
je     141f <pcard+0x31f>
cmpl   $0x44,-0x58(%rbp)
je     141f <pcard+0x31f>
cmpl   $0x64,-0x58(%rbp)
jne    1434 <pcard+0x334>
movl   $0xffffffff,-0x54(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x68(%rbp)
jmp    1439 <pcard+0x339>
cmpl   $0x0,-0x54(%rbp)
jne    1646 <pcard+0x546>
cmpl   $0xffffffda,-0x5c(%rbp)
jge    1461 <pcard+0x361>
movl   $0x0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    1484 <pcard+0x384>
cmpl   $0x25,-0x5c(%rbp)
jle    147f <pcard+0x37f>
movl   $0x0,-0x50(%rbp)
movsd  0xb86(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    1484 <pcard+0x384>
cmpl   $0x0,-0x50(%rbp)
je     15bb <pcard+0x4bb>
cmpl   $0x0,-0x50(%rbp)
jge    14f5 <pcard+0x3f5>
xor    %eax,%eax
sub    -0x50(%rbp),%eax
mov    %eax,-0x50(%rbp)
cmpl   $0x7,-0x50(%rbp)
jle    14bf <pcard+0x3bf>
movsd  0xb56(%rip),%xmm0
divsd  0x2bb6(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x50(%rbp),%eax
and    $0x7,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
je     14f0 <pcard+0x3f0>
movslq -0x4c(%rbp),%rcx
lea    0x2b53(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x38(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    1534 <pcard+0x434>
movsd  0x2b73(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x50(%rbp),%eax
and    $0x7,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
je     152f <pcard+0x42f>
movslq -0x4c(%rbp),%rcx
lea    0x2b10(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    1534 <pcard+0x434>
cmpl   $0x7,-0x50(%rbp)
jle    15b4 <pcard+0x4b4>
mov    -0x50(%rbp),%eax
sar    $0x3,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1565 <pcard+0x465>
movsd  -0x40(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    156a <pcard+0x46a>
cmpl   $0x1,-0x50(%rbp)
jle    15af <pcard+0x4af>
mov    -0x50(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x50(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     15aa <pcard+0x4aa>
movsd  -0x40(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    156a <pcard+0x46a>
jmp    15b4 <pcard+0x4b4>
movl   $0x0,-0x50(%rbp)
cmpl   $0x0,-0x64(%rbp)
je     15e6 <pcard+0x4e6>
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
cmpq   $0x0,-0x30(%rbp)
je     1631 <pcard+0x531>
mov    -0x48(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1631 <pcard+0x531>
mov    -0x28(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
movl   $0xffffffff,-0x44(%rbp)
movl   $0x0,-0x5c(%rbp)
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x4c(%rbp)
movl   $0x1,-0x60(%rbp)
cmpl   $0x0,-0x58(%rbp)
jne    1669 <pcard+0x569>
mov    -0x48(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1761 <pcard+0x661>
cmpl   $0x2e,-0x58(%rbp)
jne    1686 <pcard+0x586>
movl   $0x0,-0x44(%rbp)
movl   $0x1,-0x54(%rbp)
jmp    1742 <pcard+0x642>
cmpl   $0x2d,-0x58(%rbp)
jne    16a3 <pcard+0x5a3>
movl   $0x0,-0x44(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    173d <pcard+0x63d>
cmpl   $0x2b,-0x58(%rbp)
jne    16c0 <pcard+0x5c0>
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x64(%rbp)
jmp    1738 <pcard+0x638>
cmpl   $0x2c,-0x58(%rbp)
jne    171e <pcard+0x61e>
cmpl   $0xfffffffe,-0x44(%rbp)
jne    1712 <pcard+0x612>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
cmpq   $0x0,-0x30(%rbp)
je     170d <pcard+0x60d>
mov    -0x48(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    170d <pcard+0x60d>
mov    -0x28(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
jmp    1712 <pcard+0x612>
movl   $0xfffffffe,-0x44(%rbp)
jmp    1733 <pcard+0x633>
cmpl   $0x2f,-0x58(%rbp)
jne    172e <pcard+0x62e>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    1733 <pcard+0x633>
jmp    1738 <pcard+0x638>
jmp    173d <pcard+0x63d>
jmp    1742 <pcard+0x642>
jmp    1747 <pcard+0x647>
jmp    174c <pcard+0x64c>
jmp    1751 <pcard+0x651>
jmp    1756 <pcard+0x656>
jmp    1187 <pcard+0x87>
mov    -0x48(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<pcard>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rsi,-0x8(%rsp)
xor    %eax,%eax
test   %rcx,%rcx
mov    %rcx,-0x10(%rsp)
je     112a <pcard+0x2a>
movslq (%rcx),%r8
add    %rdi,%r8
test   %edx,%edx
jg     1135 <pcard+0x35>
jmp    1541 <pcard+0x441>
xor    %r8d,%r8d
test   %edx,%edx
jle    1541 <pcard+0x441>
xorpd  %xmm3,%xmm3
mov    $0xffffffff,%ecx
movl   $0x1,-0x1c(%rsp)
movsd  0xed2(%rip),%xmm0
movsd  0xeaa(%rip),%xmm1
movapd 0xed2(%rip),%xmm2
movsd  0xea9(%rip),%xmm8
movsd  0xea9(%rip),%xmm4
movsd  0xe91(%rip),%xmm5
movl   $0x0,-0x14(%rsp)
movl   $0x0,-0x24(%rsp)
movl   $0x0,-0x20(%rsp)
xor    %r9d,%r9d
movl   $0x0,-0x18(%rsp)
xor    %r11d,%r11d
xor    %eax,%eax
xorpd  %xmm6,%xmm6
jmp    11df <pcard+0xdf>
add    $0x1,%ecx
lea    (%r11,%r11,4),%esi
lea    (%r10,%rsi,2),%r10d
mov    %ecx,%r13d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
or     %r15b,%r14b
xor    $0x1,%r14b
movzbl %r14b,%ecx
add    %rcx,%rdi
mov    %r12d,%r9d
mov    %r10d,%r11d
mov    %r13d,%ecx
cmp    %edx,%eax
jge    1541 <pcard+0x441>
movzbl (%rdi),%ebp
cmp    %r8,%rdi
sete   %r15b
mov    %ebp,%esi
mov    $0x2c,%ebx
cmove  %ebx,%esi
test   %ebp,%ebp
sete   %r14b
cmove  %ebp,%esi
lea    -0x30(%rsi),%r10d
cmp    $0x9,%r10d
ja     1230 <pcard+0x130>
test   %r9d,%r9d
je     1284 <pcard+0x184>
setg   %bl
movzbl %bl,%esi
mov    $0xfffffffe,%ebx
cmovle %ebx,%r9d
sub    %esi,-0x18(%rsp)
mov    %r9d,%r12d
jmp    128c <pcard+0x18c>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x2e,%esi
jne    1260 <pcard+0x160>
test   %r9d,%r9d
jne    1260 <pcard+0x160>
test   %ecx,%ecx
mov    $0x0,%esi
cmovs  %esi,%ecx
mov    $0x1,%r12d
mov    %ecx,%r13d
mov    %r11d,%r10d
jmp    11c0 <pcard+0xc0>
cs nopw 0x0(%rax,%rax,1)
nop
mov    $0xfffffffe,%r12d
cmp    $0x2d,%esi
jne    12d4 <pcard+0x1d4>
cmp    $0xffffffff,%r9d
jne    12d4 <pcard+0x1d4>
xor    %r13d,%r13d
mov    %r11d,%r10d
movl   $0x1,-0x14(%rsp)
jmp    11c0 <pcard+0xc0>
addl   $0x1,-0x20(%rsp)
xor    %r12d,%r12d
mov    $0x1,%r13d
test   %ecx,%ecx
jle    11c0 <pcard+0xc0>
cmp    $0x9,%ecx
jne    11a5 <pcard+0xa5>
test   %r12d,%r12d
js     1541 <pcard+0x441>
xorps  %xmm7,%xmm7
cvtsi2sd %r11d,%xmm7
mulsd  %xmm0,%xmm6
cmpl   $0x0,-0x1c(%rsp)
jne    12c3 <pcard+0x1c3>
addsd  %xmm6,%xmm7
movl   $0x0,-0x1c(%rsp)
movapd %xmm7,%xmm6
jmp    11c0 <pcard+0xc0>
cmp    $0x2b,%esi
jne    12ea <pcard+0x1ea>
cmp    $0xffffffff,%r9d
jne    12ea <pcard+0x1ea>
xor    %r13d,%r13d
mov    %r11d,%r10d
jmp    11c0 <pcard+0xc0>
test   %ecx,%ecx
js     1308 <pcard+0x208>
test   %r9d,%r9d
js     1311 <pcard+0x211>
xorps  %xmm7,%xmm7
cvtsi2sd %r11d,%xmm7
cmpl   $0x0,-0x1c(%rsp)
je     1334 <pcard+0x234>
movapd %xmm7,%xmm6
jmp    1347 <pcard+0x247>
movapd %xmm3,%xmm7
jmp    14aa <pcard+0x3aa>
mov    %r11d,%ecx
neg    %ecx
cmpl   $0x0,-0x14(%rsp)
cmove  %r11d,%ecx
mov    -0x20(%rsp),%ebp
add    %ecx,%ebp
mov    -0x18(%rsp),%r10d
add    %ecx,%r10d
mov    -0x24(%rsp),%r9d
jmp    1380 <pcard+0x280>
mov    %ecx,%ecx
lea    0xd03(%rip),%rbp
mulsd  0x0(%rbp,%rcx,8),%xmm6
addsd  %xmm7,%xmm6
mov    %esi,%ecx
and    $0xffffffde,%ecx
cmp    $0x44,%ecx
jne    1372 <pcard+0x272>
mov    $0xffffffff,%r12d
movl   $0x1,-0x1c(%rsp)
movl   $0x0,-0x14(%rsp)
xor    %r10d,%r10d
xor    %r13d,%r13d
jmp    14bf <pcard+0x3bf>
mov    -0x24(%rsp),%r9d
mov    -0x18(%rsp),%r10d
mov    -0x20(%rsp),%ebp
movapd %xmm1,%xmm7
cmp    $0x26,%ebp
jge    138d <pcard+0x28d>
movapd %xmm6,%xmm7
xorpd  %xmm6,%xmm6
cmp    $0xffffffda,%ebp
jl     139a <pcard+0x29a>
movapd %xmm7,%xmm6
add    $0xffffffda,%ebp
cmp    $0xffffffb4,%ebp
jb     13c9 <pcard+0x2c9>
test   %r10d,%r10d
je     13c9 <pcard+0x2c9>
js     13cf <pcard+0x2cf>
mov    %r10d,%ecx
and    $0x7,%ecx
je     13c0 <pcard+0x2c0>
mov    %ecx,%ecx
lea    0xc86(%rip),%rbp
mulsd  0x0(%rbp,%rcx,8),%xmm6
movapd %xmm5,%xmm7
mov    %r10d,%ebx
jmp    13f8 <pcard+0x2f8>
movapd %xmm3,%xmm7
jmp    1442 <pcard+0x342>
mov    %r10d,%ebx
neg    %ebx
movapd %xmm8,%xmm7
cmp    $0xfffffff9,%r10d
jb     13e3 <pcard+0x2e3>
movapd %xmm3,%xmm7
mov    %ebx,%ebp
and    $0x7,%ebp
je     13f8 <pcard+0x2f8>
mov    %ebp,%ebp
lea    0xc4d(%rip),%rcx
divsd  (%rcx,%rbp,8),%xmm6
cmp    $0x8,%ebx
jb     1442 <pcard+0x342>
movapd %xmm4,%xmm3
test   $0x8,%bl
je     140a <pcard+0x30a>
movapd %xmm7,%xmm3
mulsd  %xmm3,%xmm6
cmp    $0x10,%ebx
jb     1442 <pcard+0x342>
shr    $0x3,%ebx
jmp    142f <pcard+0x32f>
nopl   0x0(%rax,%rax,1)
mulsd  %xmm3,%xmm6
mov    %ebx,%ecx
shr    %ecx
cmp    $0x3,%ebx
mov    %ecx,%ebx
jbe    1442 <pcard+0x342>
mulsd  %xmm7,%xmm7
movapd %xmm4,%xmm3
test   $0x2,%bl
je     1420 <pcard+0x320>
movapd %xmm7,%xmm3
jmp    1420 <pcard+0x320>
test   %r9d,%r9d
je     144b <pcard+0x34b>
xorpd  %xmm2,%xmm6
cltq
mov    -0x8(%rsp),%rcx
movsd  %xmm6,(%rcx,%rax,8)
add    $0x1,%eax
xor    %r11d,%r11d
mov    $0xffffffff,%ecx
test   %r8,%r8
je     1484 <pcard+0x384>
movl   $0x1,-0x1c(%rsp)
cmp    %edx,%eax
jge    148f <pcard+0x38f>
movslq %eax,%rbp
mov    -0x10(%rsp),%rbx
movslq (%rbx,%rbp,4),%rbp
add    %rbp,%r8
jmp    148f <pcard+0x38f>
movl   $0x1,-0x1c(%rsp)
xor    %r8d,%r8d
movl   $0x0,-0x18(%rsp)
xor    %r9d,%r9d
movl   $0x0,-0x20(%rsp)
movl   $0x0,-0x24(%rsp)
mov    %r9d,%r12d
mov    %r11d,%r10d
mov    %ecx,%r13d
movapd %xmm7,%xmm3
test   %esi,%esi
je     1541 <pcard+0x441>
cmp    $0x2e,%esi
jne    14d2 <pcard+0x3d2>
xor    %r13d,%r13d
mov    $0x1,%r12d
jmp    11c0 <pcard+0xc0>
cmp    $0x2d,%esi
jne    14e7 <pcard+0x3e7>
xor    %r13d,%r13d
movl   $0x1,-0x24(%rsp)
jmp    11c0 <pcard+0xc0>
cmp    $0x2b,%esi
jne    14fc <pcard+0x3fc>
xor    %r13d,%r13d
movl   $0x0,-0x24(%rsp)
jmp    11c0 <pcard+0xc0>
cmp    $0x2c,%sil
je     150e <pcard+0x40e>
cmp    $0x2f,%sil
jne    11c0 <pcard+0xc0>
jmp    153f <pcard+0x43f>
cmp    $0xfffffffe,%r13d
jne    1534 <pcard+0x434>
add    $0x1,%eax
test   %r8,%r8
je     1531 <pcard+0x431>
cmp    %edx,%eax
jge    1534 <pcard+0x434>
movslq %eax,%rcx
mov    -0x10(%rsp),%rsi
movslq (%rsi,%rcx,4),%rcx
add    %rcx,%r8
jmp    1534 <pcard+0x434>
xor    %r8d,%r8d
mov    $0xfffffffe,%r13d
jmp    11c0 <pcard+0xc0>
mov    %edx,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@pcard.pten = internal unnamed_addr constant [10 x double] [double 1.000000e+00, double 1.000000e+01, double 1.000000e+02, double 1.000000e+03, double 1.000000e+04, double 1.000000e+05, double 1.000000e+06, double 1.000000e+07, double 1.000000e+08, double 1.000000e+09]
define i32 @pcard(i8* %0, double* nocapture writeonly %1, i32 %2, i32* %3) {
%5 = icmp eq i32* %3, null
br i1 %5, label %10, label %6
6: ; preds = %4
%7 = load i32, i32* %3
%8 = sext i32 %7 to i64
%9 = getelementptr inbounds i8, i8* %0, i64 %8
br label %10
10: ; preds = %6, %4
%11 = phi i8* [ %9, %6 ], [ null, %4 ]
%12 = icmp sgt i32 %2, 0
br i1 %12, label %13, label %234
13: ; preds = %10, %220
%14 = phi i32 [ %232, %220 ], [ 0, %10 ]
%15 = phi i32 [ %231, %220 ], [ 0, %10 ]
%16 = phi i32 [ %230, %220 ], [ 1, %10 ]
%17 = phi i32 [ %229, %220 ], [ 0, %10 ]
%18 = phi i32 [ %228, %220 ], [ 0, %10 ]
%19 = phi i32 [ %227, %220 ], [ 0, %10 ]
%20 = phi i32 [ %226, %220 ], [ 0, %10 ]
%21 = phi i32 [ %225, %220 ], [ 0, %10 ]
%22 = phi i32 [ %224, %220 ], [ -1, %10 ]
%23 = phi double [ %223, %220 ], [ 0.000000e+00, %10 ]
%24 = phi double [ %222, %220 ], [ 0.000000e+00, %10 ]
%25 = phi i8* [ %221, %220 ], [ %11, %10 ]
%26 = phi i8* [ %35, %220 ], [ %0, %10 ]
%27 = load i8, i8* %26
%28 = zext i8 %27 to i32
%29 = icmp eq i8 %27, 0
%30 = icmp eq i8* %26, %25
%31 = select i1 %30, i32 44, i32 %28
%32 = select i1 %29, i1 true, i1 %30
%33 = xor i1 %32, true
%34 = zext i1 %33 to i64
%35 = getelementptr i8, i8* %26, i64 %34
%36 = select i1 %29, i32 0, i32 %31
%37 = add nsw i32 %36, -48
%38 = icmp ult i32 %37, 10
br i1 %38, label %39, label %66
39: ; preds = %13
%40 = icmp eq i32 %18, 0
br i1 %40, label %41, label %43
41: ; preds = %39
%42 = add nsw i32 %17, 1
br label %48
43: ; preds = %39
%44 = icmp sgt i32 %18, 0
%45 = sext i1 %44 to i32
%46 = add nsw i32 %19, %45
%47 = select i1 %44, i32 %18, i32 -2
br label %48
48: ; preds = %43, %41
%49 = phi i32 [ %19, %41 ], [ %46, %43 ]
%50 = phi i32 [ 0, %41 ], [ %47, %43 ]
%51 = phi i32 [ %42, %41 ], [ %17, %43 ]
%52 = icmp slt i32 %22, 1
br i1 %52, label %220, label %53
53: ; preds = %48
%54 = icmp eq i32 %22, 9
br i1 %54, label %55, label %62
55: ; preds = %53
%56 = icmp slt i32 %50, 0
br i1 %56, label %234, label %57
57: ; preds = %55
%58 = icmp eq i32 %16, 0
%59 = sitofp i32 %20 to double
%60 = tail call double @llvm.fmuladd.f64(double %24, double 1.000000e+09, double %59)
%61 = select i1 %58, double %60, double %59
br label %220
62: ; preds = %53
%63 = add nuw nsw i32 %22, 1
%64 = mul nsw i32 %20, 10
%65 = add i32 %37, %64
br label %220
66: ; preds = %13
%67 = icmp eq i32 %36, 46
%68 = icmp eq i32 %18, 0
%69 = select i1 %67, i1 %68, i1 false
br i1 %69, label %70, label %73
70: ; preds = %66
%71 = icmp sgt i32 %22, 0
%72 = select i1 %71, i32 %22, i32 0
br label %220
73: ; preds = %66
%74 = icmp eq i32 %36, 45
%75 = icmp eq i32 %18, -1
%76 = select i1 %74, i1 %75, i1 false
br i1 %76, label %220, label %77
77: ; preds = %73
%78 = icmp eq i32 %36, 43
%79 = select i1 %78, i1 %75, i1 false
br i1 %79, label %220, label %80
80: ; preds = %77
%81 = icmp sgt i32 %22, -1
br i1 %81, label %82, label %177
82: ; preds = %80
%83 = icmp slt i32 %18, 0
br i1 %83, label %84, label %90
84: ; preds = %82
%85 = icmp eq i32 %14, 0
%86 = sub nsw i32 0, %20
%87 = select i1 %85, i32 %20, i32 %86
%88 = add nsw i32 %87, %17
%89 = add nsw i32 %87, %19
br label %102
90: ; preds = %82
%91 = icmp eq i32 %16, 0
%92 = sitofp i32 %20 to double
br i1 %91, label %93, label %98
93: ; preds = %90
%94 = zext i32 %22 to i64
%95 = getelementptr inbounds [10 x double], [10 x double]* @pcard.pten, i64 0, i64 %94
%96 = load double, double* %95
%97 = tail call double @llvm.fmuladd.f64(double %24, double %96, double %92)
br label %98
98: ; preds = %90, %93
%99 = phi double [ %97, %93 ], [ %92, %90 ]
%100 = and i32 %36, 222
%101 = icmp eq i32 %100, 68
br i1 %101, label %190, label %102
102: ; preds = %98, %84
%103 = phi double [ %99, %98 ], [ %24, %84 ]
%104 = phi i32 [ %19, %98 ], [ %89, %84 ]
%105 = phi i32 [ %17, %98 ], [ %88, %84 ]
%106 = icmp slt i32 %105, -38
%107 = icmp sgt i32 %105, 37
%108 = select i1 %107, double 0x479E17B84357691B, double %103
%109 = select i1 %106, double 0.000000e+00, double %108
%110 = add i32 %105, -38
%111 = icmp ult i32 %110, -76
%112 = icmp eq i32 %104, 0
%113 = select i1 %111, i1 true, i1 %112
br i1 %113, label %159, label %114
114: ; preds = %102
%115 = icmp slt i32 %104, 0
br i1 %115, label %116, label %127
116: ; preds = %114
%117 = sub nsw i32 0, %104
%118 = icmp ult i32 %104, -7
%119 = select i1 %118, double 1.000000e-08, double %23
%120 = and i32 %117, 7
%121 = icmp eq i32 %120, 0
br i1 %121, label %135, label %122
122: ; preds = %116
%123 = zext i32 %120 to i64
%124 = getelementptr inbounds [10 x double], [10 x double]* @pcard.pten, i64 0, i64 %123
%125 = load double, double* %124
%126 = fdiv double %109, %125
br label %135
127: ; preds = %114
%128 = and i32 %104, 7
%129 = icmp eq i32 %128, 0
br i1 %129, label %135, label %130
130: ; preds = %127
%131 = zext i32 %128 to i64
%132 = getelementptr inbounds [10 x double], [10 x double]* @pcard.pten, i64 0, i64 %131
%133 = load double, double* %132
%134 = fmul double %109, %133
br label %135
135: ; preds = %127, %130, %116, %122
%136 = phi double [ %126, %122 ], [ %109, %116 ], [ %134, %130 ], [ %109, %127 ]
%137 = phi double [ %119, %122 ], [ %119, %116 ], [ 1.000000e+08, %130 ], [ 1.000000e+08, %127 ]
%138 = phi i32 [ %117, %122 ], [ %117, %116 ], [ %104, %130 ], [ %104, %127 ]
%139 = icmp ugt i32 %138, 7
br i1 %139, label %140, label %159
140: ; preds = %135
%141 = and i32 %138, 8
%142 = icmp eq i32 %141, 0
%143 = select i1 %142, double 1.000000e+00, double %137
%144 = fmul double %136, %143
%145 = icmp ugt i32 %138, 15
br i1 %145, label %146, label %159
146: ; preds = %140
%147 = lshr i32 %138, 3
br label %148
148: ; preds = %146, %148
%149 = phi i32 [ %152, %148 ], [ %147, %146 ]
%150 = phi double [ %153, %148 ], [ %137, %146 ]
%151 = phi double [ %157, %148 ], [ %144, %146 ]
%152 = lshr i32 %149, 1
%153 = fmul double %150, %150
%154 = and i32 %149, 2
%155 = icmp eq i32 %154, 0
%156 = select i1 %155, double 1.000000e+00, double %153
%157 = fmul double %151, %156
%158 = icmp ugt i32 %149, 3
br i1 %158, label %148, label %159
159: ; preds = %148, %140, %135, %102
%160 = phi double [ %109, %102 ], [ %136, %135 ], [ %144, %140 ], [ %157, %148 ]
%161 = phi double [ %23, %102 ], [ %137, %135 ], [ %137, %140 ], [ %153, %148 ]
%162 = icmp eq i32 %15, 0
%163 = fneg double %160
%164 = select i1 %162, double %160, double %163
%165 = sext i32 %21 to i64
%166 = getelementptr inbounds double, double* %1, i64 %165
store double %164, double* %166
%167 = add nsw i32 %21, 1
%168 = icmp eq i8* %25, null
br i1 %168, label %177, label %169
169: ; preds = %159
%170 = icmp slt i32 %167, %2
br i1 %170, label %171, label %177
171: ; preds = %169
%172 = sext i32 %167 to i64
%173 = getelementptr inbounds i32, i32* %3, i64 %172
%174 = load i32, i32* %173
%175 = sext i32 %174 to i64
%176 = getelementptr inbounds i8, i8* %25, i64 %175
br label %177
177: ; preds = %171, %169, %159, %80
%178 = phi i8* [ %25, %80 ], [ %176, %171 ], [ %25, %169 ], [ null, %159 ]
%179 = phi double [ %24, %80 ], [ %164, %171 ], [ %164, %169 ], [ %164, %159 ]
%180 = phi double [ %23, %80 ], [ %161, %171 ], [ %161, %169 ], [ %161, %159 ]
%181 = phi i32 [ %22, %80 ], [ -1, %171 ], [ -1, %169 ], [ -1, %159 ]
%182 = phi i32 [ %21, %80 ], [ %167, %171 ], [ %167, %169 ], [ %167, %159 ]
%183 = phi i32 [ %20, %80 ], [ 0, %171 ], [ 0, %169 ], [ 0, %159 ]
%184 = phi i32 [ %19, %80 ], [ 0, %171 ], [ 0, %169 ], [ 0, %159 ]
%185 = phi i32 [ %18, %80 ], [ 0, %171 ], [ 0, %169 ], [ 0, %159 ]
%186 = phi i32 [ %17, %80 ], [ 0, %171 ], [ 0, %169 ], [ 0, %159 ]
%187 = phi i32 [ %16, %80 ], [ 1, %171 ], [ 1, %169 ], [ 1, %159 ]
%188 = phi i32 [ %15, %80 ], [ 0, %171 ], [ 0, %169 ], [ 0, %159 ]
%189 = icmp eq i32 %36, 0
br i1 %189, label %234, label %190
190: ; preds = %98, %177
%191 = phi i32 [ %14, %177 ], [ 0, %98 ]
%192 = phi i32 [ %188, %177 ], [ %15, %98 ]
%193 = phi i32 [ %187, %177 ], [ 1, %98 ]
%194 = phi i32 [ %186, %177 ], [ %17, %98 ]
%195 = phi i32 [ %185, %177 ], [ -1, %98 ]
%196 = phi i32 [ %184, %177 ], [ %19, %98 ]
%197 = phi i32 [ %183, %177 ], [ 0, %98 ]
%198 = phi i32 [ %182, %177 ], [ %21, %98 ]
%199 = phi i32 [ %181, %177 ], [ 0, %98 ]
%200 = phi double [ %180, %177 ], [ %23, %98 ]
%201 = phi double [ %179, %177 ], [ %99, %98 ]
%202 = phi i8* [ %178, %177 ], [ %25, %98 ]
br i1 %67, label %220, label %203
203: ; preds = %190
br i1 %74, label %220, label %204
204: ; preds = %203
br i1 %78, label %220, label %205
205: ; preds = %204
%206 = trunc i32 %36 to i8
switch i8 %206, label %220 [
i8 44, label %207
i8 47, label %234
]
207: ; preds = %205
%208 = icmp eq i32 %199, -2
br i1 %208, label %209, label %220
209: ; preds = %207
%210 = add nsw i32 %198, 1
%211 = icmp eq i8* %202, null
br i1 %211, label %220, label %212
212: ; preds = %209
%213 = icmp slt i32 %210, %2
br i1 %213, label %214, label %220
214: ; preds = %212
%215 = sext i32 %210 to i64
%216 = getelementptr inbounds i32, i32* %3, i64 %215
%217 = load i32, i32* %216
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds i8, i8* %202, i64 %218
br label %220
220: ; preds = %48, %205, %207, %214, %212, %209, %204, %203, %190, %77, %73, %70, %62, %57
%221 = phi i8* [ %25, %57 ], [ %25, %62 ], [ %25, %70 ], [ %25, %73 ], [ %25, %77 ], [ %202, %190 ], [ %202, %203 ], [ %202, %204 ], [ %219, %214 ], [ %202, %212 ], [ null, %209 ], [ %202, %207 ], [ %202, %205 ], [ %25, %48 ]
%222 = phi double [ %61, %57 ], [ %24, %62 ], [ %24, %70 ], [ %24, %73 ], [ %24, %77 ], [ %201, %190 ], [ %201, %203 ], [ %201, %204 ], [ %201, %214 ], [ %201, %212 ], [ %201, %209 ], [ %201, %207 ], [ %201, %205 ], [ %24, %48 ]
%223 = phi double [ %23, %57 ], [ %23, %62 ], [ %23, %70 ], [ %23, %73 ], [ %23, %77 ], [ %200, %190 ], [ %200, %203 ], [ %200, %204 ], [ %200, %214 ], [ %200, %212 ], [ %200, %209 ], [ %200, %207 ], [ %200, %205 ], [ %23, %48 ]
%224 = phi i32 [ 1, %57 ], [ %63, %62 ], [ %72, %70 ], [ 0, %73 ], [ 0, %77 ], [ 0, %190 ], [ 0, %203 ], [ 0, %204 ], [ -2, %214 ], [ -2, %212 ], [ -2, %209 ], [ -2, %207 ], [ %199, %205 ], [ 1, %48 ]
%225 = phi i32 [ %21, %57 ], [ %21, %62 ], [ %21, %70 ], [ %21, %73 ], [ %21, %77 ], [ %198, %190 ], [ %198, %203 ], [ %198, %204 ], [ %210, %214 ], [ %210, %212 ], [ %210, %209 ], [ %198, %207 ], [ %198, %205 ], [ %21, %48 ]
%226 = phi i32 [ %37, %57 ], [ %65, %62 ], [ %20, %70 ], [ %20, %73 ], [ %20, %77 ], [ %197, %190 ], [ %197, %203 ], [ %197, %204 ], [ %197, %214 ], [ %197, %212 ], [ %197, %209 ], [ %197, %207 ], [ %197, %205 ], [ %37, %48 ]
%227 = phi i32 [ %49, %57 ], [ %49, %62 ], [ %19, %70 ], [ %19, %73 ], [ %19, %77 ], [ %196, %190 ], [ %196, %203 ], [ %196, %204 ], [ %196, %214 ], [ %196, %212 ], [ %196, %209 ], [ %196, %207 ], [ %196, %205 ], [ %49, %48 ]
%228 = phi i32 [ %50, %57 ], [ %50, %62 ], [ 1, %70 ], [ -2, %73 ], [ -2, %77 ], [ 1, %190 ], [ %195, %203 ], [ %195, %204 ], [ %195, %214 ], [ %195, %212 ], [ %195, %209 ], [ %195, %207 ], [ %195, %205 ], [ %50, %48 ]
%229 = phi i32 [ %51, %57 ], [ %51, %62 ], [ %17, %70 ], [ %17, %73 ], [ %17, %77 ], [ %194, %190 ], [ %194, %203 ], [ %194, %204 ], [ %194, %214 ], [ %194, %212 ], [ %194, %209 ], [ %194, %207 ], [ %194, %205 ], [ %51, %48 ]
%230 = phi i32 [ 0, %57 ], [ %16, %62 ], [ %16, %70 ], [ %16, %73 ], [ %16, %77 ], [ %193, %190 ], [ %193, %203 ], [ %193, %204 ], [ %193, %214 ], [ %193, %212 ], [ %193, %209 ], [ %193, %207 ], [ %193, %205 ], [ %16, %48 ]
%231 = phi i32 [ %15, %57 ], [ %15, %62 ], [ %15, %70 ], [ %15, %73 ], [ %15, %77 ], [ %192, %190 ], [ 1, %203 ], [ 0, %204 ], [ %192, %214 ], [ %192, %212 ], [ %192, %209 ], [ %192, %207 ], [ %192, %205 ], [ %15, %48 ]
%232 = phi i32 [ %14, %57 ], [ %14, %62 ], [ %14, %70 ], [ 1, %73 ], [ %14, %77 ], [ %191, %190 ], [ %191, %203 ], [ %191, %204 ], [ %191, %214 ], [ %191, %212 ], [ %191, %209 ], [ %191, %207 ], [ %191, %205 ], [ %14, %48 ]
%233 = icmp slt i32 %225, %2
br i1 %233, label %13, label %234
234: ; preds = %205, %55, %177, %220, %10
%235 = phi i32 [ 0, %10 ], [ %2, %205 ], [ %225, %220 ], [ %182, %177 ], [ %21, %55 ]
ret i32 %235
}