void col221111_16(int *out, unsigned char *pic, int width) {
  int i, j, k;
  unsigned char *pic0, *pic1;
  int *outy, *outc;
  int cr, cg, cb, y;
  pic0 = pic;
  pic1 = pic + width;
  outy = out;
  outc = out + 64 * 4;
  for (i = 2; i > 0; i--) {
    for (j = 4; j > 0; j--) {
      for (k = 0; k < 8; k++)
        ((cb = outc[0 + 0 * 8 + k], cr = outc[64 + 0 * 8 + k],
          cg = (50 * cb + 130 * cr + 128) >> 8),
         (y = outy[(k / 4 * 8 + 0) * 8 + (k & 3) * 2 + 0],
          y = ((((unsigned int)(y + cr + 3 * 2 + 1) >= 256
                     ? ((y + cr + 3 * 2 + 1) < 0 ? 0 : 255)
                     : (y + cr + 3 * 2 + 1)) &
                0xf8)
               << 8) |
              ((((unsigned int)(y - cg + 3) >= 256
                     ? ((y - cg + 3) < 0 ? 0 : 255)
                     : (y - cg + 3)) &
                0xfc)
               << 3) |
              ((((unsigned int)(y + cb + 3 * 2 + 1) >= 256
                     ? ((y + cb + 3 * 2 + 1) < 0 ? 0 : 255)
                     : (y + cb + 3 * 2 + 1))) >>
               3),
          pic0[(k * 2 + 0) * 2 + 0] = y & 0xff,
          pic0[(k * 2 + 0) * 2 + 1] = y >> 8),
         (y = outy[(k / 4 * 8 + 0) * 8 + (k & 3) * 2 + 1],
          y = ((((unsigned int)(y + cr + 0 * 2 + 1) >= 256
                     ? ((y + cr + 0 * 2 + 1) < 0 ? 0 : 255)
                     : (y + cr + 0 * 2 + 1)) &
                0xf8)
               << 8) |
              ((((unsigned int)(y - cg + 0) >= 256
                     ? ((y - cg + 0) < 0 ? 0 : 255)
                     : (y - cg + 0)) &
                0xfc)
               << 3) |
              ((((unsigned int)(y + cb + 0 * 2 + 1) >= 256
                     ? ((y + cb + 0 * 2 + 1) < 0 ? 0 : 255)
                     : (y + cb + 0 * 2 + 1))) >>
               3),
          pic0[(k * 2 + 1) * 2 + 0] = y & 0xff,
          pic0[(k * 2 + 1) * 2 + 1] = y >> 8),
         (y = outy[(k / 4 * 8 + 1) * 8 + (k & 3) * 2 + 0],
          y = ((((unsigned int)(y + cr + 1 * 2 + 1) >= 256
                     ? ((y + cr + 1 * 2 + 1) < 0 ? 0 : 255)
                     : (y + cr + 1 * 2 + 1)) &
                0xf8)
               << 8) |
              ((((unsigned int)(y - cg + 1) >= 256
                     ? ((y - cg + 1) < 0 ? 0 : 255)
                     : (y - cg + 1)) &
                0xfc)
               << 3) |
              ((((unsigned int)(y + cb + 1 * 2 + 1) >= 256
                     ? ((y + cb + 1 * 2 + 1) < 0 ? 0 : 255)
                     : (y + cb + 1 * 2 + 1))) >>
               3),
          pic1[(k * 2 + 0) * 2 + 0] = y & 0xff,
          pic1[(k * 2 + 0) * 2 + 1] = y >> 8),
         (y = outy[(k / 4 * 8 + 1) * 8 + (k & 3) * 2 + 1],
          y = ((((unsigned int)(y + cr + 2 * 2 + 1) >= 256
                     ? ((y + cr + 2 * 2 + 1) < 0 ? 0 : 255)
                     : (y + cr + 2 * 2 + 1)) &
                0xf8)
               << 8) |
              ((((unsigned int)(y - cg + 2) >= 256
                     ? ((y - cg + 2) < 0 ? 0 : 255)
                     : (y - cg + 2)) &
                0xfc)
               << 3) |
              ((((unsigned int)(y + cb + 2 * 2 + 1) >= 256
                     ? ((y + cb + 2 * 2 + 1) < 0 ? 0 : 255)
                     : (y + cb + 2 * 2 + 1))) >>
               3),
          pic1[(k * 2 + 1) * 2 + 0] = y & 0xff,
          pic1[(k * 2 + 1) * 2 + 1] = y >> 8));
      outc += 8;
      outy += 16;
      pic0 += 2 * width;
      pic1 += 2 * width;
    }
    outy += 64 * 2 - 16 * 4;
  }
}


