void col221111_32(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],
          ((pic0[(k * 2 + 0) * 4 + 0]) = (y + cr),
           (unsigned int)(y + cr) >= 256
               ? ((pic0[(k * 2 + 0) * 4 + 0]) = (y + cr) < 0 ? 0 : 255)
               : 0),
          ((pic0[(k * 2 + 0) * 4 + 1]) = (y - cg),
           (unsigned int)(y - cg) >= 256
               ? ((pic0[(k * 2 + 0) * 4 + 1]) = (y - cg) < 0 ? 0 : 255)
               : 0),
          ((pic0[(k * 2 + 0) * 4 + 2]) = (y + cb),
           (unsigned int)(y + cb) >= 256
               ? ((pic0[(k * 2 + 0) * 4 + 2]) = (y + cb) < 0 ? 0 : 255)
               : 0),
          pic0[(k * 2 + 0) * 4 + 3] = 0),
         (y = outy[(k / 4 * 8 + 0) * 8 + (k & 3) * 2 + 1],
          ((pic0[(k * 2 + 1) * 4 + 0]) = (y + cr),
           (unsigned int)(y + cr) >= 256
               ? ((pic0[(k * 2 + 1) * 4 + 0]) = (y + cr) < 0 ? 0 : 255)
               : 0),
          ((pic0[(k * 2 + 1) * 4 + 1]) = (y - cg),
           (unsigned int)(y - cg) >= 256
               ? ((pic0[(k * 2 + 1) * 4 + 1]) = (y - cg) < 0 ? 0 : 255)
               : 0),
          ((pic0[(k * 2 + 1) * 4 + 2]) = (y + cb),
           (unsigned int)(y + cb) >= 256
               ? ((pic0[(k * 2 + 1) * 4 + 2]) = (y + cb) < 0 ? 0 : 255)
               : 0),
          pic0[(k * 2 + 1) * 4 + 3] = 0),
         (y = outy[(k / 4 * 8 + 1) * 8 + (k & 3) * 2 + 0],
          ((pic1[(k * 2 + 0) * 4 + 0]) = (y + cr),
           (unsigned int)(y + cr) >= 256
               ? ((pic1[(k * 2 + 0) * 4 + 0]) = (y + cr) < 0 ? 0 : 255)
               : 0),
          ((pic1[(k * 2 + 0) * 4 + 1]) = (y - cg),
           (unsigned int)(y - cg) >= 256
               ? ((pic1[(k * 2 + 0) * 4 + 1]) = (y - cg) < 0 ? 0 : 255)
               : 0),
          ((pic1[(k * 2 + 0) * 4 + 2]) = (y + cb),
           (unsigned int)(y + cb) >= 256
               ? ((pic1[(k * 2 + 0) * 4 + 2]) = (y + cb) < 0 ? 0 : 255)
               : 0),
          pic1[(k * 2 + 0) * 4 + 3] = 0),
         (y = outy[(k / 4 * 8 + 1) * 8 + (k & 3) * 2 + 1],
          ((pic1[(k * 2 + 1) * 4 + 0]) = (y + cr),
           (unsigned int)(y + cr) >= 256
               ? ((pic1[(k * 2 + 1) * 4 + 0]) = (y + cr) < 0 ? 0 : 255)
               : 0),
          ((pic1[(k * 2 + 1) * 4 + 1]) = (y - cg),
           (unsigned int)(y - cg) >= 256
               ? ((pic1[(k * 2 + 1) * 4 + 1]) = (y - cg) < 0 ? 0 : 255)
               : 0),
          ((pic1[(k * 2 + 1) * 4 + 2]) = (y + cb),
           (unsigned int)(y + cb) >= 256
               ? ((pic1[(k * 2 + 1) * 4 + 2]) = (y + cb) < 0 ? 0 : 255)
               : 0),
          pic1[(k * 2 + 1) * 4 + 3] = 0));
      outc += 8;
      outy += 16;
      pic0 += 2 * width;
      pic1 += 2 * width;
    }
    outy += 64 * 2 - 16 * 4;
  }
}


