void IntegerUnpacker_16(void *stream, void *dst, int nbits, int nbitt, int n,
                        int offset) {
  unsigned int *packed = (unsigned int *)stream;
  short *unpacked = (short *)dst;
  unsigned long long temp;
  unsigned int token, token1, token2, token3;
  int bleft;
  int signed_offset = 0;
  if (nbits > 16 || nbitt > nbits)
    return;
  packed += offset / 32;
  bleft = 32 - (offset % 32);
  token = *packed++;
  if (nbits == -1)
    signed_offset = -(1 << (nbitt - 1));
  if (bleft == 32) {
    if (nbits == 16) {
      while (n > 3) {
        *unpacked++ = (token >> 16);
        *unpacked++ = (token & 0xFFFF);
        token = *packed++;
        *unpacked++ = (token >> 16);
        *unpacked++ = (token & 0xFFFF);
        token = *packed++;
        n -= 4;
      }
    }
    if (nbits == 12) {
      while (n > 7) {
        token2 = *packed++;
        token3 = *packed++;
        token1 = *packed++;
        *unpacked++ = ((token >> 20));
        *unpacked++ = ((token >> 8) & 0xFFF);
        *unpacked++ = (((token & 0xFF) << 4) | (token2 >> 28));
        *unpacked++ = ((token2 >> 16) & 0xFFF);
        *unpacked++ = ((token2 >> 4) & 0xFFF);
        *unpacked++ = (((token2 & 0xF) << 8) | (token3 >> 24));
        *unpacked++ = ((token3 >> 12) & 0xFFF);
        *unpacked++ = (token3 & 0xFFF);
        token = token1;
        n -= 8;
      }
    }
    if (nbits == 8) {
      while (n > 7) {
        *unpacked++ = ((token >> 24));
        *unpacked++ = ((token >> 16) & 0xFF);
        *unpacked++ = ((token >> 8) & 0xFF);
        *unpacked++ = (token & 0xFF);
        token = *packed++;
        *unpacked++ = ((token >> 24));
        *unpacked++ = ((token >> 16) & 0xFF);
        *unpacked++ = ((token >> 8) & 0xFF);
        *unpacked++ = (token & 0xFF);
        token = *packed++;
        n -= 8;
      }
    }
    if (nbits == 6) {
      while (n > 15) {
        token2 = *packed++;
        token3 = *packed++;
        token1 = *packed++;
        *unpacked++ = ((token >> 26));
        *unpacked++ = ((token >> 20) & 0x3F);
        *unpacked++ = ((token >> 14) & 0x3F);
        *unpacked++ = ((token >> 8) & 0x3F);
        *unpacked++ = ((token >> 2) & 0x3F);
        *unpacked++ = (((token & 0x3) << 4) | (token2 >> 28));
        *unpacked++ = ((token2 >> 22) & 0x3F);
        *unpacked++ = ((token2 >> 16) & 0x3F);
        *unpacked++ = ((token2 >> 10) & 0x3F);
        *unpacked++ = ((token2 >> 4) & 0x3F);
        *unpacked++ = (((token2 & 0xF) << 2) | (token3 >> 30));
        *unpacked++ = ((token3 >> 24) & 0x3F);
        *unpacked++ = ((token3 >> 18) & 0x3F);
        *unpacked++ = ((token3 >> 12) & 0x3F);
        *unpacked++ = ((token3 >> 6) & 0x3F);
        *unpacked++ = (token3 & 0x3F);
        token = token1;
        n -= 16;
      }
    }
    if (nbits == 4) {
      while (n > 7) {
        *unpacked++ = ((token >> 28));
        *unpacked++ = ((token >> 24) & 0xF);
        *unpacked++ = ((token >> 20) & 0xF);
        *unpacked++ = ((token >> 16) & 0xF);
        *unpacked++ = ((token >> 12) & 0xF);
        *unpacked++ = ((token >> 8) & 0xF);
        *unpacked++ = ((token >> 4) & 0xF);
        *unpacked++ = (token & 0xF);
        token = *packed++;
        n -= 8;
      }
    }
    if (nbits == 2) {
      while (n > 15) {
        *unpacked++ = ((token >> 30));
        *unpacked++ = ((token >> 28) & 0x3);
        *unpacked++ = ((token >> 26) & 0x3);
        *unpacked++ = ((token >> 24) & 0x3);
        *unpacked++ = ((token >> 22) & 0x3);
        *unpacked++ = ((token >> 20) & 0x3);
        *unpacked++ = ((token >> 18) & 0x3);
        *unpacked++ = ((token >> 16) & 0x3);
        *unpacked++ = ((token >> 14) & 0x3);
        *unpacked++ = ((token >> 12) & 0x3);
        *unpacked++ = ((token >> 10) & 0x3);
        *unpacked++ = ((token >> 8) & 0x3);
        *unpacked++ = ((token >> 6) & 0x3);
        *unpacked++ = ((token >> 4) & 0x3);
        *unpacked++ = ((token >> 2) & 0x3);
        *unpacked++ = (token & 0x3);
        token = *packed++;
        n -= 16;
      }
    }
    if (nbits == 1) {
      while (n > 31) {
        *unpacked++ = ((token >> 31) & 1);
        *unpacked++ = ((token >> 30) & 1);
        *unpacked++ = ((token >> 29) & 1);
        *unpacked++ = ((token >> 28) & 1);
        *unpacked++ = ((token >> 27) & 1);
        *unpacked++ = ((token >> 26) & 1);
        *unpacked++ = ((token >> 25) & 1);
        *unpacked++ = ((token >> 24) & 1);
        *unpacked++ = ((token >> 23) & 1);
        *unpacked++ = ((token >> 22) & 1);
        *unpacked++ = ((token >> 21) & 1);
        *unpacked++ = ((token >> 20) & 1);
        *unpacked++ = ((token >> 19) & 1);
        *unpacked++ = ((token >> 18) & 1);
        *unpacked++ = ((token >> 17) & 1);
        *unpacked++ = ((token >> 16) & 1);
        *unpacked++ = ((token >> 15) & 1);
        *unpacked++ = ((token >> 14) & 1);
        *unpacked++ = ((token >> 13) & 1);
        *unpacked++ = ((token >> 12) & 1);
        *unpacked++ = ((token >> 11) & 1);
        *unpacked++ = ((token >> 10) & 1);
        *unpacked++ = ((token >> 9) & 1);
        *unpacked++ = ((token >> 8) & 1);
        *unpacked++ = ((token >> 7) & 1);
        *unpacked++ = ((token >> 6) & 1);
        *unpacked++ = ((token >> 5) & 1);
        *unpacked++ = ((token >> 4) & 1);
        *unpacked++ = ((token >> 3) & 1);
        *unpacked++ = ((token >> 2) & 1);
        *unpacked++ = ((token >> 1) & 1);
        *unpacked++ = (token & 1);
        token = *packed++;
        n -= 32;
      }
    }
  }
  temp = token;
  temp <<= 32;
  temp |= *packed++;
  if (bleft < 32)
    temp <<= (32 - bleft);
  while (n > 1) {
    *unpacked++ = (temp >> (64 - nbits));
    temp <<= nbits;
    bleft -= nbits;
    *unpacked++ = (temp >> (64 - nbits));
    temp <<= nbits;
    bleft -= nbits;
    if (bleft <= 0) {
      temp = temp >> (-bleft);
      temp |= *packed++;
      temp <<= (-bleft);
      bleft += 32;
    }
    n -= 2;
  }
  while (n-- > 0) {
    *unpacked++ = (temp >> (64 - nbits));
    temp <<= nbits;
    bleft -= nbits;
    if (bleft <= 0) {
      temp = temp >> (-bleft);
      temp |= *packed++;
      temp <<= (-bleft);
      bleft += 32;
    }
  }
}