x86 assembly (clang, -O0):
<col221111_16>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
add    $0x400,%rax
mov    %rax,-0x40(%rbp)
movl   $0x2,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
jle    187f <col221111_16+0x77f>
movl   $0x4,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1863 <col221111_16+0x763>
movl   $0x0,-0x20(%rbp)
cmpl   $0x8,-0x20(%rbp)
jge    1815 <col221111_16+0x715>
mov    -0x40(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x40,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x44(%rbp)
imul   $0x32,-0x4c(%rbp),%eax
imul   $0x82,-0x44(%rbp),%ecx
add    %ecx,%eax
add    $0x80,%eax
sar    $0x8,%eax
mov    %eax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x58(%rbp),%rax
shl    $0x3,%ecx
add    $0x0,%ecx
shl    $0x3,%ecx
mov    -0x20(%rbp),%edx
and    $0x3,%edx
shl    $0x1,%edx
add    %edx,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
add    $0x6,%eax
add    $0x1,%eax
cmp    $0x100,%eax
jb     1222 <col221111_16+0x122>
mov    -0x50(%rbp),%edx
add    -0x44(%rbp),%edx
add    $0x6,%edx
add    $0x1,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x5c(%rbp)
jmp    1231 <col221111_16+0x131>
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
add    $0x6,%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
and    $0xf8,%eax
shl    $0x8,%eax
mov    %eax,-0x60(%rbp)
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
add    $0x3,%eax
cmp    $0x100,%eax
jb     1271 <col221111_16+0x171>
mov    -0x50(%rbp),%edx
sub    -0x48(%rbp),%edx
add    $0x3,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x64(%rbp)
jmp    127d <col221111_16+0x17d>
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x64(%rbp)
mov    -0x60(%rbp),%eax
mov    -0x64(%rbp),%ecx
and    $0xfc,%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    %eax,-0x68(%rbp)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
add    $0x6,%eax
add    $0x1,%eax
cmp    $0x100,%eax
jb     12c9 <col221111_16+0x1c9>
mov    -0x50(%rbp),%edx
add    -0x4c(%rbp),%edx
add    $0x6,%edx
add    $0x1,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x6c(%rbp)
jmp    12d8 <col221111_16+0x1d8>
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
add    $0x6,%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x68(%rbp),%eax
mov    -0x6c(%rbp),%ecx
sar    $0x3,%ecx
or     %ecx,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
and    $0xff,%eax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
sar    $0x8,%eax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x78(%rbp),%rax
shl    $0x3,%ecx
add    $0x0,%ecx
shl    $0x3,%ecx
mov    -0x20(%rbp),%edx
and    $0x3,%edx
shl    $0x1,%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
add    $0x0,%eax
add    $0x1,%eax
cmp    $0x100,%eax
jb     139b <col221111_16+0x29b>
mov    -0x50(%rbp),%edx
add    -0x44(%rbp),%edx
add    $0x0,%edx
add    $0x1,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x7c(%rbp)
jmp    13aa <col221111_16+0x2aa>
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
add    $0x0,%eax
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
and    $0xf8,%eax
shl    $0x8,%eax
mov    %eax,-0x80(%rbp)
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
add    $0x0,%eax
cmp    $0x100,%eax
jb     13ed <col221111_16+0x2ed>
mov    -0x50(%rbp),%edx
sub    -0x48(%rbp),%edx
add    $0x0,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x84(%rbp)
jmp    13fc <col221111_16+0x2fc>
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x84(%rbp)
mov    -0x80(%rbp),%eax
mov    -0x84(%rbp),%ecx
and    $0xfc,%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    %eax,-0x88(%rbp)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
add    $0x0,%eax
add    $0x1,%eax
cmp    $0x100,%eax
jb     1451 <col221111_16+0x351>
mov    -0x50(%rbp),%edx
add    -0x4c(%rbp),%edx
add    $0x0,%edx
add    $0x1,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x8c(%rbp)
jmp    1463 <col221111_16+0x363>
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
add    $0x0,%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x88(%rbp),%eax
mov    -0x8c(%rbp),%ecx
sar    $0x3,%ecx
or     %ecx,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
and    $0xff,%eax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
sar    $0x8,%eax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
mov    %rax,-0x98(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x98(%rbp),%rax
shl    $0x3,%ecx
add    $0x1,%ecx
shl    $0x3,%ecx
mov    -0x20(%rbp),%edx
and    $0x3,%edx
shl    $0x1,%edx
add    %edx,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
add    $0x2,%eax
add    $0x1,%eax
cmp    $0x100,%eax
jb     1535 <col221111_16+0x435>
mov    -0x50(%rbp),%edx
add    -0x44(%rbp),%edx
add    $0x2,%edx
add    $0x1,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x9c(%rbp)
jmp    1547 <col221111_16+0x447>
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
add    $0x2,%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
mov    -0x9c(%rbp),%eax
and    $0xf8,%eax
shl    $0x8,%eax
mov    %eax,-0xa0(%rbp)
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
add    $0x1,%eax
cmp    $0x100,%eax
jb     1590 <col221111_16+0x490>
mov    -0x50(%rbp),%edx
sub    -0x48(%rbp),%edx
add    $0x1,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xa4(%rbp)
jmp    159f <col221111_16+0x49f>
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
mov    -0xa0(%rbp),%eax
mov    -0xa4(%rbp),%ecx
and    $0xfc,%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    %eax,-0xa8(%rbp)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
add    $0x2,%eax
add    $0x1,%eax
cmp    $0x100,%eax
jb     15f7 <col221111_16+0x4f7>
mov    -0x50(%rbp),%edx
add    -0x4c(%rbp),%edx
add    $0x2,%edx
add    $0x1,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xac(%rbp)
jmp    1609 <col221111_16+0x509>
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
add    $0x2,%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
mov    -0xa8(%rbp),%eax
mov    -0xac(%rbp),%ecx
sar    $0x3,%ecx
or     %ecx,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
and    $0xff,%eax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
sar    $0x8,%eax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
mov    %rax,-0xb8(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0xb8(%rbp),%rax
shl    $0x3,%ecx
add    $0x1,%ecx
shl    $0x3,%ecx
mov    -0x20(%rbp),%edx
and    $0x3,%edx
shl    $0x1,%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
add    $0x4,%eax
add    $0x1,%eax
cmp    $0x100,%eax
jb     16db <col221111_16+0x5db>
mov    -0x50(%rbp),%edx
add    -0x44(%rbp),%edx
add    $0x4,%edx
add    $0x1,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xbc(%rbp)
jmp    16ed <col221111_16+0x5ed>
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
add    $0x4,%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
mov    -0xbc(%rbp),%eax
and    $0xf8,%eax
shl    $0x8,%eax
mov    %eax,-0xc0(%rbp)
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
add    $0x2,%eax
cmp    $0x100,%eax
jb     1736 <col221111_16+0x636>
mov    -0x50(%rbp),%edx
sub    -0x48(%rbp),%edx
add    $0x2,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xc4(%rbp)
jmp    1745 <col221111_16+0x645>
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc4(%rbp)
mov    -0xc0(%rbp),%eax
mov    -0xc4(%rbp),%ecx
and    $0xfc,%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    %eax,-0xc8(%rbp)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
add    $0x4,%eax
add    $0x1,%eax
cmp    $0x100,%eax
jb     179d <col221111_16+0x69d>
mov    -0x50(%rbp),%edx
add    -0x4c(%rbp),%edx
add    $0x4,%edx
add    $0x1,%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xcc(%rbp)
jmp    17af <col221111_16+0x6af>
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
add    $0x4,%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
mov    -0xc8(%rbp),%eax
mov    -0xcc(%rbp),%ecx
sar    $0x3,%ecx
or     %ecx,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
and    $0xff,%eax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
sar    $0x8,%eax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1169 <col221111_16+0x69>
mov    -0x40(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x40(%rbp)
mov    -0x38(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x38(%rbp)
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1158 <col221111_16+0x58>
mov    -0x38(%rbp),%rax
add    $0x100,%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    1147 <col221111_16+0x47>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<col221111_16>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
movslq %edx,%rax
lea    (%rsi,%rax,1),%rcx
mov    %rcx,-0x28(%rsp)
lea    0x400(%rdi),%rcx
mov    %rcx,-0x20(%rsp)
add    %eax,%eax
cltq
mov    %rax,-0x10(%rsp)
mov    $0x2,%eax
jmp    115b <col221111_16+0x5b>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x140,%r12
mov    -0x18(%rsp),%rcx
lea    -0x1(%rcx),%eax
mov    %r12,%rdi
cmp    $0x1,%ecx
jbe    1457 <col221111_16+0x357>
mov    %rax,-0x18(%rsp)
mov    $0x4,%eax
jmp    1195 <col221111_16+0x95>
nopw   0x0(%rax,%rax,1)
addq   $0x20,-0x20(%rsp)
lea    0x40(%r12),%rdi
mov    -0x10(%rsp),%rax
add    %rax,%rsi
add    %rax,-0x28(%rsp)
mov    -0x8(%rsp),%rcx
lea    -0x1(%rcx),%eax
cmp    $0x1,%ecx
jbe    1140 <col221111_16+0x40>
mov    %rax,-0x8(%rsp)
mov    %rdi,%r12
xor    %r13d,%r13d
xor    %ebx,%ebx
jmp    11e2 <col221111_16+0xe2>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    (%r15,%rbp,1),%ecx
add    $0x5,%ecx
cmp    $0x100,%ecx
cmovb  %ecx,%edi
shr    $0x3,%edi
or     %edi,%eax
or     %eax,%edx
mov    -0x28(%rsp),%rcx
mov    %al,0x2(%rcx,%rbx,2)
mov    %dh,0x3(%rcx,%rbx,2)
add    $0x2,%rbx
add    $0x10,%r13d
cmp    $0x10,%rbx
je     1170 <col221111_16+0x70>
mov    -0x20(%rsp),%rax
mov    (%rax,%rbx,2),%r15d
mov    0x100(%rax,%rbx,2),%r14d
imul   $0x32,%r15d,%edx
mov    %r14d,%ecx
shl    $0x7,%ecx
lea    (%rcx,%r14,2),%eax
lea    (%rdx,%rax,1),%r10d
add    $0x80,%r10d
sar    $0x8,%r10d
mov    %r13d,%r11d
and    $0xffffffc0,%r11d
mov    %ebx,%r8d
and    $0x6,%r8d
lea    (%r11,%r8,1),%edx
mov    (%r12,%rdx,4),%ecx
lea    (%rcx,%r14,1),%eax
mov    $0x0,%edi
cmp    $0xfffffff9,%eax
jl     1239 <col221111_16+0x139>
mov    $0xf8,%edi
lea    (%rcx,%r14,1),%eax
add    $0x7,%eax
cmp    $0x100,%eax
cmovb  %eax,%edi
shl    $0x8,%edi
mov    %ecx,%edx
sub    %r10d,%edx
lea    0x3(%rdx),%eax
mov    $0x0,%ebp
cmp    $0xfffffffd,%edx
jl     1262 <col221111_16+0x162>
mov    $0xfc,%ebp
and    $0xf800,%edi
cmp    $0x100,%eax
cmovb  %eax,%ebp
shl    $0x3,%ebp
and    $0x7e0,%ebp
mov    %ecx,%edx
add    %r15d,%edx
mov    $0x0,%eax
cmp    $0xfffffff9,%edx
jl     128d <col221111_16+0x18d>
mov    $0xf8,%eax
add    %r15d,%ecx
add    $0x7,%ecx
cmp    $0x100,%ecx
cmovb  %ecx,%eax
shr    $0x3,%eax
or     %eax,%edi
or     %ebp,%edi
mov    %rsi,%rbp
mov    %di,(%rsi,%rbx,2)
lea    (%r11,%r8,1),%ecx
add    $0x1,%ecx
mov    (%r12,%rcx,4),%edi
lea    (%rdi,%r14,1),%ecx
mov    $0x0,%edx
cmp    $0xffffffff,%ecx
jl     12c8 <col221111_16+0x1c8>
mov    $0xf8,%edx
lea    (%rdi,%r14,1),%ecx
add    $0x1,%ecx
cmp    $0x100,%ecx
cmovb  %ecx,%edx
shl    $0x8,%edx
mov    %edi,%r9d
sub    %r10d,%r9d
mov    $0x0,%eax
cmovs  %eax,%r9d
cmp    $0xff,%r9d
jb     12f9 <col221111_16+0x1f9>
mov    $0xff,%r9d
and    $0xf800,%edx
shl    $0x3,%r9d
and    $0x7e0,%r9d
mov    %edi,%ecx
add    %r15d,%ecx
mov    $0x0,%esi
cmp    $0xffffffff,%ecx
jl     131e <col221111_16+0x21e>
mov    $0xf8,%esi
lea    (%rdi,%r15,1),%ecx
add    $0x1,%ecx
cmp    $0x100,%ecx
cmovb  %ecx,%esi
shr    $0x3,%esi
or     %esi,%edx
or     %r9d,%edx
mov    %rbp,%rsi
mov    %dx,0x2(%rbp,%rbx,2)
lea    (%r11,%r8,1),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
mov    (%r12,%rcx,4),%edi
lea    (%rdi,%r14,1),%ecx
mov    $0x0,%edx
cmp    $0xfffffffd,%ecx
jl     135f <col221111_16+0x25f>
mov    $0xf8,%edx
lea    (%rdi,%r14,1),%ecx
add    $0x3,%ecx
cmp    $0x100,%ecx
cmovb  %ecx,%edx
shl    $0x8,%edx
mov    %edi,%ecx
sub    %r10d,%ecx
lea    0x1(%rcx),%eax
mov    $0x0,%ebp
cmp    $0xffffffff,%ecx
jl     1389 <col221111_16+0x289>
mov    $0xfc,%ebp
and    $0xf800,%edx
cmp    $0x100,%eax
cmovb  %eax,%ebp
shl    $0x3,%ebp
and    $0x7e0,%ebp
mov    %edi,%ecx
add    %r15d,%ecx
mov    $0x0,%eax
cmp    $0xfffffffd,%ecx
jl     13b4 <col221111_16+0x2b4>
mov    $0xf8,%eax
lea    (%rdi,%r15,1),%ecx
add    $0x3,%ecx
cmp    $0x100,%ecx
cmovb  %ecx,%eax
shr    $0x3,%eax
or     %eax,%ebp
or     %ebp,%edx
mov    -0x28(%rsp),%rax
mov    %bpl,(%rax,%rbx,2)
mov    %dh,0x1(%rax,%rbx,2)
lea    (%r11,%r8,1),%ecx
add    $0x9,%ecx
movslq %ecx,%rcx
mov    (%r12,%rcx,4),%ebp
mov    %r14d,%ecx
add    %ebp,%ecx
mov    $0x0,%edx
cmp    $0xfffffffb,%ecx
jl     13fa <col221111_16+0x2fa>
mov    $0xf8,%edx
lea    (%r14,%rbp,1),%eax
add    $0x5,%eax
cmp    $0x100,%eax
cmovb  %eax,%edx
shl    $0x8,%edx
mov    %ebp,%ecx
sub    %r10d,%ecx
lea    0x2(%rcx),%edi
mov    $0x0,%eax
cmp    $0xfffffffe,%ecx
jl     1423 <col221111_16+0x323>
mov    $0xfc,%eax
and    $0xf800,%edx
cmp    $0x100,%edi
cmovb  %edi,%eax
shl    $0x3,%eax
and    $0x7e0,%eax
mov    %ebp,%ecx
add    %r15d,%ecx
mov    $0x0,%edi
cmp    $0xfffffffb,%ecx
jl     11b0 <col221111_16+0xb0>
mov    $0xf8,%edi
jmp    11b0 <col221111_16+0xb0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @col221111_16(i32* nocapture %0, i8* nocapture writeonly %1, i32 %2) {
%4 = sext i32 %2 to i64
%5 = getelementptr inbounds i8, i8* %1, i64 %4
%6 = getelementptr inbounds i32, i32* %0, i64 256
%7 = shl nsw i32 %2, 1
%8 = sext i32 %7 to i64
br label %9
9: ; preds = %3, %187
%10 = phi i32 [ 2, %3 ], [ %189, %187 ]
%11 = phi i32* [ %6, %3 ], [ %181, %187 ]
%12 = phi i32* [ %0, %3 ], [ %188, %187 ]
%13 = phi i8* [ %5, %3 ], [ %184, %187 ]
%14 = phi i8* [ %1, %3 ], [ %183, %187 ]
br label %15
15: ; preds = %9, %180
%16 = phi i32 [ 4, %9 ], [ %185, %180 ]
%17 = phi i32* [ %11, %9 ], [ %181, %180 ]
%18 = phi i32* [ %12, %9 ], [ %182, %180 ]
%19 = phi i8* [ %13, %9 ], [ %184, %180 ]
%20 = phi i8* [ %14, %9 ], [ %183, %180 ]
br label %21
21: ; preds = %15, %21
%22 = phi i64 [ 0, %15 ], [ %178, %21 ]
%23 = getelementptr inbounds i32, i32* %17, i64 %22
%24 = load i32, i32* %23
%25 = add nuw nsw i64 %22, 64
%26 = getelementptr inbounds i32, i32* %17, i64 %25
%27 = load i32, i32* %26
%28 = mul nsw i32 %24, 50
%29 = mul nsw i32 %27, 130
%30 = add i32 %28, 128
%31 = add i32 %30, %29
%32 = ashr i32 %31, 8
%33 = trunc i64 %22 to i32
%34 = shl i32 %33, 4
%35 = and i32 %34, -64
%36 = trunc i64 %22 to i32
%37 = shl i32 %36, 1
%38 = and i32 %37, 6
%39 = or i32 %35, %38
%40 = zext i32 %39 to i64
%41 = getelementptr inbounds i32, i32* %18, i64 %40
%42 = load i32, i32* %41
%43 = add nsw i32 %42, %27
%44 = add nsw i32 %43, 7
%45 = icmp ugt i32 %44, 255
%46 = icmp slt i32 %43, -7
%47 = select i1 %46, i32 0, i32 248
%48 = select i1 %45, i32 %47, i32 %44
%49 = shl nuw nsw i32 %48, 8
%50 = and i32 %49, 63488
%51 = sub nsw i32 %42, %32
%52 = add nsw i32 %51, 3
%53 = icmp ugt i32 %52, 255
%54 = icmp slt i32 %51, -3
%55 = select i1 %54, i32 0, i32 252
%56 = select i1 %53, i32 %55, i32 %52
%57 = shl nuw nsw i32 %56, 3
%58 = and i32 %57, 2016
%59 = add nsw i32 %42, %24
%60 = add nsw i32 %59, 7
%61 = icmp ugt i32 %60, 255
%62 = icmp slt i32 %59, -7
%63 = select i1 %62, i32 0, i32 248
%64 = select i1 %61, i32 %63, i32 %60
%65 = lshr i32 %64, 3
%66 = or i32 %50, %65
%67 = or i32 %66, %58
%68 = trunc i32 %67 to i8
%69 = shl nuw nsw i64 %22, 2
%70 = getelementptr inbounds i8, i8* %20, i64 %69
store i8 %68, i8* %70
%71 = lshr i32 %67, 8
%72 = trunc i32 %71 to i8
%73 = or i64 %69, 1
%74 = getelementptr inbounds i8, i8* %20, i64 %73
store i8 %72, i8* %74
%75 = or i32 %39, 1
%76 = zext i32 %75 to i64
%77 = getelementptr inbounds i32, i32* %18, i64 %76
%78 = load i32, i32* %77
%79 = add nsw i32 %78, %27
%80 = add nsw i32 %79, 1
%81 = icmp ugt i32 %80, 255
%82 = icmp slt i32 %79, -1
%83 = select i1 %82, i32 0, i32 248
%84 = select i1 %81, i32 %83, i32 %80
%85 = shl nuw nsw i32 %84, 8
%86 = and i32 %85, 63488
%87 = sub nsw i32 %78, %32
%88 = icmp sgt i32 %87, 0
%89 = select i1 %88, i32 %87, i32 0
%90 = icmp ult i32 %89, 255
%91 = select i1 %90, i32 %89, i32 255
%92 = shl nuw nsw i32 %91, 3
%93 = and i32 %92, 2016
%94 = add nsw i32 %78, %24
%95 = add nsw i32 %94, 1
%96 = icmp ugt i32 %95, 255
%97 = icmp slt i32 %94, -1
%98 = select i1 %97, i32 0, i32 248
%99 = select i1 %96, i32 %98, i32 %95
%100 = lshr i32 %99, 3
%101 = or i32 %86, %100
%102 = or i32 %101, %93
%103 = trunc i32 %102 to i8
%104 = or i64 %69, 2
%105 = getelementptr inbounds i8, i8* %20, i64 %104
store i8 %103, i8* %105
%106 = lshr i32 %102, 8
%107 = trunc i32 %106 to i8
%108 = or i64 %69, 3
%109 = getelementptr inbounds i8, i8* %20, i64 %108
store i8 %107, i8* %109
%110 = or i32 %39, 8
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds i32, i32* %18, i64 %111
%113 = load i32, i32* %112
%114 = add nsw i32 %113, %27
%115 = add nsw i32 %114, 3
%116 = icmp ugt i32 %115, 255
%117 = icmp slt i32 %114, -3
%118 = select i1 %117, i32 0, i32 248
%119 = select i1 %116, i32 %118, i32 %115
%120 = shl nuw nsw i32 %119, 8
%121 = and i32 %120, 63488
%122 = sub nsw i32 %113, %32
%123 = add nsw i32 %122, 1
%124 = icmp ugt i32 %123, 255
%125 = icmp slt i32 %122, -1
%126 = select i1 %125, i32 0, i32 252
%127 = select i1 %124, i32 %126, i32 %123
%128 = shl nuw nsw i32 %127, 3
%129 = and i32 %128, 2016
%130 = add nsw i32 %113, %24
%131 = add nsw i32 %130, 3
%132 = icmp ugt i32 %131, 255
%133 = icmp slt i32 %130, -3
%134 = select i1 %133, i32 0, i32 248
%135 = select i1 %132, i32 %134, i32 %131
%136 = lshr i32 %135, 3
%137 = or i32 %129, %136
%138 = or i32 %137, %121
%139 = trunc i32 %137 to i8
%140 = getelementptr inbounds i8, i8* %19, i64 %69
store i8 %139, i8* %140
%141 = lshr i32 %138, 8
%142 = trunc i32 %141 to i8
%143 = getelementptr inbounds i8, i8* %19, i64 %73
store i8 %142, i8* %143
%144 = or i32 %39, 9
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds i32, i32* %18, i64 %145
%147 = load i32, i32* %146
%148 = add nsw i32 %147, %27
%149 = add nsw i32 %148, 5
%150 = icmp ugt i32 %149, 255
%151 = icmp slt i32 %148, -5
%152 = select i1 %151, i32 0, i32 248
%153 = select i1 %150, i32 %152, i32 %149
%154 = shl nuw nsw i32 %153, 8
%155 = and i32 %154, 63488
%156 = sub nsw i32 %147, %32
%157 = add nsw i32 %156, 2
%158 = icmp ugt i32 %157, 255
%159 = icmp slt i32 %156, -2
%160 = select i1 %159, i32 0, i32 252
%161 = select i1 %158, i32 %160, i32 %157
%162 = shl nuw nsw i32 %161, 3
%163 = and i32 %162, 2016
%164 = add nsw i32 %147, %24
%165 = add nsw i32 %164, 5
%166 = icmp ugt i32 %165, 255
%167 = icmp slt i32 %164, -5
%168 = select i1 %167, i32 0, i32 248
%169 = select i1 %166, i32 %168, i32 %165
%170 = lshr i32 %169, 3
%171 = or i32 %163, %170
%172 = or i32 %171, %155
%173 = trunc i32 %171 to i8
%174 = getelementptr inbounds i8, i8* %19, i64 %104
store i8 %173, i8* %174
%175 = lshr i32 %172, 8
%176 = trunc i32 %175 to i8
%177 = getelementptr inbounds i8, i8* %19, i64 %108
store i8 %176, i8* %177
%178 = add nuw nsw i64 %22, 1
%179 = icmp eq i64 %178, 8
br i1 %179, label %180, label %21
180: ; preds = %21
%181 = getelementptr inbounds i32, i32* %17, i64 8
%182 = getelementptr inbounds i32, i32* %18, i64 16
%183 = getelementptr inbounds i8, i8* %20, i64 %8
%184 = getelementptr inbounds i8, i8* %19, i64 %8
%185 = add nsw i32 %16, -1
%186 = icmp ugt i32 %16, 1
br i1 %186, label %15, label %187
187: ; preds = %180
%188 = getelementptr inbounds i32, i32* %18, i64 80
%189 = add nsw i32 %10, -1
%190 = icmp ugt i32 %10, 1
br i1 %190, label %9, label %191
191: ; preds = %187
ret void
}