x86 assembly (clang, -O0):
<col221111_32>:
push   %rbp
mov    %rsp,%rbp
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    1875 <col221111_32+0x775>
movl   $0x4,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1859 <col221111_32+0x759>
movl   $0x0,-0x20(%rbp)
cmpl   $0x8,-0x20(%rbp)
jge    180b <col221111_32+0x70b>
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
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
cmp    $0x100,%eax
jb     124c <col221111_32+0x14c>
mov    -0x50(%rbp),%edx
add    -0x44(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x28(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x0,%edx
shl    $0x2,%edx
add    $0x0,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    1251 <col221111_32+0x151>
jmp    1251 <col221111_32+0x151>
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
cmp    $0x100,%eax
jb     12b7 <col221111_32+0x1b7>
mov    -0x50(%rbp),%edx
sub    -0x48(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x28(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x0,%edx
shl    $0x2,%edx
add    $0x1,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    12bc <col221111_32+0x1bc>
jmp    12bc <col221111_32+0x1bc>
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
cmp    $0x100,%eax
jb     1322 <col221111_32+0x222>
mov    -0x50(%rbp),%edx
add    -0x4c(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x28(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x0,%edx
shl    $0x2,%edx
add    $0x2,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    1327 <col221111_32+0x227>
jmp    1327 <col221111_32+0x227>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x60(%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
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
cmp    $0x100,%eax
jb     13e0 <col221111_32+0x2e0>
mov    -0x50(%rbp),%edx
add    -0x44(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x28(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x1,%edx
shl    $0x2,%edx
add    $0x0,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    13e5 <col221111_32+0x2e5>
jmp    13e5 <col221111_32+0x2e5>
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
cmp    $0x100,%eax
jb     144b <col221111_32+0x34b>
mov    -0x50(%rbp),%edx
sub    -0x48(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x28(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x1,%edx
shl    $0x2,%edx
add    $0x1,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    1450 <col221111_32+0x350>
jmp    1450 <col221111_32+0x350>
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %al,%dl
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
cmp    $0x100,%eax
jb     14b6 <col221111_32+0x3b6>
mov    -0x50(%rbp),%edx
add    -0x4c(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x28(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x1,%edx
shl    $0x2,%edx
add    $0x2,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    14bb <col221111_32+0x3bb>
jmp    14bb <col221111_32+0x3bb>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x68(%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
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
cmp    $0x100,%eax
jb     1574 <col221111_32+0x474>
mov    -0x50(%rbp),%edx
add    -0x44(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x30(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x0,%edx
shl    $0x2,%edx
add    $0x0,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    1579 <col221111_32+0x479>
jmp    1579 <col221111_32+0x479>
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
cmp    $0x100,%eax
jb     15df <col221111_32+0x4df>
mov    -0x50(%rbp),%edx
sub    -0x48(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x30(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x0,%edx
shl    $0x2,%edx
add    $0x1,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    15e4 <col221111_32+0x4e4>
jmp    15e4 <col221111_32+0x4e4>
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
cmp    $0x100,%eax
jb     164a <col221111_32+0x54a>
mov    -0x50(%rbp),%edx
add    -0x4c(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x30(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x0,%edx
shl    $0x2,%edx
add    $0x2,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    164f <col221111_32+0x54f>
jmp    164f <col221111_32+0x54f>
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x70(%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
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    -0x44(%rbp),%eax
cmp    $0x100,%eax
jb     1708 <col221111_32+0x608>
mov    -0x50(%rbp),%edx
add    -0x44(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x30(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x1,%edx
shl    $0x2,%edx
add    $0x0,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    170d <col221111_32+0x60d>
jmp    170d <col221111_32+0x60d>
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
sub    -0x48(%rbp),%eax
cmp    $0x100,%eax
jb     1773 <col221111_32+0x673>
mov    -0x50(%rbp),%edx
sub    -0x48(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x30(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x1,%edx
shl    $0x2,%edx
add    $0x1,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    1778 <col221111_32+0x678>
jmp    1778 <col221111_32+0x678>
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %al,%dl
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    -0x4c(%rbp),%eax
cmp    $0x100,%eax
jb     17de <col221111_32+0x6de>
mov    -0x50(%rbp),%edx
add    -0x4c(%rbp),%edx
mov    $0xff,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    -0x30(%rbp),%rcx
mov    -0x20(%rbp),%edx
shl    $0x1,%edx
add    $0x1,%edx
shl    $0x2,%edx
add    $0x2,%edx
movslq %edx,%rdx
mov    %al,(%rcx,%rdx,1)
movzbl %al,%eax
jmp    17e3 <col221111_32+0x6e3>
jmp    17e3 <col221111_32+0x6e3>
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1165 <col221111_32+0x65>
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    1154 <col221111_32+0x54>
mov    -0x38(%rbp),%rax
add    $0x100,%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    1143 <col221111_32+0x43>
pop    %rbp
ret

x86 assembly (clang, -O2):
<col221111_32>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
movslq %edx,%rax
lea    (%rsi,%rax,1),%r15
lea    0x400(%rdi),%rcx
add    %eax,%eax
cltq
mov    %rax,-0x10(%rsp)
mov    $0x2,%eax
cs nopw 0x0(%rax,%rax,1)
mov    %rax,-0x18(%rsp)
mov    $0x4,%eax
nopw   0x0(%rax,%rax,1)
mov    %rax,-0x8(%rsp)
mov    %rdi,%r14
xor    %r13d,%r13d
xor    %ebx,%ebx
nopl   (%rax)
mov    (%rcx,%rbx,2),%r12d
mov    0x100(%rcx,%rbx,2),%edx
imul   $0x32,%r12d,%eax
mov    %edx,%edi
shl    $0x7,%edi
lea    (%rdi,%rdx,2),%edi
lea    (%rax,%rdi,1),%r10d
add    $0x80,%r10d
sar    $0x8,%r10d
mov    %r13d,%edi
and    $0xffffffc0,%edi
mov    %ebx,%r11d
and    $0x6,%r11d
lea    (%rdi,%r11,1),%eax
mov    (%r14,%rax,4),%eax
lea    (%rax,%rdx,1),%r9d
mov    %r9d,%r8d
sar    $0x1f,%r8d
cmp    $0x100,%r9d
not    %r8b
movzbl %r8b,%ebp
cmovb  %r9d,%ebp
mov    %bpl,(%rsi,%rbx,4)
mov    %rcx,%r8
mov    %eax,%ecx
sub    %r10d,%ecx
mov    %ecx,%ebp
sar    $0x1f,%ebp
cmp    $0x100,%ecx
not    %bpl
movzbl %bpl,%ebp
cmovb  %ecx,%ebp
mov    %bpl,0x1(%rsi,%rbx,4)
add    %r12d,%eax
mov    %eax,%ecx
sar    $0x1f,%ecx
cmp    $0x100,%eax
not    %cl
movzbl %cl,%ecx
cmovb  %eax,%ecx
mov    %cl,0x2(%rsi,%rbx,4)
movb   $0x0,0x3(%rsi,%rbx,4)
lea    0x1(%rdi,%r11,1),%eax
mov    (%r14,%rax,4),%eax
lea    (%rax,%rdx,1),%ebp
mov    %ebp,%ecx
sar    $0x1f,%ecx
cmp    $0x100,%ebp
not    %cl
movzbl %cl,%ecx
cmovb  %ebp,%ecx
mov    %cl,0x4(%rsi,%rbx,4)
mov    %eax,%ebp
sub    %r10d,%ebp
mov    %ebp,%ecx
sar    $0x1f,%ecx
cmp    $0x100,%ebp
not    %cl
movzbl %cl,%ecx
cmovb  %ebp,%ecx
mov    %cl,0x5(%rsi,%rbx,4)
add    %r12d,%eax
mov    %eax,%ecx
sar    $0x1f,%ecx
cmp    $0x100,%eax
not    %cl
movzbl %cl,%ecx
cmovb  %eax,%ecx
mov    %cl,0x6(%rsi,%rbx,4)
movb   $0x0,0x7(%rsi,%rbx,4)
lea    0x8(%rdi,%r11,1),%eax
cltq
mov    (%r14,%rax,4),%eax
lea    (%rax,%rdx,1),%ebp
mov    %ebp,%ecx
sar    $0x1f,%ecx
cmp    $0x100,%ebp
not    %cl
movzbl %cl,%ecx
cmovb  %ebp,%ecx
mov    %cl,(%r15,%rbx,4)
mov    %eax,%ebp
sub    %r10d,%ebp
mov    %ebp,%ecx
sar    $0x1f,%ecx
cmp    $0x100,%ebp
not    %cl
movzbl %cl,%ecx
cmovb  %ebp,%ecx
mov    %cl,0x1(%r15,%rbx,4)
add    %r12d,%eax
mov    %eax,%ecx
sar    $0x1f,%ecx
cmp    $0x100,%eax
not    %cl
movzbl %cl,%ecx
cmovb  %eax,%ecx
mov    %cl,0x2(%r15,%rbx,4)
movb   $0x0,0x3(%r15,%rbx,4)
lea    (%rdi,%r11,1),%eax
add    $0x9,%eax
cltq
mov    (%r14,%rax,4),%eax
add    %eax,%edx
mov    %edx,%ecx
sar    $0x1f,%ecx
cmp    $0x100,%edx
not    %cl
movzbl %cl,%ecx
cmovb  %edx,%ecx
mov    %cl,0x4(%r15,%rbx,4)
mov    %eax,%ecx
sub    %r10d,%ecx
mov    %ecx,%edx
sar    $0x1f,%edx
cmp    $0x100,%ecx
not    %dl
movzbl %dl,%edx
cmovb  %ecx,%edx
mov    %dl,0x5(%r15,%rbx,4)
add    %r12d,%eax
mov    %eax,%ecx
sar    $0x1f,%ecx
cmp    $0x100,%eax
not    %cl
movzbl %cl,%ecx
cmovb  %eax,%ecx
mov    %cl,0x6(%r15,%rbx,4)
mov    %r8,%rcx
movb   $0x0,0x7(%r15,%rbx,4)
add    $0x2,%rbx
add    $0x10,%r13d
cmp    $0x10,%rbx
jne    1150 <col221111_32+0x50>
add    $0x20,%rcx
lea    0x40(%r14),%rdi
mov    -0x10(%rsp),%rax
add    %rax,%rsi
add    %rax,%r15
mov    -0x8(%rsp),%rdx
lea    -0x1(%rdx),%eax
cmp    $0x1,%edx
ja     1140 <col221111_32+0x40>
add    $0x140,%r14
mov    -0x18(%rsp),%rdx
lea    -0x1(%rdx),%eax
mov    %r14,%rdi
cmp    $0x1,%edx
ja     1130 <col221111_32+0x30>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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