x86 assembly (clang, -O0):
<IntegerUnpacker_16>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9d,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x50(%rbp)
cmpl   $0x10,-0x14(%rbp)
jg     1147 <IntegerUnpacker_16+0x47>
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    114c <IntegerUnpacker_16+0x4c>
jmp    20c1 <IntegerUnpacker_16+0xfc1>
mov    -0x20(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x20,%ecx
cltd
idiv   %ecx
mov    $0x20,%eax
sub    %edx,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0xffffffff,-0x14(%rbp)
jne    11b4 <IntegerUnpacker_16+0xb4>
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
mov    $0x1,%eax
shl    %cl,%eax
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x50(%rbp)
cmpl   $0x20,-0x4c(%rbp)
jne    1ed8 <IntegerUnpacker_16+0xdd8>
cmpl   $0x10,-0x14(%rbp)
jne    1282 <IntegerUnpacker_16+0x182>
jmp    11cd <IntegerUnpacker_16+0xcd>
cmpl   $0x3,-0x1c(%rbp)
jle    127d <IntegerUnpacker_16+0x17d>
mov    -0x3c(%rbp),%eax
shr    $0x10,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
and    $0xffff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
shr    $0x10,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
and    $0xffff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x1c(%rbp)
jmp    11cd <IntegerUnpacker_16+0xcd>
jmp    1282 <IntegerUnpacker_16+0x182>
cmpl   $0xc,-0x14(%rbp)
jne    13f6 <IntegerUnpacker_16+0x2f6>
jmp    1291 <IntegerUnpacker_16+0x191>
cmpl   $0x7,-0x1c(%rbp)
jle    13f1 <IntegerUnpacker_16+0x2f1>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x44(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
shr    $0x14,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x8,%eax
and    $0xfff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
and    $0xff,%eax
shl    $0x4,%eax
mov    -0x44(%rbp),%ecx
shr    $0x1c,%ecx
or     %ecx,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x44(%rbp),%eax
shr    $0x10,%eax
and    $0xfff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x44(%rbp),%eax
shr    $0x4,%eax
and    $0xfff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x44(%rbp),%eax
and    $0xf,%eax
shl    $0x8,%eax
mov    -0x48(%rbp),%ecx
shr    $0x18,%ecx
or     %ecx,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x48(%rbp),%eax
shr    $0xc,%eax
and    $0xfff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x48(%rbp),%eax
and    $0xfff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x8,%eax
mov    %eax,-0x1c(%rbp)
jmp    1291 <IntegerUnpacker_16+0x191>
jmp    13f6 <IntegerUnpacker_16+0x2f6>
cmpl   $0x8,-0x14(%rbp)
jne    153a <IntegerUnpacker_16+0x43a>
jmp    1405 <IntegerUnpacker_16+0x305>
cmpl   $0x7,-0x1c(%rbp)
jle    1535 <IntegerUnpacker_16+0x435>
mov    -0x3c(%rbp),%eax
shr    $0x18,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x10,%eax
and    $0xff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x8,%eax
and    $0xff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
and    $0xff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
shr    $0x18,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x10,%eax
and    $0xff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x8,%eax
and    $0xff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
and    $0xff,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x8,%eax
mov    %eax,-0x1c(%rbp)
jmp    1405 <IntegerUnpacker_16+0x305>
jmp    153a <IntegerUnpacker_16+0x43a>
cmpl   $0x6,-0x14(%rbp)
jne    1792 <IntegerUnpacker_16+0x692>
jmp    1549 <IntegerUnpacker_16+0x449>
cmpl   $0xf,-0x1c(%rbp)
jle    178d <IntegerUnpacker_16+0x68d>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x44(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
shr    $0x1a,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x14,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xe,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x8,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x2,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
and    $0x3,%eax
shl    $0x4,%eax
mov    -0x44(%rbp),%ecx
shr    $0x1c,%ecx
or     %ecx,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x44(%rbp),%eax
shr    $0x16,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x44(%rbp),%eax
shr    $0x10,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x44(%rbp),%eax
shr    $0xa,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x44(%rbp),%eax
shr    $0x4,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x44(%rbp),%eax
and    $0xf,%eax
shl    $0x2,%eax
mov    -0x48(%rbp),%ecx
shr    $0x1e,%ecx
or     %ecx,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x48(%rbp),%eax
shr    $0x18,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x48(%rbp),%eax
shr    $0x12,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x48(%rbp),%eax
shr    $0xc,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x48(%rbp),%eax
shr    $0x6,%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x48(%rbp),%eax
and    $0x3f,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x10,%eax
mov    %eax,-0x1c(%rbp)
jmp    1549 <IntegerUnpacker_16+0x449>
jmp    1792 <IntegerUnpacker_16+0x692>
cmpl   $0x4,-0x14(%rbp)
jne    18bc <IntegerUnpacker_16+0x7bc>
jmp    17a1 <IntegerUnpacker_16+0x6a1>
cmpl   $0x7,-0x1c(%rbp)
jle    18b7 <IntegerUnpacker_16+0x7b7>
mov    -0x3c(%rbp),%eax
shr    $0x1c,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x18,%eax
and    $0xf,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x14,%eax
and    $0xf,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x10,%eax
and    $0xf,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xc,%eax
and    $0xf,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x8,%eax
and    $0xf,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x4,%eax
and    $0xf,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
and    $0xf,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x8,%eax
mov    %eax,-0x1c(%rbp)
jmp    17a1 <IntegerUnpacker_16+0x6a1>
jmp    18bc <IntegerUnpacker_16+0x7bc>
cmpl   $0x2,-0x14(%rbp)
jne    1ad6 <IntegerUnpacker_16+0x9d6>
jmp    18cb <IntegerUnpacker_16+0x7cb>
cmpl   $0xf,-0x1c(%rbp)
jle    1ad1 <IntegerUnpacker_16+0x9d1>
mov    -0x3c(%rbp),%eax
shr    $0x1e,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x1c,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x1a,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x18,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x16,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x14,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x12,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x10,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xe,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xc,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xa,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x8,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x6,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x4,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x2,%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
and    $0x3,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x10,%eax
mov    %eax,-0x1c(%rbp)
jmp    18cb <IntegerUnpacker_16+0x7cb>
jmp    1ad6 <IntegerUnpacker_16+0x9d6>
cmpl   $0x1,-0x14(%rbp)
jne    1ed3 <IntegerUnpacker_16+0xdd3>
jmp    1ae5 <IntegerUnpacker_16+0x9e5>
cmpl   $0x1f,-0x1c(%rbp)
jle    1ece <IntegerUnpacker_16+0xdce>
mov    -0x3c(%rbp),%eax
shr    $0x1f,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x1e,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x1d,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x1c,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x1b,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x1a,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x19,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x18,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x17,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x16,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x15,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x14,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x13,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x12,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x11,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x10,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xf,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xe,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xd,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xc,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xb,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0xa,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x9,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x8,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x7,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x6,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x5,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x4,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x3,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x2,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
shr    $0x1,%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x3c(%rbp),%eax
and    $0x1,%eax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x20,%eax
mov    %eax,-0x1c(%rbp)
jmp    1ae5 <IntegerUnpacker_16+0x9e5>
jmp    1ed3 <IntegerUnpacker_16+0xdd3>
jmp    1ed8 <IntegerUnpacker_16+0xdd8>
mov    -0x3c(%rbp),%eax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
shl    $0x20,%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
or     -0x38(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpl   $0x20,-0x4c(%rbp)
jge    1f23 <IntegerUnpacker_16+0xe23>
mov    $0x20,%ecx
sub    -0x4c(%rbp),%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,%ecx
shl    %cl,%rax
mov    %rax,-0x38(%rbp)
jmp    1f28 <IntegerUnpacker_16+0xe28>
cmpl   $0x1,-0x1c(%rbp)
jle    2012 <IntegerUnpacker_16+0xf12>
mov    -0x38(%rbp),%rax
mov    $0x40,%ecx
sub    -0x14(%rbp),%ecx
mov    %ecx,%ecx
shr    %cl,%rax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,%ecx
shl    %cl,%rax
mov    %rax,-0x38(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x4c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x38(%rbp),%rax
mov    $0x40,%ecx
sub    -0x14(%rbp),%ecx
mov    %ecx,%ecx
shr    %cl,%rax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,%ecx
shl    %cl,%rax
mov    %rax,-0x38(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x4c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jg     2004 <IntegerUnpacker_16+0xf04>
mov    -0x38(%rbp),%rax
xor    %ecx,%ecx
sub    -0x4c(%rbp),%ecx
mov    %ecx,%ecx
shr    %cl,%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
or     -0x38(%rbp),%rax
mov    %rax,-0x38(%rbp)
xor    %ecx,%ecx
sub    -0x4c(%rbp),%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,%ecx
shl    %cl,%rax
mov    %rax,-0x38(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x20,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    1f28 <IntegerUnpacker_16+0xe28>
jmp    2017 <IntegerUnpacker_16+0xf17>
mov    -0x1c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x1c(%rbp)
cmp    $0x0,%eax
jle    20c1 <IntegerUnpacker_16+0xfc1>
mov    -0x38(%rbp),%rax
mov    $0x40,%ecx
sub    -0x14(%rbp),%ecx
mov    %ecx,%ecx
shr    %cl,%rax
mov    %ax,%cx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cx,(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,%ecx
shl    %cl,%rax
mov    %rax,-0x38(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x4c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jg     20bc <IntegerUnpacker_16+0xfbc>
mov    -0x38(%rbp),%rax
xor    %ecx,%ecx
sub    -0x4c(%rbp),%ecx
mov    %ecx,%ecx
shr    %cl,%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
or     -0x38(%rbp),%rax
mov    %rax,-0x38(%rbp)
xor    %ecx,%ecx
sub    -0x4c(%rbp),%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,%ecx
shl    %cl,%rax
mov    %rax,-0x38(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x20,%eax
mov    %eax,-0x4c(%rbp)
jmp    2017 <IntegerUnpacker_16+0xf17>
pop    %rbp
ret

x86 assembly (clang, -O2):
<IntegerUnpacker_16>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
cmp    $0x10,%edx
jg     177c <IntegerUnpacker_16+0x67c>
mov    %edx,%r12d
cmp    %edx,%ecx
jg     177c <IntegerUnpacker_16+0x67c>
lea    0x1f(%r9),%eax
test   %r9d,%r9d
cmovns %r9d,%eax
mov    %eax,%ecx
sar    $0x5,%ecx
movslq %ecx,%r11
and    $0xffffffe0,%eax
lea    (%rdi,%r11,4),%r10
add    $0x4,%r10
mov    (%rdi,%r11,4),%ebx
sub    %eax,%r9d
jne    16be <IntegerUnpacker_16+0x5be>
cmp    $0x10,%r12d
jne    118b <IntegerUnpacker_16+0x8b>
cmp    $0x4,%r8d
jl     118b <IntegerUnpacker_16+0x8b>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %r8d,%eax
ror    $0x10,%ebx
mov    %ebx,(%rsi)
mov    (%r10),%ecx
ror    $0x10,%ecx
mov    %ecx,0x4(%rsi)
add    $0x8,%rsi
mov    0x4(%r10),%ebx
add    $0x8,%r10
lea    -0x4(%rax),%r8d
cmp    $0x7,%eax
ja     1160 <IntegerUnpacker_16+0x60>
jmp    16be <IntegerUnpacker_16+0x5be>
cmp    $0xc,%r12d
jne    122d <IntegerUnpacker_16+0x12d>
cmp    $0x8,%r8d
jl     122d <IntegerUnpacker_16+0x12d>
nop
mov    %ebx,%ebp
mov    %r8d,%r11d
mov    (%r10),%edi
mov    0x4(%r10),%ecx
mov    0x8(%r10),%ebx
add    $0xc,%r10
mov    %ebp,%eax
shr    $0x14,%eax
mov    %ax,(%rsi)
mov    %ebp,%eax
shr    $0x8,%eax
and    $0xfff,%eax
mov    %ax,0x2(%rsi)
shld   $0x4,%edi,%ebp
and    $0xfff,%ebp
mov    %bp,0x4(%rsi)
mov    %edi,%eax
shr    $0x10,%eax
and    $0xfff,%eax
mov    %ax,0x6(%rsi)
movzwl %di,%eax
shr    $0x4,%eax
mov    %ax,0x8(%rsi)
shld   $0x8,%ecx,%edi
and    $0xfff,%edi
mov    %di,0xa(%rsi)
mov    %ecx,%eax
shr    $0xc,%eax
and    $0xfff,%eax
mov    %ax,0xc(%rsi)
and    $0xfff,%ecx
mov    %cx,0xe(%rsi)
add    $0x10,%rsi
lea    -0x8(%r11),%r8d
cmp    $0xf,%r11d
ja     11a0 <IntegerUnpacker_16+0xa0>
jmp    16be <IntegerUnpacker_16+0x5be>
cmp    $0x8,%r12d
jne    12e9 <IntegerUnpacker_16+0x1e9>
cmp    $0x8,%r8d
jl     12e9 <IntegerUnpacker_16+0x1e9>
lea    0x8(%r8),%ecx
lea    (%rdi,%r11,4),%r10
add    $0x4,%r10
xor    %eax,%eax
mov    %rsi,%r14
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %ebx,%ebp
movzbl %bh,%edx
movzbl %bl,%r15d
shr    $0x18,%ebx
mov    %bx,(%rsi,%rax,2)
shr    $0x10,%ebp
movzbl %bpl,%ebx
mov    %bx,0x2(%rsi,%rax,2)
mov    %dx,0x4(%rsi,%rax,2)
mov    %r15w,0x6(%rsi,%rax,2)
mov    (%r10,%rax,1),%ebx
mov    %ebx,%edx
movzbl %bh,%ebp
movzbl %bl,%r13d
shr    $0x18,%ebx
mov    %bx,0x8(%rsi,%rax,2)
shr    $0x10,%edx
movzbl %dl,%edx
mov    %dx,0xa(%rsi,%rax,2)
mov    %r14,%r15
mov    %bp,0xc(%rsi,%rax,2)
mov    %r13w,0xe(%rsi,%rax,2)
mov    0x4(%r10,%rax,1),%ebx
add    $0xfffffff8,%ecx
lea    (%rsi,%rax,2),%r14
add    $0x10,%r14
add    $0x8,%rax
cmp    $0xf,%ecx
ja     1260 <IntegerUnpacker_16+0x160>
add    $0x10,%r15
sub    %eax,%r8d
lea    (%rdi,%r11,4),%rcx
lea    (%rax,%rcx,1),%r10
add    $0x4,%r10
mov    %r15,%rsi
jmp    16be <IntegerUnpacker_16+0x5be>
cmp    $0x6,%r12d
jne    13d9 <IntegerUnpacker_16+0x2d9>
cmp    $0x10,%r8d
jl     13d9 <IntegerUnpacker_16+0x2d9>
nopl   (%rax)
mov    %ebx,%eax
mov    %r8d,%r11d
mov    (%r10),%edi
mov    0x4(%r10),%ecx
mov    0x8(%r10),%ebx
add    $0xc,%r10
mov    %eax,%edx
shr    $0x1a,%edx
mov    %dx,(%rsi)
mov    %eax,%edx
shr    $0x14,%edx
and    $0x3f,%edx
mov    %dx,0x2(%rsi)
mov    %eax,%edx
shr    $0xe,%edx
and    $0x3f,%edx
mov    %dx,0x4(%rsi)
mov    %eax,%edx
shr    $0x8,%edx
and    $0x3f,%edx
mov    %dx,0x6(%rsi)
mov    %eax,%edx
shr    $0x2,%edx
and    $0x3f,%edx
shld   $0x4,%edi,%eax
mov    %dx,0x8(%rsi)
and    $0x3f,%eax
mov    %ax,0xa(%rsi)
mov    %edi,%eax
shr    $0x16,%eax
and    $0x3f,%eax
mov    %ax,0xc(%rsi)
mov    %edi,%eax
shr    $0x10,%eax
and    $0x3f,%eax
mov    %ax,0xe(%rsi)
movzwl %di,%eax
mov    %eax,%edx
shr    $0xa,%edx
mov    %dx,0x10(%rsi)
shr    $0x4,%eax
and    $0x3f,%eax
shld   $0x2,%ecx,%edi
mov    %ax,0x12(%rsi)
and    $0x3f,%edi
mov    %di,0x14(%rsi)
mov    %ecx,%eax
shr    $0x18,%eax
and    $0x3f,%eax
mov    %ax,0x16(%rsi)
mov    %ecx,%eax
shr    $0x12,%eax
and    $0x3f,%eax
mov    %ax,0x18(%rsi)
mov    %ecx,%eax
shr    $0xc,%eax
and    $0x3f,%eax
mov    %ax,0x1a(%rsi)
mov    %ecx,%eax
shr    $0x6,%eax
and    $0x3f,%eax
mov    %ax,0x1c(%rsi)
and    $0x3f,%ecx
mov    %cx,0x1e(%rsi)
add    $0x20,%rsi
lea    -0x10(%r11),%r8d
cmp    $0x1f,%r11d
ja     1300 <IntegerUnpacker_16+0x200>
cmp    $0x4,%r12d
jne    1461 <IntegerUnpacker_16+0x361>
cmp    $0x8,%r8d
jl     1461 <IntegerUnpacker_16+0x361>
mov    %r8d,%eax
nopl   0x0(%rax)
mov    %ebx,%ecx
shr    $0x1c,%ecx
mov    %cx,(%rsi)
mov    %ebx,%ecx
shr    $0x18,%ecx
and    $0xf,%ecx
mov    %cx,0x2(%rsi)
mov    %ebx,%ecx
shr    $0x14,%ecx
and    $0xf,%ecx
mov    %cx,0x4(%rsi)
mov    %ebx,%ecx
shr    $0x10,%ecx
and    $0xf,%ecx
mov    %cx,0x6(%rsi)
movzwl %bx,%ecx
mov    %ecx,%edx
shr    $0xc,%edx
mov    %dx,0x8(%rsi)
mov    %ecx,%edx
shr    $0x8,%edx
and    $0xf,%edx
mov    %dx,0xa(%rsi)
shr    $0x4,%ecx
and    $0xf,%ecx
mov    %cx,0xc(%rsi)
and    $0xf,%ebx
mov    %bx,0xe(%rsi)
add    $0x10,%rsi
mov    (%r10),%ebx
add    $0x4,%r10
lea    -0x8(%rax),%r8d
cmp    $0xf,%eax
mov    %r8d,%eax
ja     13f0 <IntegerUnpacker_16+0x2f0>
jmp    16be <IntegerUnpacker_16+0x5be>
cmp    $0x2,%r12d
jne    154d <IntegerUnpacker_16+0x44d>
cmp    $0x10,%r8d
jl     154d <IntegerUnpacker_16+0x44d>
mov    %r8d,%eax
mov    %ebx,%ecx
shr    $0x1e,%ecx
mov    %cx,(%rsi)
mov    %ebx,%ecx
shr    $0x1c,%ecx
and    $0x3,%ecx
mov    %cx,0x2(%rsi)
mov    %ebx,%ecx
shr    $0x1a,%ecx
and    $0x3,%ecx
mov    %cx,0x4(%rsi)
mov    %ebx,%ecx
shr    $0x18,%ecx
and    $0x3,%ecx
mov    %cx,0x6(%rsi)
mov    %ebx,%ecx
shr    $0x16,%ecx
and    $0x3,%ecx
mov    %cx,0x8(%rsi)
mov    %ebx,%ecx
shr    $0x14,%ecx
and    $0x3,%ecx
mov    %cx,0xa(%rsi)
mov    %ebx,%ecx
shr    $0x12,%ecx
and    $0x3,%ecx
mov    %cx,0xc(%rsi)
mov    %ebx,%ecx
shr    $0x10,%ecx
and    $0x3,%ecx
mov    %cx,0xe(%rsi)
movzwl %bx,%ecx
mov    %ecx,%edx
shr    $0xe,%edx
mov    %dx,0x10(%rsi)
mov    %ecx,%edx
shr    $0xc,%edx
and    $0x3,%edx
mov    %dx,0x12(%rsi)
mov    %ecx,%edx
shr    $0xa,%edx
and    $0x3,%edx
mov    %dx,0x14(%rsi)
mov    %ecx,%edx
shr    $0x8,%edx
and    $0x3,%edx
mov    %dx,0x16(%rsi)
mov    %ecx,%edx
shr    $0x6,%edx
and    $0x3,%edx
mov    %dx,0x18(%rsi)
mov    %ecx,%edx
shr    $0x4,%edx
and    $0x3,%edx
mov    %dx,0x1a(%rsi)
shr    $0x2,%ecx
and    $0x3,%ecx
mov    %cx,0x1c(%rsi)
and    $0x3,%ebx
mov    %bx,0x1e(%rsi)
add    $0x20,%rsi
mov    (%r10),%ebx
add    $0x4,%r10
lea    -0x10(%rax),%r8d
cmp    $0x1f,%eax
mov    %r8d,%eax
ja     1478 <IntegerUnpacker_16+0x378>
jmp    16be <IntegerUnpacker_16+0x5be>
cmp    $0x1,%r12d
jne    16be <IntegerUnpacker_16+0x5be>
cmp    $0x20,%r8d
jl     16be <IntegerUnpacker_16+0x5be>
movdqa 0xa97(%rip),%xmm0
movdqa 0xa9f(%rip),%xmm1
mov    %r8d,%ecx
mov    %ebx,%eax
shr    $0x1f,%eax
mov    %ax,(%rsi)
mov    %ebx,%eax
shr    $0x1e,%eax
and    $0x1,%eax
mov    %ax,0x2(%rsi)
mov    %ebx,%eax
shr    $0x1d,%eax
and    $0x1,%eax
mov    %ax,0x4(%rsi)
mov    %ebx,%eax
shr    $0x1c,%eax
and    $0x1,%eax
mov    %ax,0x6(%rsi)
mov    %ebx,%eax
shr    $0x1b,%eax
and    $0x1,%eax
mov    %ax,0x8(%rsi)
mov    %ebx,%eax
shr    $0x1a,%eax
and    $0x1,%eax
mov    %ax,0xa(%rsi)
mov    %ebx,%eax
shr    $0x19,%eax
and    $0x1,%eax
mov    %ax,0xc(%rsi)
mov    %ebx,%eax
shr    $0x18,%eax
and    $0x1,%eax
mov    %ax,0xe(%rsi)
mov    %ebx,%eax
shr    $0x17,%eax
and    $0x1,%eax
mov    %ax,0x10(%rsi)
mov    %ebx,%eax
shr    $0x16,%eax
and    $0x1,%eax
mov    %ax,0x12(%rsi)
mov    %ebx,%eax
shr    $0x15,%eax
and    $0x1,%eax
mov    %ax,0x14(%rsi)
mov    %ebx,%eax
shr    $0x14,%eax
and    $0x1,%eax
mov    %ax,0x16(%rsi)
mov    %ebx,%eax
shr    $0x13,%eax
and    $0x1,%eax
mov    %ax,0x18(%rsi)
mov    %ebx,%eax
shr    $0x12,%eax
and    $0x1,%eax
mov    %ax,0x1a(%rsi)
mov    %ebx,%eax
shr    $0x11,%eax
and    $0x1,%eax
mov    %ax,0x1c(%rsi)
mov    %ebx,%eax
shr    $0x10,%eax
and    $0x1,%eax
mov    %ax,0x1e(%rsi)
movzwl %bx,%eax
mov    %eax,%edx
shr    $0xf,%edx
mov    %dx,0x20(%rsi)
movd   %ebx,%xmm2
pshuflw $0x0,%xmm2,%xmm2
pshufd $0x0,%xmm2,%xmm2
pmulhuw %xmm0,%xmm2
pand   %xmm1,%xmm2
movdqu %xmm2,0x22(%rsi)
mov    %eax,%edx
shr    $0x6,%edx
and    $0x1,%edx
mov    %dx,0x32(%rsi)
mov    %eax,%edx
shr    $0x5,%edx
and    $0x1,%edx
mov    %dx,0x34(%rsi)
mov    %eax,%edx
shr    $0x4,%edx
and    $0x1,%edx
mov    %dx,0x36(%rsi)
mov    %eax,%edx
shr    $0x3,%edx
and    $0x1,%edx
mov    %dx,0x38(%rsi)
mov    %eax,%edx
shr    $0x2,%edx
and    $0x1,%edx
mov    %dx,0x3a(%rsi)
shr    %eax
and    $0x1,%eax
mov    %ax,0x3c(%rsi)
and    $0x1,%ebx
mov    %bx,0x3e(%rsi)
add    $0x40,%rsi
mov    (%r10),%ebx
add    $0x4,%r10
lea    -0x20(%rcx),%r8d
cmp    $0x3f,%ecx
mov    %r8d,%ecx
ja     1574 <IntegerUnpacker_16+0x474>
shl    $0x20,%rbx
mov    (%r10),%eax
or     %rbx,%rax
xor    %ecx,%ecx
test   %r9d,%r9d
cmovg  %r9d,%ecx
shl    %cl,%rax
cmp    $0x2,%r8d
jl     175c <IntegerUnpacker_16+0x65c>
mov    $0x20,%ebx
sub    %r9d,%ebx
add    $0x4,%r10
mov    $0x40,%r9d
sub    %r12d,%r9d
mov    %r12d,%r14d
lea    (%r12,%r12,1),%r11d
neg    %r11d
jmp    1711 <IntegerUnpacker_16+0x611>
nop
lea    -0x2(%r8),%ecx
lea    0x4(%rdi),%rsi
cmp    $0x3,%r8d
mov    %ecx,%r8d
jbe    1765 <IntegerUnpacker_16+0x665>
mov    %rsi,%rdi
add    %r11d,%ebx
mov    %rax,%rdx
mov    %r9d,%ecx
shr    %cl,%rdx
mov    %dx,(%rsi)
mov    %r14d,%ecx
shl    %cl,%rax
mov    %rax,%rdx
mov    %r9d,%ecx
shr    %cl,%rdx
mov    %dx,0x2(%rsi)
mov    %r14d,%ecx
shl    %cl,%rax
test   %ebx,%ebx
jg     1700 <IntegerUnpacker_16+0x600>
mov    %ebx,%ecx
neg    %cl
shr    %cl,%rax
mov    (%r10),%edx
add    $0x4,%r10
or     %rax,%rdx
shl    %cl,%rdx
add    $0x20,%ebx
mov    %rdx,%rax
jmp    1700 <IntegerUnpacker_16+0x600>
mov    %r8d,%ecx
test   %ecx,%ecx
jg     1770 <IntegerUnpacker_16+0x670>
jmp    177c <IntegerUnpacker_16+0x67c>
add    $0x4,%rdi
mov    %rdi,%rsi
test   %ecx,%ecx
jle    177c <IntegerUnpacker_16+0x67c>
neg    %r12b
mov    %r12d,%ecx
shr    %cl,%rax
mov    %ax,(%rsi)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @IntegerUnpacker_16(i8* %0, i8* %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32*
%14 = alloca i16*
%15 = alloca i64
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
store i8* %0, i8** %7
store i8* %1, i8** %8
store i32 %2, i32* %9
store i32 %3, i32* %10
store i32 %4, i32* %11
store i32 %5, i32* %12
%22 = load i8*, i8** %7
%23 = bitcast i8* %22 to i32*
store i32* %23, i32** %13
%24 = load i8*, i8** %8
%25 = bitcast i8* %24 to i16*
store i16* %25, i16** %14
store i32 0, i32* %21
%26 = load i32, i32* %9
%27 = icmp sgt i32 %26, 16
br i1 %27, label %32, label %28
28: ; preds = %6
%29 = load i32, i32* %10
%30 = load i32, i32* %9
%31 = icmp sgt i32 %29, %30
br i1 %31, label %32, label %33
32: ; preds = %28, %6
br label %842
33: ; preds = %28
%34 = load i32, i32* %12
%35 = sdiv i32 %34, 32
%36 = load i32*, i32** %13
%37 = sext i32 %35 to i64
%38 = getelementptr inbounds i32, i32* %36, i64 %37
store i32* %38, i32** %13
%39 = load i32, i32* %12
%40 = srem i32 %39, 32
%41 = sub nsw i32 32, %40
store i32 %41, i32* %20
%42 = load i32*, i32** %13
%43 = getelementptr inbounds i32, i32* %42, i32 1
store i32* %43, i32** %13
%44 = load i32, i32* %42
store i32 %44, i32* %16
%45 = load i32, i32* %9
%46 = icmp eq i32 %45, -1
br i1 %46, label %47, label %52
47: ; preds = %33
%48 = load i32, i32* %10
%49 = sub nsw i32 %48, 1
%50 = shl i32 1, %49
%51 = sub nsw i32 0, %50
store i32 %51, i32* %21
br label %52
52: ; preds = %47, %33
%53 = load i32, i32* %20
%54 = icmp eq i32 %53, 32
br i1 %54, label %55, label %721
55: ; preds = %52
%56 = load i32, i32* %9
%57 = icmp eq i32 %56, 16
br i1 %57, label %58, label %92
58: ; preds = %55
br label %59
59: ; preds = %62, %58
%60 = load i32, i32* %11
%61 = icmp sgt i32 %60, 3
br i1 %61, label %62, label %91
62: ; preds = %59
%63 = load i32, i32* %16
%64 = lshr i32 %63, 16
%65 = trunc i32 %64 to i16
%66 = load i16*, i16** %14
%67 = getelementptr inbounds i16, i16* %66, i32 1
store i16* %67, i16** %14
store i16 %65, i16* %66
%68 = load i32, i32* %16
%69 = and i32 %68, 65535
%70 = trunc i32 %69 to i16
%71 = load i16*, i16** %14
%72 = getelementptr inbounds i16, i16* %71, i32 1
store i16* %72, i16** %14
store i16 %70, i16* %71
%73 = load i32*, i32** %13
%74 = getelementptr inbounds i32, i32* %73, i32 1
store i32* %74, i32** %13
%75 = load i32, i32* %73
store i32 %75, i32* %16
%76 = load i32, i32* %16
%77 = lshr i32 %76, 16
%78 = trunc i32 %77 to i16
%79 = load i16*, i16** %14
%80 = getelementptr inbounds i16, i16* %79, i32 1
store i16* %80, i16** %14
store i16 %78, i16* %79
%81 = load i32, i32* %16
%82 = and i32 %81, 65535
%83 = trunc i32 %82 to i16
%84 = load i16*, i16** %14
%85 = getelementptr inbounds i16, i16* %84, i32 1
store i16* %85, i16** %14
store i16 %83, i16* %84
%86 = load i32*, i32** %13
%87 = getelementptr inbounds i32, i32* %86, i32 1
store i32* %87, i32** %13
%88 = load i32, i32* %86
store i32 %88, i32* %16
%89 = load i32, i32* %11
%90 = sub nsw i32 %89, 4
store i32 %90, i32* %11
br label %59
91: ; preds = %59
br label %92
92: ; preds = %91, %55
%93 = load i32, i32* %9
%94 = icmp eq i32 %93, 12
br i1 %94, label %95, label %165
95: ; preds = %92
br label %96
96: ; preds = %99, %95
%97 = load i32, i32* %11
%98 = icmp sgt i32 %97, 7
br i1 %98, label %99, label %164
99: ; preds = %96
%100 = load i32*, i32** %13
%101 = getelementptr inbounds i32, i32* %100, i32 1
store i32* %101, i32** %13
%102 = load i32, i32* %100
store i32 %102, i32* %18
%103 = load i32*, i32** %13
%104 = getelementptr inbounds i32, i32* %103, i32 1
store i32* %104, i32** %13
%105 = load i32, i32* %103
store i32 %105, i32* %19
%106 = load i32*, i32** %13
%107 = getelementptr inbounds i32, i32* %106, i32 1
store i32* %107, i32** %13
%108 = load i32, i32* %106
store i32 %108, i32* %17
%109 = load i32, i32* %16
%110 = lshr i32 %109, 20
%111 = trunc i32 %110 to i16
%112 = load i16*, i16** %14
%113 = getelementptr inbounds i16, i16* %112, i32 1
store i16* %113, i16** %14
store i16 %111, i16* %112
%114 = load i32, i32* %16
%115 = lshr i32 %114, 8
%116 = and i32 %115, 4095
%117 = trunc i32 %116 to i16
%118 = load i16*, i16** %14
%119 = getelementptr inbounds i16, i16* %118, i32 1
store i16* %119, i16** %14
store i16 %117, i16* %118
%120 = load i32, i32* %16
%121 = and i32 %120, 255
%122 = shl i32 %121, 4
%123 = load i32, i32* %18
%124 = lshr i32 %123, 28
%125 = or i32 %122, %124
%126 = trunc i32 %125 to i16
%127 = load i16*, i16** %14
%128 = getelementptr inbounds i16, i16* %127, i32 1
store i16* %128, i16** %14
store i16 %126, i16* %127
%129 = load i32, i32* %18
%130 = lshr i32 %129, 16
%131 = and i32 %130, 4095
%132 = trunc i32 %131 to i16
%133 = load i16*, i16** %14
%134 = getelementptr inbounds i16, i16* %133, i32 1
store i16* %134, i16** %14
store i16 %132, i16* %133
%135 = load i32, i32* %18
%136 = lshr i32 %135, 4
%137 = and i32 %136, 4095
%138 = trunc i32 %137 to i16
%139 = load i16*, i16** %14
%140 = getelementptr inbounds i16, i16* %139, i32 1
store i16* %140, i16** %14
store i16 %138, i16* %139
%141 = load i32, i32* %18
%142 = and i32 %141, 15
%143 = shl i32 %142, 8
%144 = load i32, i32* %19
%145 = lshr i32 %144, 24
%146 = or i32 %143, %145
%147 = trunc i32 %146 to i16
%148 = load i16*, i16** %14
%149 = getelementptr inbounds i16, i16* %148, i32 1
store i16* %149, i16** %14
store i16 %147, i16* %148
%150 = load i32, i32* %19
%151 = lshr i32 %150, 12
%152 = and i32 %151, 4095
%153 = trunc i32 %152 to i16
%154 = load i16*, i16** %14
%155 = getelementptr inbounds i16, i16* %154, i32 1
store i16* %155, i16** %14
store i16 %153, i16* %154
%156 = load i32, i32* %19
%157 = and i32 %156, 4095
%158 = trunc i32 %157 to i16
%159 = load i16*, i16** %14
%160 = getelementptr inbounds i16, i16* %159, i32 1
store i16* %160, i16** %14
store i16 %158, i16* %159
%161 = load i32, i32* %17
store i32 %161, i32* %16
%162 = load i32, i32* %11
%163 = sub nsw i32 %162, 8
store i32 %163, i32* %11
br label %96
164: ; preds = %96
br label %165
165: ; preds = %164, %92
%166 = load i32, i32* %9
%167 = icmp eq i32 %166, 8
br i1 %167, label %168, label %226
168: ; preds = %165
br label %169
169: ; preds = %172, %168
%170 = load i32, i32* %11
%171 = icmp sgt i32 %170, 7
br i1 %171, label %172, label %225
172: ; preds = %169
%173 = load i32, i32* %16
%174 = lshr i32 %173, 24
%175 = trunc i32 %174 to i16
%176 = load i16*, i16** %14
%177 = getelementptr inbounds i16, i16* %176, i32 1
store i16* %177, i16** %14
store i16 %175, i16* %176
%178 = load i32, i32* %16
%179 = lshr i32 %178, 16
%180 = and i32 %179, 255
%181 = trunc i32 %180 to i16
%182 = load i16*, i16** %14
%183 = getelementptr inbounds i16, i16* %182, i32 1
store i16* %183, i16** %14
store i16 %181, i16* %182
%184 = load i32, i32* %16
%185 = lshr i32 %184, 8
%186 = and i32 %185, 255
%187 = trunc i32 %186 to i16
%188 = load i16*, i16** %14
%189 = getelementptr inbounds i16, i16* %188, i32 1
store i16* %189, i16** %14
store i16 %187, i16* %188
%190 = load i32, i32* %16
%191 = and i32 %190, 255
%192 = trunc i32 %191 to i16
%193 = load i16*, i16** %14
%194 = getelementptr inbounds i16, i16* %193, i32 1
store i16* %194, i16** %14
store i16 %192, i16* %193
%195 = load i32*, i32** %13
%196 = getelementptr inbounds i32, i32* %195, i32 1
store i32* %196, i32** %13
%197 = load i32, i32* %195
store i32 %197, i32* %16
%198 = load i32, i32* %16
%199 = lshr i32 %198, 24
%200 = trunc i32 %199 to i16
%201 = load i16*, i16** %14
%202 = getelementptr inbounds i16, i16* %201, i32 1
store i16* %202, i16** %14
store i16 %200, i16* %201
%203 = load i32, i32* %16
%204 = lshr i32 %203, 16
%205 = and i32 %204, 255
%206 = trunc i32 %205 to i16
%207 = load i16*, i16** %14
%208 = getelementptr inbounds i16, i16* %207, i32 1
store i16* %208, i16** %14
store i16 %206, i16* %207
%209 = load i32, i32* %16
%210 = lshr i32 %209, 8
%211 = and i32 %210, 255
%212 = trunc i32 %211 to i16
%213 = load i16*, i16** %14
%214 = getelementptr inbounds i16, i16* %213, i32 1
store i16* %214, i16** %14
store i16 %212, i16* %213
%215 = load i32, i32* %16
%216 = and i32 %215, 255
%217 = trunc i32 %216 to i16
%218 = load i16*, i16** %14
%219 = getelementptr inbounds i16, i16* %218, i32 1
store i16* %219, i16** %14
store i16 %217, i16* %218
%220 = load i32*, i32** %13
%221 = getelementptr inbounds i32, i32* %220, i32 1
store i32* %221, i32** %13
%222 = load i32, i32* %220
store i32 %222, i32* %16
%223 = load i32, i32* %11
%224 = sub nsw i32 %223, 8
store i32 %224, i32* %11
br label %169
225: ; preds = %169
br label %226
226: ; preds = %225, %165
%227 = load i32, i32* %9
%228 = icmp eq i32 %227, 6
br i1 %228, label %229, label %347
229: ; preds = %226
br label %230
230: ; preds = %233, %229
%231 = load i32, i32* %11
%232 = icmp sgt i32 %231, 15
br i1 %232, label %233, label %346
233: ; preds = %230
%234 = load i32*, i32** %13
%235 = getelementptr inbounds i32, i32* %234, i32 1
store i32* %235, i32** %13
%236 = load i32, i32* %234
store i32 %236, i32* %18
%237 = load i32*, i32** %13
%238 = getelementptr inbounds i32, i32* %237, i32 1
store i32* %238, i32** %13
%239 = load i32, i32* %237
store i32 %239, i32* %19
%240 = load i32*, i32** %13
%241 = getelementptr inbounds i32, i32* %240, i32 1
store i32* %241, i32** %13
%242 = load i32, i32* %240
store i32 %242, i32* %17
%243 = load i32, i32* %16
%244 = lshr i32 %243, 26
%245 = trunc i32 %244 to i16
%246 = load i16*, i16** %14
%247 = getelementptr inbounds i16, i16* %246, i32 1
store i16* %247, i16** %14
store i16 %245, i16* %246
%248 = load i32, i32* %16
%249 = lshr i32 %248, 20
%250 = and i32 %249, 63
%251 = trunc i32 %250 to i16
%252 = load i16*, i16** %14
%253 = getelementptr inbounds i16, i16* %252, i32 1
store i16* %253, i16** %14
store i16 %251, i16* %252
%254 = load i32, i32* %16
%255 = lshr i32 %254, 14
%256 = and i32 %255, 63
%257 = trunc i32 %256 to i16
%258 = load i16*, i16** %14
%259 = getelementptr inbounds i16, i16* %258, i32 1
store i16* %259, i16** %14
store i16 %257, i16* %258
%260 = load i32, i32* %16
%261 = lshr i32 %260, 8
%262 = and i32 %261, 63
%263 = trunc i32 %262 to i16
%264 = load i16*, i16** %14
%265 = getelementptr inbounds i16, i16* %264, i32 1
store i16* %265, i16** %14
store i16 %263, i16* %264
%266 = load i32, i32* %16
%267 = lshr i32 %266, 2
%268 = and i32 %267, 63
%269 = trunc i32 %268 to i16
%270 = load i16*, i16** %14
%271 = getelementptr inbounds i16, i16* %270, i32 1
store i16* %271, i16** %14
store i16 %269, i16* %270
%272 = load i32, i32* %16
%273 = and i32 %272, 3
%274 = shl i32 %273, 4
%275 = load i32, i32* %18
%276 = lshr i32 %275, 28
%277 = or i32 %274, %276
%278 = trunc i32 %277 to i16
%279 = load i16*, i16** %14
%280 = getelementptr inbounds i16, i16* %279, i32 1
store i16* %280, i16** %14
store i16 %278, i16* %279
%281 = load i32, i32* %18
%282 = lshr i32 %281, 22
%283 = and i32 %282, 63
%284 = trunc i32 %283 to i16
%285 = load i16*, i16** %14
%286 = getelementptr inbounds i16, i16* %285, i32 1
store i16* %286, i16** %14
store i16 %284, i16* %285
%287 = load i32, i32* %18
%288 = lshr i32 %287, 16
%289 = and i32 %288, 63
%290 = trunc i32 %289 to i16
%291 = load i16*, i16** %14
%292 = getelementptr inbounds i16, i16* %291, i32 1
store i16* %292, i16** %14
store i16 %290, i16* %291
%293 = load i32, i32* %18
%294 = lshr i32 %293, 10
%295 = and i32 %294, 63
%296 = trunc i32 %295 to i16
%297 = load i16*, i16** %14
%298 = getelementptr inbounds i16, i16* %297, i32 1
store i16* %298, i16** %14
store i16 %296, i16* %297
%299 = load i32, i32* %18
%300 = lshr i32 %299, 4
%301 = and i32 %300, 63
%302 = trunc i32 %301 to i16
%303 = load i16*, i16** %14
%304 = getelementptr inbounds i16, i16* %303, i32 1
store i16* %304, i16** %14
store i16 %302, i16* %303
%305 = load i32, i32* %18
%306 = and i32 %305, 15
%307 = shl i32 %306, 2
%308 = load i32, i32* %19
%309 = lshr i32 %308, 30
%310 = or i32 %307, %309
%311 = trunc i32 %310 to i16
%312 = load i16*, i16** %14
%313 = getelementptr inbounds i16, i16* %312, i32 1
store i16* %313, i16** %14
store i16 %311, i16* %312
%314 = load i32, i32* %19
%315 = lshr i32 %314, 24
%316 = and i32 %315, 63
%317 = trunc i32 %316 to i16
%318 = load i16*, i16** %14
%319 = getelementptr inbounds i16, i16* %318, i32 1
store i16* %319, i16** %14
store i16 %317, i16* %318
%320 = load i32, i32* %19
%321 = lshr i32 %320, 18
%322 = and i32 %321, 63
%323 = trunc i32 %322 to i16
%324 = load i16*, i16** %14
%325 = getelementptr inbounds i16, i16* %324, i32 1
store i16* %325, i16** %14
store i16 %323, i16* %324
%326 = load i32, i32* %19
%327 = lshr i32 %326, 12
%328 = and i32 %327, 63
%329 = trunc i32 %328 to i16
%330 = load i16*, i16** %14
%331 = getelementptr inbounds i16, i16* %330, i32 1
store i16* %331, i16** %14
store i16 %329, i16* %330
%332 = load i32, i32* %19
%333 = lshr i32 %332, 6
%334 = and i32 %333, 63
%335 = trunc i32 %334 to i16
%336 = load i16*, i16** %14
%337 = getelementptr inbounds i16, i16* %336, i32 1
store i16* %337, i16** %14
store i16 %335, i16* %336
%338 = load i32, i32* %19
%339 = and i32 %338, 63
%340 = trunc i32 %339 to i16
%341 = load i16*, i16** %14
%342 = getelementptr inbounds i16, i16* %341, i32 1
store i16* %342, i16** %14
store i16 %340, i16* %341
%343 = load i32, i32* %17
store i32 %343, i32* %16
%344 = load i32, i32* %11
%345 = sub nsw i32 %344, 16
store i32 %345, i32* %11
br label %230
346: ; preds = %230
br label %347
347: ; preds = %346, %226
%348 = load i32, i32* %9
%349 = icmp eq i32 %348, 4
br i1 %349, label %350, label %407
350: ; preds = %347
br label %351
351: ; preds = %354, %350
%352 = load i32, i32* %11
%353 = icmp sgt i32 %352, 7
br i1 %353, label %354, label %406
354: ; preds = %351
%355 = load i32, i32* %16
%356 = lshr i32 %355, 28
%357 = trunc i32 %356 to i16
%358 = load i16*, i16** %14
%359 = getelementptr inbounds i16, i16* %358, i32 1
store i16* %359, i16** %14
store i16 %357, i16* %358
%360 = load i32, i32* %16
%361 = lshr i32 %360, 24
%362 = and i32 %361, 15
%363 = trunc i32 %362 to i16
%364 = load i16*, i16** %14
%365 = getelementptr inbounds i16, i16* %364, i32 1
store i16* %365, i16** %14
store i16 %363, i16* %364
%366 = load i32, i32* %16
%367 = lshr i32 %366, 20
%368 = and i32 %367, 15
%369 = trunc i32 %368 to i16
%370 = load i16*, i16** %14
%371 = getelementptr inbounds i16, i16* %370, i32 1
store i16* %371, i16** %14
store i16 %369, i16* %370
%372 = load i32, i32* %16
%373 = lshr i32 %372, 16
%374 = and i32 %373, 15
%375 = trunc i32 %374 to i16
%376 = load i16*, i16** %14
%377 = getelementptr inbounds i16, i16* %376, i32 1
store i16* %377, i16** %14
store i16 %375, i16* %376
%378 = load i32, i32* %16
%379 = lshr i32 %378, 12
%380 = and i32 %379, 15
%381 = trunc i32 %380 to i16
%382 = load i16*, i16** %14
%383 = getelementptr inbounds i16, i16* %382, i32 1
store i16* %383, i16** %14
store i16 %381, i16* %382
%384 = load i32, i32* %16
%385 = lshr i32 %384, 8
%386 = and i32 %385, 15
%387 = trunc i32 %386 to i16
%388 = load i16*, i16** %14
%389 = getelementptr inbounds i16, i16* %388, i32 1
store i16* %389, i16** %14
store i16 %387, i16* %388
%390 = load i32, i32* %16
%391 = lshr i32 %390, 4
%392 = and i32 %391, 15
%393 = trunc i32 %392 to i16
%394 = load i16*, i16** %14
%395 = getelementptr inbounds i16, i16* %394, i32 1
store i16* %395, i16** %14
store i16 %393, i16* %394
%396 = load i32, i32* %16
%397 = and i32 %396, 15
%398 = trunc i32 %397 to i16
%399 = load i16*, i16** %14
%400 = getelementptr inbounds i16, i16* %399, i32 1
store i16* %400, i16** %14
store i16 %398, i16* %399
%401 = load i32*, i32** %13
%402 = getelementptr inbounds i32, i32* %401, i32 1
store i32* %402, i32** %13
%403 = load i32, i32* %401
store i32 %403, i32* %16
%404 = load i32, i32* %11
%405 = sub nsw i32 %404, 8
store i32 %405, i32* %11
br label %351
406: ; preds = %351
br label %407
407: ; preds = %406, %347
%408 = load i32, i32* %9
%409 = icmp eq i32 %408, 2
br i1 %409, label %410, label %515
410: ; preds = %407
br label %411
411: ; preds = %414, %410
%412 = load i32, i32* %11
%413 = icmp sgt i32 %412, 15
br i1 %413, label %414, label %514
414: ; preds = %411
%415 = load i32, i32* %16
%416 = lshr i32 %415, 30
%417 = trunc i32 %416 to i16
%418 = load i16*, i16** %14
%419 = getelementptr inbounds i16, i16* %418, i32 1
store i16* %419, i16** %14
store i16 %417, i16* %418
%420 = load i32, i32* %16
%421 = lshr i32 %420, 28
%422 = and i32 %421, 3
%423 = trunc i32 %422 to i16
%424 = load i16*, i16** %14
%425 = getelementptr inbounds i16, i16* %424, i32 1
store i16* %425, i16** %14
store i16 %423, i16* %424
%426 = load i32, i32* %16
%427 = lshr i32 %426, 26
%428 = and i32 %427, 3
%429 = trunc i32 %428 to i16
%430 = load i16*, i16** %14
%431 = getelementptr inbounds i16, i16* %430, i32 1
store i16* %431, i16** %14
store i16 %429, i16* %430
%432 = load i32, i32* %16
%433 = lshr i32 %432, 24
%434 = and i32 %433, 3
%435 = trunc i32 %434 to i16
%436 = load i16*, i16** %14
%437 = getelementptr inbounds i16, i16* %436, i32 1
store i16* %437, i16** %14
store i16 %435, i16* %436
%438 = load i32, i32* %16
%439 = lshr i32 %438, 22
%440 = and i32 %439, 3
%441 = trunc i32 %440 to i16
%442 = load i16*, i16** %14
%443 = getelementptr inbounds i16, i16* %442, i32 1
store i16* %443, i16** %14
store i16 %441, i16* %442
%444 = load i32, i32* %16
%445 = lshr i32 %444, 20
%446 = and i32 %445, 3
%447 = trunc i32 %446 to i16
%448 = load i16*, i16** %14
%449 = getelementptr inbounds i16, i16* %448, i32 1
store i16* %449, i16** %14
store i16 %447, i16* %448
%450 = load i32, i32* %16
%451 = lshr i32 %450, 18
%452 = and i32 %451, 3
%453 = trunc i32 %452 to i16
%454 = load i16*, i16** %14
%455 = getelementptr inbounds i16, i16* %454, i32 1
store i16* %455, i16** %14
store i16 %453, i16* %454
%456 = load i32, i32* %16
%457 = lshr i32 %456, 16
%458 = and i32 %457, 3
%459 = trunc i32 %458 to i16
%460 = load i16*, i16** %14
%461 = getelementptr inbounds i16, i16* %460, i32 1
store i16* %461, i16** %14
store i16 %459, i16* %460
%462 = load i32, i32* %16
%463 = lshr i32 %462, 14
%464 = and i32 %463, 3
%465 = trunc i32 %464 to i16
%466 = load i16*, i16** %14
%467 = getelementptr inbounds i16, i16* %466, i32 1
store i16* %467, i16** %14
store i16 %465, i16* %466
%468 = load i32, i32* %16
%469 = lshr i32 %468, 12
%470 = and i32 %469, 3
%471 = trunc i32 %470 to i16
%472 = load i16*, i16** %14
%473 = getelementptr inbounds i16, i16* %472, i32 1
store i16* %473, i16** %14
store i16 %471, i16* %472
%474 = load i32, i32* %16
%475 = lshr i32 %474, 10
%476 = and i32 %475, 3
%477 = trunc i32 %476 to i16
%478 = load i16*, i16** %14
%479 = getelementptr inbounds i16, i16* %478, i32 1
store i16* %479, i16** %14
store i16 %477, i16* %478
%480 = load i32, i32* %16
%481 = lshr i32 %480, 8
%482 = and i32 %481, 3
%483 = trunc i32 %482 to i16
%484 = load i16*, i16** %14
%485 = getelementptr inbounds i16, i16* %484, i32 1
store i16* %485, i16** %14
store i16 %483, i16* %484
%486 = load i32, i32* %16
%487 = lshr i32 %486, 6
%488 = and i32 %487, 3
%489 = trunc i32 %488 to i16
%490 = load i16*, i16** %14
%491 = getelementptr inbounds i16, i16* %490, i32 1
store i16* %491, i16** %14
store i16 %489, i16* %490
%492 = load i32, i32* %16
%493 = lshr i32 %492, 4
%494 = and i32 %493, 3
%495 = trunc i32 %494 to i16
%496 = load i16*, i16** %14
%497 = getelementptr inbounds i16, i16* %496, i32 1
store i16* %497, i16** %14
store i16 %495, i16* %496
%498 = load i32, i32* %16
%499 = lshr i32 %498, 2
%500 = and i32 %499, 3
%501 = trunc i32 %500 to i16
%502 = load i16*, i16** %14
%503 = getelementptr inbounds i16, i16* %502, i32 1
store i16* %503, i16** %14
store i16 %501, i16* %502
%504 = load i32, i32* %16
%505 = and i32 %504, 3
%506 = trunc i32 %505 to i16
%507 = load i16*, i16** %14
%508 = getelementptr inbounds i16, i16* %507, i32 1
store i16* %508, i16** %14
store i16 %506, i16* %507
%509 = load i32*, i32** %13
%510 = getelementptr inbounds i32, i32* %509, i32 1
store i32* %510, i32** %13
%511 = load i32, i32* %509
store i32 %511, i32* %16
%512 = load i32, i32* %11
%513 = sub nsw i32 %512, 16
store i32 %513, i32* %11
br label %411
514: ; preds = %411
br label %515
515: ; preds = %514, %407
%516 = load i32, i32* %9
%517 = icmp eq i32 %516, 1
br i1 %517, label %518, label %720
518: ; preds = %515
br label %519
519: ; preds = %522, %518
%520 = load i32, i32* %11
%521 = icmp sgt i32 %520, 31
br i1 %521, label %522, label %719
522: ; preds = %519
%523 = load i32, i32* %16
%524 = lshr i32 %523, 31
%525 = and i32 %524, 1
%526 = trunc i32 %525 to i16
%527 = load i16*, i16** %14
%528 = getelementptr inbounds i16, i16* %527, i32 1
store i16* %528, i16** %14
store i16 %526, i16* %527
%529 = load i32, i32* %16
%530 = lshr i32 %529, 30
%531 = and i32 %530, 1
%532 = trunc i32 %531 to i16
%533 = load i16*, i16** %14
%534 = getelementptr inbounds i16, i16* %533, i32 1
store i16* %534, i16** %14
store i16 %532, i16* %533
%535 = load i32, i32* %16
%536 = lshr i32 %535, 29
%537 = and i32 %536, 1
%538 = trunc i32 %537 to i16
%539 = load i16*, i16** %14
%540 = getelementptr inbounds i16, i16* %539, i32 1
store i16* %540, i16** %14
store i16 %538, i16* %539
%541 = load i32, i32* %16
%542 = lshr i32 %541, 28
%543 = and i32 %542, 1
%544 = trunc i32 %543 to i16
%545 = load i16*, i16** %14
%546 = getelementptr inbounds i16, i16* %545, i32 1
store i16* %546, i16** %14
store i16 %544, i16* %545
%547 = load i32, i32* %16
%548 = lshr i32 %547, 27
%549 = and i32 %548, 1
%550 = trunc i32 %549 to i16
%551 = load i16*, i16** %14
%552 = getelementptr inbounds i16, i16* %551, i32 1
store i16* %552, i16** %14
store i16 %550, i16* %551
%553 = load i32, i32* %16
%554 = lshr i32 %553, 26
%555 = and i32 %554, 1
%556 = trunc i32 %555 to i16
%557 = load i16*, i16** %14
%558 = getelementptr inbounds i16, i16* %557, i32 1
store i16* %558, i16** %14
store i16 %556, i16* %557
%559 = load i32, i32* %16
%560 = lshr i32 %559, 25
%561 = and i32 %560, 1
%562 = trunc i32 %561 to i16
%563 = load i16*, i16** %14
%564 = getelementptr inbounds i16, i16* %563, i32 1
store i16* %564, i16** %14
store i16 %562, i16* %563
%565 = load i32, i32* %16
%566 = lshr i32 %565, 24
%567 = and i32 %566, 1
%568 = trunc i32 %567 to i16
%569 = load i16*, i16** %14
%570 = getelementptr inbounds i16, i16* %569, i32 1
store i16* %570, i16** %14
store i16 %568, i16* %569
%571 = load i32, i32* %16
%572 = lshr i32 %571, 23
%573 = and i32 %572, 1
%574 = trunc i32 %573 to i16
%575 = load i16*, i16** %14
%576 = getelementptr inbounds i16, i16* %575, i32 1
store i16* %576, i16** %14
store i16 %574, i16* %575
%577 = load i32, i32* %16
%578 = lshr i32 %577, 22
%579 = and i32 %578, 1
%580 = trunc i32 %579 to i16
%581 = load i16*, i16** %14
%582 = getelementptr inbounds i16, i16* %581, i32 1
store i16* %582, i16** %14
store i16 %580, i16* %581
%583 = load i32, i32* %16
%584 = lshr i32 %583, 21
%585 = and i32 %584, 1
%586 = trunc i32 %585 to i16
%587 = load i16*, i16** %14
%588 = getelementptr inbounds i16, i16* %587, i32 1
store i16* %588, i16** %14
store i16 %586, i16* %587
%589 = load i32, i32* %16
%590 = lshr i32 %589, 20
%591 = and i32 %590, 1
%592 = trunc i32 %591 to i16
%593 = load i16*, i16** %14
%594 = getelementptr inbounds i16, i16* %593, i32 1
store i16* %594, i16** %14
store i16 %592, i16* %593
%595 = load i32, i32* %16
%596 = lshr i32 %595, 19
%597 = and i32 %596, 1
%598 = trunc i32 %597 to i16
%599 = load i16*, i16** %14
%600 = getelementptr inbounds i16, i16* %599, i32 1
store i16* %600, i16** %14
store i16 %598, i16* %599
%601 = load i32, i32* %16
%602 = lshr i32 %601, 18
%603 = and i32 %602, 1
%604 = trunc i32 %603 to i16
%605 = load i16*, i16** %14
%606 = getelementptr inbounds i16, i16* %605, i32 1
store i16* %606, i16** %14
store i16 %604, i16* %605
%607 = load i32, i32* %16
%608 = lshr i32 %607, 17
%609 = and i32 %608, 1
%610 = trunc i32 %609 to i16
%611 = load i16*, i16** %14
%612 = getelementptr inbounds i16, i16* %611, i32 1
store i16* %612, i16** %14
store i16 %610, i16* %611
%613 = load i32, i32* %16
%614 = lshr i32 %613, 16
%615 = and i32 %614, 1
%616 = trunc i32 %615 to i16
%617 = load i16*, i16** %14
%618 = getelementptr inbounds i16, i16* %617, i32 1
store i16* %618, i16** %14
store i16 %616, i16* %617
%619 = load i32, i32* %16
%620 = lshr i32 %619, 15
%621 = and i32 %620, 1
%622 = trunc i32 %621 to i16
%623 = load i16*, i16** %14
%624 = getelementptr inbounds i16, i16* %623, i32 1
store i16* %624, i16** %14
store i16 %622, i16* %623
%625 = load i32, i32* %16
%626 = lshr i32 %625, 14
%627 = and i32 %626, 1
%628 = trunc i32 %627 to i16
%629 = load i16*, i16** %14
%630 = getelementptr inbounds i16, i16* %629, i32 1
store i16* %630, i16** %14
store i16 %628, i16* %629
%631 = load i32, i32* %16
%632 = lshr i32 %631, 13
%633 = and i32 %632, 1
%634 = trunc i32 %633 to i16
%635 = load i16*, i16** %14
%636 = getelementptr inbounds i16, i16* %635, i32 1
store i16* %636, i16** %14
store i16 %634, i16* %635
%637 = load i32, i32* %16
%638 = lshr i32 %637, 12
%639 = and i32 %638, 1
%640 = trunc i32 %639 to i16
%641 = load i16*, i16** %14
%642 = getelementptr inbounds i16, i16* %641, i32 1
store i16* %642, i16** %14
store i16 %640, i16* %641
%643 = load i32, i32* %16
%644 = lshr i32 %643, 11
%645 = and i32 %644, 1
%646 = trunc i32 %645 to i16
%647 = load i16*, i16** %14
%648 = getelementptr inbounds i16, i16* %647, i32 1
store i16* %648, i16** %14
store i16 %646, i16* %647
%649 = load i32, i32* %16
%650 = lshr i32 %649, 10
%651 = and i32 %650, 1
%652 = trunc i32 %651 to i16
%653 = load i16*, i16** %14
%654 = getelementptr inbounds i16, i16* %653, i32 1
store i16* %654, i16** %14
store i16 %652, i16* %653
%655 = load i32, i32* %16
%656 = lshr i32 %655, 9
%657 = and i32 %656, 1
%658 = trunc i32 %657 to i16
%659 = load i16*, i16** %14
%660 = getelementptr inbounds i16, i16* %659, i32 1
store i16* %660, i16** %14
store i16 %658, i16* %659
%661 = load i32, i32* %16
%662 = lshr i32 %661, 8
%663 = and i32 %662, 1
%664 = trunc i32 %663 to i16
%665 = load i16*, i16** %14
%666 = getelementptr inbounds i16, i16* %665, i32 1
store i16* %666, i16** %14
store i16 %664, i16* %665
%667 = load i32, i32* %16
%668 = lshr i32 %667, 7
%669 = and i32 %668, 1
%670 = trunc i32 %669 to i16
%671 = load i16*, i16** %14
%672 = getelementptr inbounds i16, i16* %671, i32 1
store i16* %672, i16** %14
store i16 %670, i16* %671
%673 = load i32, i32* %16
%674 = lshr i32 %673, 6
%675 = and i32 %674, 1
%676 = trunc i32 %675 to i16
%677 = load i16*, i16** %14
%678 = getelementptr inbounds i16, i16* %677, i32 1
store i16* %678, i16** %14
store i16 %676, i16* %677
%679 = load i32, i32* %16
%680 = lshr i32 %679, 5
%681 = and i32 %680, 1
%682 = trunc i32 %681 to i16
%683 = load i16*, i16** %14
%684 = getelementptr inbounds i16, i16* %683, i32 1
store i16* %684, i16** %14
store i16 %682, i16* %683
%685 = load i32, i32* %16
%686 = lshr i32 %685, 4
%687 = and i32 %686, 1
%688 = trunc i32 %687 to i16
%689 = load i16*, i16** %14
%690 = getelementptr inbounds i16, i16* %689, i32 1
store i16* %690, i16** %14
store i16 %688, i16* %689
%691 = load i32, i32* %16
%692 = lshr i32 %691, 3
%693 = and i32 %692, 1
%694 = trunc i32 %693 to i16
%695 = load i16*, i16** %14
%696 = getelementptr inbounds i16, i16* %695, i32 1
store i16* %696, i16** %14
store i16 %694, i16* %695
%697 = load i32, i32* %16
%698 = lshr i32 %697, 2
%699 = and i32 %698, 1
%700 = trunc i32 %699 to i16
%701 = load i16*, i16** %14
%702 = getelementptr inbounds i16, i16* %701, i32 1
store i16* %702, i16** %14
store i16 %700, i16* %701
%703 = load i32, i32* %16
%704 = lshr i32 %703, 1
%705 = and i32 %704, 1
%706 = trunc i32 %705 to i16
%707 = load i16*, i16** %14
%708 = getelementptr inbounds i16, i16* %707, i32 1
store i16* %708, i16** %14
store i16 %706, i16* %707
%709 = load i32, i32* %16
%710 = and i32 %709, 1
%711 = trunc i32 %710 to i16
%712 = load i16*, i16** %14
%713 = getelementptr inbounds i16, i16* %712, i32 1
store i16* %713, i16** %14
store i16 %711, i16* %712
%714 = load i32*, i32** %13
%715 = getelementptr inbounds i32, i32* %714, i32 1
store i32* %715, i32** %13
%716 = load i32, i32* %714
store i32 %716, i32* %16
%717 = load i32, i32* %11
%718 = sub nsw i32 %717, 32
store i32 %718, i32* %11
br label %519
719: ; preds = %519
br label %720
720: ; preds = %719, %515
br label %721
721: ; preds = %720, %52
%722 = load i32, i32* %16
%723 = zext i32 %722 to i64
store i64 %723, i64* %15
%724 = load i64, i64* %15
%725 = shl i64 %724, 32
store i64 %725, i64* %15
%726 = load i32*, i32** %13
%727 = getelementptr inbounds i32, i32* %726, i32 1
store i32* %727, i32** %13
%728 = load i32, i32* %726
%729 = zext i32 %728 to i64
%730 = load i64, i64* %15
%731 = or i64 %730, %729
store i64 %731, i64* %15
%732 = load i32, i32* %20
%733 = icmp slt i32 %732, 32
br i1 %733, label %734, label %740
734: ; preds = %721
%735 = load i32, i32* %20
%736 = sub nsw i32 32, %735
%737 = load i64, i64* %15
%738 = zext i32 %736 to i64
%739 = shl i64 %737, %738
store i64 %739, i64* %15
br label %740
740: ; preds = %734, %721
br label %741
741: ; preds = %796, %740
%742 = load i32, i32* %11
%743 = icmp sgt i32 %742, 1
br i1 %743, label %744, label %799
744: ; preds = %741
%745 = load i64, i64* %15
%746 = load i32, i32* %9
%747 = sub nsw i32 64, %746
%748 = zext i32 %747 to i64
%749 = lshr i64 %745, %748
%750 = trunc i64 %749 to i16
%751 = load i16*, i16** %14
%752 = getelementptr inbounds i16, i16* %751, i32 1
store i16* %752, i16** %14
store i16 %750, i16* %751
%753 = load i32, i32* %9
%754 = load i64, i64* %15
%755 = zext i32 %753 to i64
%756 = shl i64 %754, %755
store i64 %756, i64* %15
%757 = load i32, i32* %9
%758 = load i32, i32* %20
%759 = sub nsw i32 %758, %757
store i32 %759, i32* %20
%760 = load i64, i64* %15
%761 = load i32, i32* %9
%762 = sub nsw i32 64, %761
%763 = zext i32 %762 to i64
%764 = lshr i64 %760, %763
%765 = trunc i64 %764 to i16
%766 = load i16*, i16** %14
%767 = getelementptr inbounds i16, i16* %766, i32 1
store i16* %767, i16** %14
store i16 %765, i16* %766
%768 = load i32, i32* %9
%769 = load i64, i64* %15
%770 = zext i32 %768 to i64
%771 = shl i64 %769, %770
store i64 %771, i64* %15
%772 = load i32, i32* %9
%773 = load i32, i32* %20
%774 = sub nsw i32 %773, %772
store i32 %774, i32* %20
%775 = load i32, i32* %20
%776 = icmp sle i32 %775, 0
br i1 %776, label %777, label %796
777: ; preds = %744
%778 = load i64, i64* %15
%779 = load i32, i32* %20
%780 = sub nsw i32 0, %779
%781 = zext i32 %780 to i64
%782 = lshr i64 %778, %781
store i64 %782, i64* %15
%783 = load i32*, i32** %13
%784 = getelementptr inbounds i32, i32* %783, i32 1
store i32* %784, i32** %13
%785 = load i32, i32* %783
%786 = zext i32 %785 to i64
%787 = load i64, i64* %15
%788 = or i64 %787, %786
store i64 %788, i64* %15
%789 = load i32, i32* %20
%790 = sub nsw i32 0, %789
%791 = load i64, i64* %15
%792 = zext i32 %790 to i64
%793 = shl i64 %791, %792
store i64 %793, i64* %15
%794 = load i32, i32* %20
%795 = add nsw i32 %794, 32
store i32 %795, i32* %20
br label %796
796: ; preds = %777, %744
%797 = load i32, i32* %11
%798 = sub nsw i32 %797, 2
store i32 %798, i32* %11
br label %741
799: ; preds = %741
br label %800
800: ; preds = %841, %799
%801 = load i32, i32* %11
%802 = add nsw i32 %801, -1
store i32 %802, i32* %11
%803 = icmp sgt i32 %801, 0
br i1 %803, label %804, label %842
804: ; preds = %800
%805 = load i64, i64* %15
%806 = load i32, i32* %9
%807 = sub nsw i32 64, %806
%808 = zext i32 %807 to i64
%809 = lshr i64 %805, %808
%810 = trunc i64 %809 to i16
%811 = load i16*, i16** %14
%812 = getelementptr inbounds i16, i16* %811, i32 1
store i16* %812, i16** %14
store i16 %810, i16* %811
%813 = load i32, i32* %9
%814 = load i64, i64* %15
%815 = zext i32 %813 to i64
%816 = shl i64 %814, %815
store i64 %816, i64* %15
%817 = load i32, i32* %9
%818 = load i32, i32* %20
%819 = sub nsw i32 %818, %817
store i32 %819, i32* %20
%820 = load i32, i32* %20
%821 = icmp sle i32 %820, 0
br i1 %821, label %822, label %841
822: ; preds = %804
%823 = load i64, i64* %15
%824 = load i32, i32* %20
%825 = sub nsw i32 0, %824
%826 = zext i32 %825 to i64
%827 = lshr i64 %823, %826
store i64 %827, i64* %15
%828 = load i32*, i32** %13
%829 = getelementptr inbounds i32, i32* %828, i32 1
store i32* %829, i32** %13
%830 = load i32, i32* %828
%831 = zext i32 %830 to i64
%832 = load i64, i64* %15
%833 = or i64 %832, %831
store i64 %833, i64* %15
%834 = load i32, i32* %20
%835 = sub nsw i32 0, %834
%836 = load i64, i64* %15
%837 = zext i32 %835 to i64
%838 = shl i64 %836, %837
store i64 %838, i64* %15
%839 = load i32, i32* %20
%840 = add nsw i32 %839, 32
store i32 %840, i32* %20
br label %841
841: ; preds = %822, %804
br label %800
842: ; preds = %32, %800
ret void
}

LLVM IR (-O2):
define void @IntegerUnpacker_16(i8* nocapture %0, i8* writeonly %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = bitcast i8* %1 to i16*
%8 = icmp sgt i32 %2, 16
%9 = icmp sgt i32 %3, %2
%10 = or i1 %8, %9
br i1 %10, label %491, label %11
11: ; preds = %6
%12 = bitcast i8* %0 to i32*
%13 = sdiv i32 %5, 32
%14 = sext i32 %13 to i64
%15 = getelementptr inbounds i32, i32* %12, i64 %14
%16 = srem i32 %5, 32
%17 = sub nsw i32 32, %16
%18 = getelementptr inbounds i32, i32* %15, i64 1
%19 = load i32, i32* %15
%20 = icmp eq i32 %16, 0
br i1 %20, label %21, label %428
21: ; preds = %11
%22 = icmp eq i32 %2, 16
%23 = icmp sgt i32 %4, 3
%24 = and i1 %22, %23
br i1 %24, label %25, label %46
25: ; preds = %21, %25
%26 = phi i32 [ %44, %25 ], [ %4, %21 ]
%27 = phi i32* [ %42, %25 ], [ %18, %21 ]
%28 = phi i16* [ %41, %25 ], [ %7, %21 ]
%29 = phi i32 [ %43, %25 ], [ %19, %21 ]
%30 = lshr i32 %29, 16
%31 = trunc i32 %30 to i16
%32 = getelementptr inbounds i16, i16* %28, i64 1
store i16 %31, i16* %28
%33 = trunc i32 %29 to i16
%34 = getelementptr inbounds i16, i16* %28, i64 2
store i16 %33, i16* %32
%35 = getelementptr inbounds i32, i32* %27, i64 1
%36 = load i32, i32* %27
%37 = lshr i32 %36, 16
%38 = trunc i32 %37 to i16
%39 = getelementptr inbounds i16, i16* %28, i64 3
store i16 %38, i16* %34
%40 = trunc i32 %36 to i16
%41 = getelementptr inbounds i16, i16* %28, i64 4
store i16 %40, i16* %39
%42 = getelementptr inbounds i32, i32* %27, i64 2
%43 = load i32, i32* %35
%44 = add nsw i32 %26, -4
%45 = icmp ugt i32 %26, 7
br i1 %45, label %25, label %428
46: ; preds = %21
%47 = icmp eq i32 %2, 12
%48 = icmp sgt i32 %4, 7
%49 = and i1 %47, %48
br i1 %49, label %50, label %96
50: ; preds = %46, %50
%51 = phi i32 [ %94, %50 ], [ %4, %46 ]
%52 = phi i32* [ %59, %50 ], [ %18, %46 ]
%53 = phi i16* [ %93, %50 ], [ %7, %46 ]
%54 = phi i32 [ %60, %50 ], [ %19, %46 ]
%55 = getelementptr inbounds i32, i32* %52, i64 1
%56 = load i32, i32* %52
%57 = getelementptr inbounds i32, i32* %52, i64 2
%58 = load i32, i32* %55
%59 = getelementptr inbounds i32, i32* %52, i64 3
%60 = load i32, i32* %57
%61 = lshr i32 %54, 20
%62 = trunc i32 %61 to i16
%63 = getelementptr inbounds i16, i16* %53, i64 1
store i16 %62, i16* %53
%64 = lshr i32 %54, 8
%65 = trunc i32 %64 to i16
%66 = and i16 %65, 4095
%67 = getelementptr inbounds i16, i16* %53, i64 2
store i16 %66, i16* %63
%68 = shl i32 %54, 4
%69 = and i32 %68, 4080
%70 = lshr i32 %56, 28
%71 = or i32 %69, %70
%72 = trunc i32 %71 to i16
%73 = getelementptr inbounds i16, i16* %53, i64 3
store i16 %72, i16* %67
%74 = lshr i32 %56, 16
%75 = trunc i32 %74 to i16
%76 = and i16 %75, 4095
%77 = getelementptr inbounds i16, i16* %53, i64 4
store i16 %76, i16* %73
%78 = trunc i32 %56 to i16
%79 = lshr i16 %78, 4
%80 = getelementptr inbounds i16, i16* %53, i64 5
store i16 %79, i16* %77
%81 = shl i32 %56, 8
%82 = and i32 %81, 3840
%83 = lshr i32 %58, 24
%84 = or i32 %82, %83
%85 = trunc i32 %84 to i16
%86 = getelementptr inbounds i16, i16* %53, i64 6
store i16 %85, i16* %80
%87 = lshr i32 %58, 12
%88 = trunc i32 %87 to i16
%89 = and i16 %88, 4095
%90 = getelementptr inbounds i16, i16* %53, i64 7
store i16 %89, i16* %86
%91 = trunc i32 %58 to i16
%92 = and i16 %91, 4095
%93 = getelementptr inbounds i16, i16* %53, i64 8
store i16 %92, i16* %90
%94 = add nsw i32 %51, -8
%95 = icmp ugt i32 %51, 15
br i1 %95, label %50, label %428
96: ; preds = %46
%97 = icmp eq i32 %2, 8
%98 = and i1 %97, %48
br i1 %98, label %99, label %134
99: ; preds = %96, %99
%100 = phi i32 [ %132, %99 ], [ %4, %96 ]
%101 = phi i32* [ %130, %99 ], [ %18, %96 ]
%102 = phi i16* [ %129, %99 ], [ %7, %96 ]
%103 = phi i32 [ %131, %99 ], [ %19, %96 ]
%104 = lshr i32 %103, 24
%105 = trunc i32 %104 to i16
%106 = getelementptr inbounds i16, i16* %102, i64 1
store i16 %105, i16* %102
%107 = lshr i32 %103, 16
%108 = trunc i32 %107 to i16
%109 = and i16 %108, 255
%110 = getelementptr inbounds i16, i16* %102, i64 2
store i16 %109, i16* %106
%111 = trunc i32 %103 to i16
%112 = lshr i16 %111, 8
%113 = getelementptr inbounds i16, i16* %102, i64 3
store i16 %112, i16* %110
%114 = and i16 %111, 255
%115 = getelementptr inbounds i16, i16* %102, i64 4
store i16 %114, i16* %113
%116 = getelementptr inbounds i32, i32* %101, i64 1
%117 = load i32, i32* %101
%118 = lshr i32 %117, 24
%119 = trunc i32 %118 to i16
%120 = getelementptr inbounds i16, i16* %102, i64 5
store i16 %119, i16* %115
%121 = lshr i32 %117, 16
%122 = trunc i32 %121 to i16
%123 = and i16 %122, 255
%124 = getelementptr inbounds i16, i16* %102, i64 6
store i16 %123, i16* %120
%125 = trunc i32 %117 to i16
%126 = lshr i16 %125, 8
%127 = getelementptr inbounds i16, i16* %102, i64 7
store i16 %126, i16* %124
%128 = and i16 %125, 255
%129 = getelementptr inbounds i16, i16* %102, i64 8
store i16 %128, i16* %127
%130 = getelementptr inbounds i32, i32* %101, i64 2
%131 = load i32, i32* %116
%132 = add nsw i32 %100, -8
%133 = icmp ugt i32 %100, 15
br i1 %133, label %99, label %428
134: ; preds = %96
%135 = icmp eq i32 %2, 6
%136 = icmp sgt i32 %4, 15
%137 = and i1 %135, %136
br i1 %137, label %138, label %213
138: ; preds = %134, %138
%139 = phi i32 [ %211, %138 ], [ %4, %134 ]
%140 = phi i32* [ %147, %138 ], [ %18, %134 ]
%141 = phi i16* [ %210, %138 ], [ %7, %134 ]
%142 = phi i32 [ %148, %138 ], [ %19, %134 ]
%143 = getelementptr inbounds i32, i32* %140, i64 1
%144 = load i32, i32* %140
%145 = getelementptr inbounds i32, i32* %140, i64 2
%146 = load i32, i32* %143
%147 = getelementptr inbounds i32, i32* %140, i64 3
%148 = load i32, i32* %145
%149 = lshr i32 %142, 26
%150 = trunc i32 %149 to i16
%151 = getelementptr inbounds i16, i16* %141, i64 1
store i16 %150, i16* %141
%152 = lshr i32 %142, 20
%153 = trunc i32 %152 to i16
%154 = and i16 %153, 63
%155 = getelementptr inbounds i16, i16* %141, i64 2
store i16 %154, i16* %151
%156 = lshr i32 %142, 14
%157 = trunc i32 %156 to i16
%158 = and i16 %157, 63
%159 = getelementptr inbounds i16, i16* %141, i64 3
store i16 %158, i16* %155
%160 = trunc i32 %142 to i16
%161 = lshr i16 %160, 8
%162 = and i16 %161, 63
%163 = getelementptr inbounds i16, i16* %141, i64 4
store i16 %162, i16* %159
%164 = lshr i16 %160, 2
%165 = and i16 %164, 63
%166 = getelementptr inbounds i16, i16* %141, i64 5
store i16 %165, i16* %163
%167 = shl i32 %142, 4
%168 = and i32 %167, 48
%169 = lshr i32 %144, 28
%170 = or i32 %168, %169
%171 = trunc i32 %170 to i16
%172 = getelementptr inbounds i16, i16* %141, i64 6
store i16 %171, i16* %166
%173 = lshr i32 %144, 22
%174 = trunc i32 %173 to i16
%175 = and i16 %174, 63
%176 = getelementptr inbounds i16, i16* %141, i64 7
store i16 %175, i16* %172
%177 = lshr i32 %144, 16
%178 = trunc i32 %177 to i16
%179 = and i16 %178, 63
%180 = getelementptr inbounds i16, i16* %141, i64 8
store i16 %179, i16* %176
%181 = trunc i32 %144 to i16
%182 = lshr i16 %181, 10
%183 = getelementptr inbounds i16, i16* %141, i64 9
store i16 %182, i16* %180
%184 = lshr i16 %181, 4
%185 = and i16 %184, 63
%186 = getelementptr inbounds i16, i16* %141, i64 10
store i16 %185, i16* %183
%187 = shl i32 %144, 2
%188 = and i32 %187, 60
%189 = lshr i32 %146, 30
%190 = or i32 %188, %189
%191 = trunc i32 %190 to i16
%192 = getelementptr inbounds i16, i16* %141, i64 11
store i16 %191, i16* %186
%193 = lshr i32 %146, 24
%194 = trunc i32 %193 to i16
%195 = and i16 %194, 63
%196 = getelementptr inbounds i16, i16* %141, i64 12
store i16 %195, i16* %192
%197 = lshr i32 %146, 18
%198 = trunc i32 %197 to i16
%199 = and i16 %198, 63
%200 = getelementptr inbounds i16, i16* %141, i64 13
store i16 %199, i16* %196
%201 = lshr i32 %146, 12
%202 = trunc i32 %201 to i16
%203 = and i16 %202, 63
%204 = getelementptr inbounds i16, i16* %141, i64 14
store i16 %203, i16* %200
%205 = trunc i32 %146 to i16
%206 = lshr i16 %205, 6
%207 = and i16 %206, 63
%208 = getelementptr inbounds i16, i16* %141, i64 15
store i16 %207, i16* %204
%209 = and i16 %205, 63
%210 = getelementptr inbounds i16, i16* %141, i64 16
store i16 %209, i16* %208
%211 = add nsw i32 %139, -16
%212 = icmp ugt i32 %139, 31
br i1 %212, label %138, label %213
213: ; preds = %138, %134
%214 = phi i32 [ %4, %134 ], [ %211, %138 ]
%215 = phi i32* [ %18, %134 ], [ %147, %138 ]
%216 = phi i16* [ %7, %134 ], [ %210, %138 ]
%217 = phi i32 [ %19, %134 ], [ %148, %138 ]
%218 = icmp eq i32 %2, 4
%219 = icmp sgt i32 %214, 7
%220 = select i1 %218, i1 %219, i1 false
br i1 %220, label %221, label %256
221: ; preds = %213, %221
%222 = phi i32 [ %254, %221 ], [ %214, %213 ]
%223 = phi i32* [ %252, %221 ], [ %215, %213 ]
%224 = phi i16* [ %251, %221 ], [ %216, %213 ]
%225 = phi i32 [ %253, %221 ], [ %217, %213 ]
%226 = lshr i32 %225, 28
%227 = trunc i32 %226 to i16
%228 = getelementptr inbounds i16, i16* %224, i64 1
store i16 %227, i16* %224
%229 = lshr i32 %225, 24
%230 = trunc i32 %229 to i16
%231 = and i16 %230, 15
%232 = getelementptr inbounds i16, i16* %224, i64 2
store i16 %231, i16* %228
%233 = lshr i32 %225, 20
%234 = trunc i32 %233 to i16
%235 = and i16 %234, 15
%236 = getelementptr inbounds i16, i16* %224, i64 3
store i16 %235, i16* %232
%237 = lshr i32 %225, 16
%238 = trunc i32 %237 to i16
%239 = and i16 %238, 15
%240 = getelementptr inbounds i16, i16* %224, i64 4
store i16 %239, i16* %236
%241 = trunc i32 %225 to i16
%242 = lshr i16 %241, 12
%243 = getelementptr inbounds i16, i16* %224, i64 5
store i16 %242, i16* %240
%244 = lshr i16 %241, 8
%245 = and i16 %244, 15
%246 = getelementptr inbounds i16, i16* %224, i64 6
store i16 %245, i16* %243
%247 = lshr i16 %241, 4
%248 = and i16 %247, 15
%249 = getelementptr inbounds i16, i16* %224, i64 7
store i16 %248, i16* %246
%250 = and i16 %241, 15
%251 = getelementptr inbounds i16, i16* %224, i64 8
store i16 %250, i16* %249
%252 = getelementptr inbounds i32, i32* %223, i64 1
%253 = load i32, i32* %223
%254 = add nsw i32 %222, -8
%255 = icmp ugt i32 %222, 15
br i1 %255, label %221, label %428
256: ; preds = %213
%257 = icmp eq i32 %2, 2
%258 = icmp sgt i32 %214, 15
%259 = select i1 %257, i1 %258, i1 false
br i1 %259, label %260, label %323
260: ; preds = %256, %260
%261 = phi i32 [ %321, %260 ], [ %214, %256 ]
%262 = phi i32* [ %319, %260 ], [ %215, %256 ]
%263 = phi i16* [ %318, %260 ], [ %216, %256 ]
%264 = phi i32 [ %320, %260 ], [ %217, %256 ]
%265 = lshr i32 %264, 30
%266 = trunc i32 %265 to i16
%267 = getelementptr inbounds i16, i16* %263, i64 1
store i16 %266, i16* %263
%268 = lshr i32 %264, 28
%269 = trunc i32 %268 to i16
%270 = and i16 %269, 3
%271 = getelementptr inbounds i16, i16* %263, i64 2
store i16 %270, i16* %267
%272 = lshr i32 %264, 26
%273 = trunc i32 %272 to i16
%274 = and i16 %273, 3
%275 = getelementptr inbounds i16, i16* %263, i64 3
store i16 %274, i16* %271
%276 = lshr i32 %264, 24
%277 = trunc i32 %276 to i16
%278 = and i16 %277, 3
%279 = getelementptr inbounds i16, i16* %263, i64 4
store i16 %278, i16* %275
%280 = lshr i32 %264, 22
%281 = trunc i32 %280 to i16
%282 = and i16 %281, 3
%283 = getelementptr inbounds i16, i16* %263, i64 5
store i16 %282, i16* %279
%284 = lshr i32 %264, 20
%285 = trunc i32 %284 to i16
%286 = and i16 %285, 3
%287 = getelementptr inbounds i16, i16* %263, i64 6
store i16 %286, i16* %283
%288 = lshr i32 %264, 18
%289 = trunc i32 %288 to i16
%290 = and i16 %289, 3
%291 = getelementptr inbounds i16, i16* %263, i64 7
store i16 %290, i16* %287
%292 = lshr i32 %264, 16
%293 = trunc i32 %292 to i16
%294 = and i16 %293, 3
%295 = getelementptr inbounds i16, i16* %263, i64 8
store i16 %294, i16* %291
%296 = trunc i32 %264 to i16
%297 = lshr i16 %296, 14
%298 = getelementptr inbounds i16, i16* %263, i64 9
store i16 %297, i16* %295
%299 = lshr i16 %296, 12
%300 = and i16 %299, 3
%301 = getelementptr inbounds i16, i16* %263, i64 10
store i16 %300, i16* %298
%302 = lshr i16 %296, 10
%303 = and i16 %302, 3
%304 = getelementptr inbounds i16, i16* %263, i64 11
store i16 %303, i16* %301
%305 = lshr i16 %296, 8
%306 = and i16 %305, 3
%307 = getelementptr inbounds i16, i16* %263, i64 12
store i16 %306, i16* %304
%308 = lshr i16 %296, 6
%309 = and i16 %308, 3
%310 = getelementptr inbounds i16, i16* %263, i64 13
store i16 %309, i16* %307
%311 = lshr i16 %296, 4
%312 = and i16 %311, 3
%313 = getelementptr inbounds i16, i16* %263, i64 14
store i16 %312, i16* %310
%314 = lshr i16 %296, 2
%315 = and i16 %314, 3
%316 = getelementptr inbounds i16, i16* %263, i64 15
store i16 %315, i16* %313
%317 = and i16 %296, 3
%318 = getelementptr inbounds i16, i16* %263, i64 16
store i16 %317, i16* %316
%319 = getelementptr inbounds i32, i32* %262, i64 1
%320 = load i32, i32* %262
%321 = add nsw i32 %261, -16
%322 = icmp ugt i32 %261, 31
br i1 %322, label %260, label %428
323: ; preds = %256
%324 = icmp eq i32 %2, 1
%325 = icmp sgt i32 %214, 31
%326 = select i1 %324, i1 %325, i1 false
br i1 %326, label %327, label %428
327: ; preds = %323, %327
%328 = phi i32 [ %426, %327 ], [ %214, %323 ]
%329 = phi i32* [ %424, %327 ], [ %215, %323 ]
%330 = phi i16* [ %423, %327 ], [ %216, %323 ]
%331 = phi i32 [ %425, %327 ], [ %217, %323 ]
%332 = lshr i32 %331, 31
%333 = trunc i32 %332 to i16
%334 = getelementptr inbounds i16, i16* %330, i64 1
store i16 %333, i16* %330
%335 = lshr i32 %331, 30
%336 = trunc i32 %335 to i16
%337 = and i16 %336, 1
%338 = getelementptr inbounds i16, i16* %330, i64 2
store i16 %337, i16* %334
%339 = lshr i32 %331, 29
%340 = trunc i32 %339 to i16
%341 = and i16 %340, 1
%342 = getelementptr inbounds i16, i16* %330, i64 3
store i16 %341, i16* %338
%343 = lshr i32 %331, 28
%344 = trunc i32 %343 to i16
%345 = and i16 %344, 1
%346 = getelementptr inbounds i16, i16* %330, i64 4
store i16 %345, i16* %342
%347 = lshr i32 %331, 27
%348 = trunc i32 %347 to i16
%349 = and i16 %348, 1
%350 = getelementptr inbounds i16, i16* %330, i64 5
store i16 %349, i16* %346
%351 = lshr i32 %331, 26
%352 = trunc i32 %351 to i16
%353 = and i16 %352, 1
%354 = getelementptr inbounds i16, i16* %330, i64 6
store i16 %353, i16* %350
%355 = lshr i32 %331, 25
%356 = trunc i32 %355 to i16
%357 = and i16 %356, 1
%358 = getelementptr inbounds i16, i16* %330, i64 7
store i16 %357, i16* %354
%359 = lshr i32 %331, 24
%360 = trunc i32 %359 to i16
%361 = and i16 %360, 1
%362 = getelementptr inbounds i16, i16* %330, i64 8
store i16 %361, i16* %358
%363 = lshr i32 %331, 23
%364 = trunc i32 %363 to i16
%365 = and i16 %364, 1
%366 = getelementptr inbounds i16, i16* %330, i64 9
store i16 %365, i16* %362
%367 = lshr i32 %331, 22
%368 = trunc i32 %367 to i16
%369 = and i16 %368, 1
%370 = getelementptr inbounds i16, i16* %330, i64 10
store i16 %369, i16* %366
%371 = lshr i32 %331, 21
%372 = trunc i32 %371 to i16
%373 = and i16 %372, 1
%374 = getelementptr inbounds i16, i16* %330, i64 11
store i16 %373, i16* %370
%375 = lshr i32 %331, 20
%376 = trunc i32 %375 to i16
%377 = and i16 %376, 1
%378 = getelementptr inbounds i16, i16* %330, i64 12
store i16 %377, i16* %374
%379 = lshr i32 %331, 19
%380 = trunc i32 %379 to i16
%381 = and i16 %380, 1
%382 = getelementptr inbounds i16, i16* %330, i64 13
store i16 %381, i16* %378
%383 = lshr i32 %331, 18
%384 = trunc i32 %383 to i16
%385 = and i16 %384, 1
%386 = getelementptr inbounds i16, i16* %330, i64 14
store i16 %385, i16* %382
%387 = lshr i32 %331, 17
%388 = trunc i32 %387 to i16
%389 = and i16 %388, 1
%390 = getelementptr inbounds i16, i16* %330, i64 15
store i16 %389, i16* %386
%391 = lshr i32 %331, 16
%392 = trunc i32 %391 to i16
%393 = and i16 %392, 1
%394 = getelementptr inbounds i16, i16* %330, i64 16
store i16 %393, i16* %390
%395 = trunc i32 %331 to i16
%396 = lshr i16 %395, 15
%397 = getelementptr inbounds i16, i16* %330, i64 17
store i16 %396, i16* %394
%398 = insertelement <8 x i16> poison, i16 %395, i64 0
%399 = shufflevector <8 x i16> %398, <8 x i16> poison, <8 x i32> zeroinitializer
%400 = lshr <8 x i16> %399, <i16 14, i16 13, i16 12, i16 11, i16 10, i16 9, i16 8, i16 7>
%401 = and <8 x i16> %400, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%402 = getelementptr inbounds i16, i16* %330, i64 25
%403 = bitcast i16* %397 to <8 x i16>*
store <8 x i16> %401, <8 x i16>* %403
%404 = lshr i16 %395, 6
%405 = and i16 %404, 1
%406 = getelementptr inbounds i16, i16* %330, i64 26
store i16 %405, i16* %402
%407 = lshr i16 %395, 5
%408 = and i16 %407, 1
%409 = getelementptr inbounds i16, i16* %330, i64 27
store i16 %408, i16* %406
%410 = lshr i16 %395, 4
%411 = and i16 %410, 1
%412 = getelementptr inbounds i16, i16* %330, i64 28
store i16 %411, i16* %409
%413 = lshr i16 %395, 3
%414 = and i16 %413, 1
%415 = getelementptr inbounds i16, i16* %330, i64 29
store i16 %414, i16* %412
%416 = lshr i16 %395, 2
%417 = and i16 %416, 1
%418 = getelementptr inbounds i16, i16* %330, i64 30
store i16 %417, i16* %415
%419 = lshr i16 %395, 1
%420 = and i16 %419, 1
%421 = getelementptr inbounds i16, i16* %330, i64 31
store i16 %420, i16* %418
%422 = and i16 %395, 1
%423 = getelementptr inbounds i16, i16* %330, i64 32
store i16 %422, i16* %421
%424 = getelementptr inbounds i32, i32* %329, i64 1
%425 = load i32, i32* %329
%426 = add nsw i32 %328, -32
%427 = icmp ugt i32 %328, 63
br i1 %427, label %327, label %428
428: ; preds = %327, %260, %221, %99, %50, %25, %323, %11
%429 = phi i32 [ %214, %323 ], [ %4, %11 ], [ %44, %25 ], [ %94, %50 ], [ %132, %99 ], [ %254, %221 ], [ %321, %260 ], [ %426, %327 ]
%430 = phi i32* [ %215, %323 ], [ %18, %11 ], [ %42, %25 ], [ %59, %50 ], [ %130, %99 ], [ %252, %221 ], [ %319, %260 ], [ %424, %327 ]
%431 = phi i16* [ %216, %323 ], [ %7, %11 ], [ %41, %25 ], [ %93, %50 ], [ %129, %99 ], [ %251, %221 ], [ %318, %260 ], [ %423, %327 ]
%432 = phi i32 [ %217, %323 ], [ %19, %11 ], [ %43, %25 ], [ %60, %50 ], [ %131, %99 ], [ %253, %221 ], [ %320, %260 ], [ %425, %327 ]
%433 = zext i32 %432 to i64
%434 = shl nuw i64 %433, 32
%435 = load i32, i32* %430
%436 = zext i32 %435 to i64
%437 = or i64 %434, %436
%438 = icmp sgt i32 %16, 0
%439 = select i1 %438, i32 %16, i32 0
%440 = zext i32 %439 to i64
%441 = shl i64 %437, %440
%442 = icmp sgt i32 %429, 1
br i1 %442, label %443, label %449
443: ; preds = %428
%444 = getelementptr inbounds i32, i32* %430, i64 1
%445 = sub nsw i32 64, %2
%446 = zext i32 %445 to i64
%447 = zext i32 %2 to i64
%448 = mul i32 %2, -2
br label %454
449: ; preds = %480, %428
%450 = phi i32 [ %429, %428 ], [ %484, %480 ]
%451 = phi i16* [ %431, %428 ], [ %466, %480 ]
%452 = phi i64 [ %441, %428 ], [ %482, %480 ]
%453 = icmp sgt i32 %450, 0
br i1 %453, label %486, label %491
454: ; preds = %443, %480
%455 = phi i32 [ %17, %443 ], [ %483, %480 ]
%456 = phi i64 [ %441, %443 ], [ %482, %480 ]
%457 = phi i16* [ %431, %443 ], [ %466, %480 ]
%458 = phi i32* [ %444, %443 ], [ %481, %480 ]
%459 = phi i32 [ %429, %443 ], [ %484, %480 ]
%460 = lshr i64 %456, %446
%461 = trunc i64 %460 to i16
%462 = getelementptr inbounds i16, i16* %457, i64 1
store i16 %461, i16* %457
%463 = shl i64 %456, %447
%464 = lshr i64 %463, %446
%465 = trunc i64 %464 to i16
%466 = getelementptr inbounds i16, i16* %457, i64 2
store i16 %465, i16* %462
%467 = shl i64 %463, %447
%468 = add i32 %455, %448
%469 = icmp slt i32 %468, 1
br i1 %469, label %470, label %480
470: ; preds = %454
%471 = sub nsw i32 0, %468
%472 = zext i32 %471 to i64
%473 = lshr i64 %467, %472
%474 = getelementptr inbounds i32, i32* %458, i64 1
%475 = load i32, i32* %458
%476 = zext i32 %475 to i64
%477 = or i64 %473, %476
%478 = shl i64 %477, %472
%479 = add nsw i32 %468, 32
br label %480
480: ; preds = %470, %454
%481 = phi i32* [ %474, %470 ], [ %458, %454 ]
%482 = phi i64 [ %478, %470 ], [ %467, %454 ]
%483 = phi i32 [ %479, %470 ], [ %468, %454 ]
%484 = add nsw i32 %459, -2
%485 = icmp ugt i32 %459, 3
br i1 %485, label %454, label %449
486: ; preds = %449
%487 = sub nsw i32 64, %2
%488 = zext i32 %487 to i64
%489 = lshr i64 %452, %488
%490 = trunc i64 %489 to i16
store i16 %490, i16* %451
br label %491
491: ; preds = %486, %449, %6
ret void
}