void v4lconvert_decode_sn9c2028(const unsigned char *src, unsigned char *dst,
                                int width, int height) {
  long dst_index = 0;
  int starting_row = 0;
  unsigned short bits;
  short c1val, c2val;
  int x, y;
  unsigned long bitBuf = 0;
  unsigned long bitBufCount = 0;
  unsigned long bits_eaten = 0;
  src += 12;
  for (y = starting_row; y < height; y++) {
    {
      if (bitBufCount < 8) {
        do {
          bitBuf = (bitBuf << 8) | (*(src++));
          bitBufCount += 8;
        } while (bitBufCount < 24);
      }
      bits = bitBuf >> (bitBufCount - 8);
    };
    {
      bitBufCount -= 8;
      bits_eaten += 8;
    };
    c2val = (bits & 0xff);
    {
      if (bitBufCount < 8) {
        do {
          bitBuf = (bitBuf << 8) | (*(src++));
          bitBufCount += 8;
        } while (bitBufCount < 24);
      }
      bits = bitBuf >> (bitBufCount - 8);
    };
    {
      bitBufCount -= 8;
      bits_eaten += 8;
    };
    c1val = (bits & 0xff);
    {
      long pp;
      pp = (c1val << 8) + c2val;
      *((unsigned short *)(dst + dst_index)) = pp;
      dst_index += 2;
    };
    for (x = 2; x < width; x += 2) {
      {
        {
          if (bitBufCount < 10) {
            do {
              bitBuf = (bitBuf << 8) | (*(src++));
              bitBufCount += 8;
            } while (bitBufCount < 24);
          }
          bits = bitBuf >> (bitBufCount - 10);
        };
        if ((bits & 0x200) == 0) {
          {
            bitBufCount -= 1;
            bits_eaten += 1;
          };
        } else if ((bits & 0x380) == 0x280) {
          {
            bitBufCount -= 3;
            bits_eaten += 3;
          };
          c2val += 3;
          if (c2val > 255)
            c2val = 255;
        } else if ((bits & 0x380) == 0x300) {
          {
            bitBufCount -= 3;
            bits_eaten += 3;
          };
          c2val -= 3;
          if (c2val < 0)
            c2val = 0;
        } else if ((bits & 0x3c0) == 0x200) {
          {
            bitBufCount -= 4;
            bits_eaten += 4;
          };
          c2val += 8;
          if (c2val > 255)
            c2val = 255;
        } else if ((bits & 0x3c0) == 0x240) {
          {
            bitBufCount -= 4;
            bits_eaten += 4;
          };
          c2val -= 8;
          if (c2val < 0)
            c2val = 0;
        } else if ((bits & 0x3c0) == 0x3c0) {
          {
            bitBufCount -= 4;
            bits_eaten += 4;
          };
          c2val -= 20;
          if (c2val < 0)
            c2val = 0;
        } else if ((bits & 0x3e0) == 0x380) {
          {
            bitBufCount -= 5;
            bits_eaten += 5;
          };
          c2val += 20;
          if (c2val > 255)
            c2val = 255;
        } else {
          {
            bitBufCount -= 10;
            bits_eaten += 10;
          };
          c2val = 8 * (bits & 0x1f) + 0;
        }
      };
      {
        {
          if (bitBufCount < 10) {
            do {
              bitBuf = (bitBuf << 8) | (*(src++));
              bitBufCount += 8;
            } while (bitBufCount < 24);
          }
          bits = bitBuf >> (bitBufCount - 10);
        };
        if ((bits & 0x200) == 0) {
          {
            bitBufCount -= 1;
            bits_eaten += 1;
          };
        } else if ((bits & 0x380) == 0x280) {
          {
            bitBufCount -= 3;
            bits_eaten += 3;
          };
          c1val += 3;
          if (c1val > 255)
            c1val = 255;
        } else if ((bits & 0x380) == 0x300) {
          {
            bitBufCount -= 3;
            bits_eaten += 3;
          };
          c1val -= 3;
          if (c1val < 0)
            c1val = 0;
        } else if ((bits & 0x3c0) == 0x200) {
          {
            bitBufCount -= 4;
            bits_eaten += 4;
          };
          c1val += 8;
          if (c1val > 255)
            c1val = 255;
        } else if ((bits & 0x3c0) == 0x240) {
          {
            bitBufCount -= 4;
            bits_eaten += 4;
          };
          c1val -= 8;
          if (c1val < 0)
            c1val = 0;
        } else if ((bits & 0x3c0) == 0x3c0) {
          {
            bitBufCount -= 4;
            bits_eaten += 4;
          };
          c1val -= 20;
          if (c1val < 0)
            c1val = 0;
        } else if ((bits & 0x3e0) == 0x380) {
          {
            bitBufCount -= 5;
            bits_eaten += 5;
          };
          c1val += 20;
          if (c1val > 255)
            c1val = 255;
        } else {
          {
            bitBufCount -= 10;
            bits_eaten += 10;
          };
          c1val = 8 * (bits & 0x1f) + 0;
        }
      };
      {
        long pp;
        pp = (c1val << 8) + c2val;
        *((unsigned short *)(dst + dst_index)) = pp;
        dst_index += 2;
      };
    }
  }
}


x86 assembly (clang, -O0):
<v4lconvert_decode_sn9c2028>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
movq   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movq   $0x0,-0x40(%rbp)
movq   $0x0,-0x48(%rbp)
movq   $0x0,-0x50(%rbp)
mov    -0x8(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0x8(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1865 <v4lconvert_decode_sn9c2028+0x765>
cmpq   $0x8,-0x48(%rbp)
jae    11a4 <v4lconvert_decode_sn9c2028+0xa4>
jmp    1167 <v4lconvert_decode_sn9c2028+0x67>
mov    -0x40(%rbp),%rax
shl    $0x8,%rax
mov    -0x8(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
movzbl (%rcx),%ecx
or     %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x18,-0x48(%rbp)
jb     1167 <v4lconvert_decode_sn9c2028+0x67>
jmp    11a4 <v4lconvert_decode_sn9c2028+0xa4>
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x8,%rcx
shr    %cl,%rax
mov    %ax,-0x26(%rbp)
mov    -0x48(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x50(%rbp)
movzwl -0x26(%rbp),%eax
and    $0xff,%eax
mov    %ax,-0x2a(%rbp)
cmpq   $0x8,-0x48(%rbp)
jae    1229 <v4lconvert_decode_sn9c2028+0x129>
jmp    11ec <v4lconvert_decode_sn9c2028+0xec>
mov    -0x40(%rbp),%rax
shl    $0x8,%rax
mov    -0x8(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
movzbl (%rcx),%ecx
or     %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x18,-0x48(%rbp)
jb     11ec <v4lconvert_decode_sn9c2028+0xec>
jmp    1229 <v4lconvert_decode_sn9c2028+0x129>
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0x8,%rcx
shr    %cl,%rax
mov    %ax,-0x26(%rbp)
mov    -0x48(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x50(%rbp)
movzwl -0x26(%rbp),%eax
and    $0xff,%eax
mov    %ax,-0x28(%rbp)
movswl -0x28(%rbp),%eax
shl    $0x8,%eax
movswl -0x2a(%rbp),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    %dx,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
movl   $0x2,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1852 <v4lconvert_decode_sn9c2028+0x752>
cmpq   $0xa,-0x48(%rbp)
jae    12f3 <v4lconvert_decode_sn9c2028+0x1f3>
jmp    12b6 <v4lconvert_decode_sn9c2028+0x1b6>
mov    -0x40(%rbp),%rax
shl    $0x8,%rax
mov    -0x8(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
movzbl (%rcx),%ecx
or     %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x18,-0x48(%rbp)
jb     12b6 <v4lconvert_decode_sn9c2028+0x1b6>
jmp    12f3 <v4lconvert_decode_sn9c2028+0x1f3>
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0xa,%rcx
shr    %cl,%rax
mov    %ax,-0x26(%rbp)
movzwl -0x26(%rbp),%eax
and    $0x200,%eax
cmp    $0x0,%eax
jne    1335 <v4lconvert_decode_sn9c2028+0x235>
mov    -0x48(%rbp),%rax
sub    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    155c <v4lconvert_decode_sn9c2028+0x45c>
movzwl -0x26(%rbp),%eax
and    $0x380,%eax
cmp    $0x280,%eax
jne    1386 <v4lconvert_decode_sn9c2028+0x286>
mov    -0x48(%rbp),%rax
sub    $0x3,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x50(%rbp)
movswl -0x2a(%rbp),%eax
add    $0x3,%eax
mov    %ax,-0x2a(%rbp)
movswl -0x2a(%rbp),%eax
cmp    $0xff,%eax
jle    1381 <v4lconvert_decode_sn9c2028+0x281>
movw   $0xff,-0x2a(%rbp)
jmp    1557 <v4lconvert_decode_sn9c2028+0x457>
movzwl -0x26(%rbp),%eax
and    $0x380,%eax
cmp    $0x300,%eax
jne    13d5 <v4lconvert_decode_sn9c2028+0x2d5>
mov    -0x48(%rbp),%rax
sub    $0x3,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x50(%rbp)
movswl -0x2a(%rbp),%eax
sub    $0x3,%eax
mov    %ax,-0x2a(%rbp)
movswl -0x2a(%rbp),%eax
cmp    $0x0,%eax
jge    13d0 <v4lconvert_decode_sn9c2028+0x2d0>
movw   $0x0,-0x2a(%rbp)
jmp    1552 <v4lconvert_decode_sn9c2028+0x452>
movzwl -0x26(%rbp),%eax
and    $0x3c0,%eax
cmp    $0x200,%eax
jne    1426 <v4lconvert_decode_sn9c2028+0x326>
mov    -0x48(%rbp),%rax
sub    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
movswl -0x2a(%rbp),%eax
add    $0x8,%eax
mov    %ax,-0x2a(%rbp)
movswl -0x2a(%rbp),%eax
cmp    $0xff,%eax
jle    1421 <v4lconvert_decode_sn9c2028+0x321>
movw   $0xff,-0x2a(%rbp)
jmp    154d <v4lconvert_decode_sn9c2028+0x44d>
movzwl -0x26(%rbp),%eax
and    $0x3c0,%eax
cmp    $0x240,%eax
jne    1475 <v4lconvert_decode_sn9c2028+0x375>
mov    -0x48(%rbp),%rax
sub    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
movswl -0x2a(%rbp),%eax
sub    $0x8,%eax
mov    %ax,-0x2a(%rbp)
movswl -0x2a(%rbp),%eax
cmp    $0x0,%eax
jge    1470 <v4lconvert_decode_sn9c2028+0x370>
movw   $0x0,-0x2a(%rbp)
jmp    1548 <v4lconvert_decode_sn9c2028+0x448>
movzwl -0x26(%rbp),%eax
and    $0x3c0,%eax
cmp    $0x3c0,%eax
jne    14c4 <v4lconvert_decode_sn9c2028+0x3c4>
mov    -0x48(%rbp),%rax
sub    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
movswl -0x2a(%rbp),%eax
sub    $0x14,%eax
mov    %ax,-0x2a(%rbp)
movswl -0x2a(%rbp),%eax
cmp    $0x0,%eax
jge    14bf <v4lconvert_decode_sn9c2028+0x3bf>
movw   $0x0,-0x2a(%rbp)
jmp    1543 <v4lconvert_decode_sn9c2028+0x443>
movzwl -0x26(%rbp),%eax
and    $0x3e0,%eax
cmp    $0x380,%eax
jne    1515 <v4lconvert_decode_sn9c2028+0x415>
mov    -0x48(%rbp),%rax
sub    $0x5,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x50(%rbp)
movswl -0x2a(%rbp),%eax
add    $0x14,%eax
mov    %ax,-0x2a(%rbp)
movswl -0x2a(%rbp),%eax
cmp    $0xff,%eax
jle    1510 <v4lconvert_decode_sn9c2028+0x410>
movw   $0xff,-0x2a(%rbp)
jmp    153e <v4lconvert_decode_sn9c2028+0x43e>
mov    -0x48(%rbp),%rax
sub    $0xa,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0xa,%rax
mov    %rax,-0x50(%rbp)
movzwl -0x26(%rbp),%eax
and    $0x1f,%eax
shl    $0x3,%eax
add    $0x0,%eax
mov    %ax,-0x2a(%rbp)
jmp    1543 <v4lconvert_decode_sn9c2028+0x443>
jmp    1548 <v4lconvert_decode_sn9c2028+0x448>
jmp    154d <v4lconvert_decode_sn9c2028+0x44d>
jmp    1552 <v4lconvert_decode_sn9c2028+0x452>
jmp    1557 <v4lconvert_decode_sn9c2028+0x457>
jmp    155c <v4lconvert_decode_sn9c2028+0x45c>
cmpq   $0xa,-0x48(%rbp)
jae    15a9 <v4lconvert_decode_sn9c2028+0x4a9>
jmp    156c <v4lconvert_decode_sn9c2028+0x46c>
mov    -0x40(%rbp),%rax
shl    $0x8,%rax
mov    -0x8(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
movzbl (%rcx),%ecx
or     %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x18,-0x48(%rbp)
jb     156c <v4lconvert_decode_sn9c2028+0x46c>
jmp    15a9 <v4lconvert_decode_sn9c2028+0x4a9>
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    $0xa,%rcx
shr    %cl,%rax
mov    %ax,-0x26(%rbp)
movzwl -0x26(%rbp),%eax
and    $0x200,%eax
cmp    $0x0,%eax
jne    15eb <v4lconvert_decode_sn9c2028+0x4eb>
mov    -0x48(%rbp),%rax
sub    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    1812 <v4lconvert_decode_sn9c2028+0x712>
movzwl -0x26(%rbp),%eax
and    $0x380,%eax
cmp    $0x280,%eax
jne    163c <v4lconvert_decode_sn9c2028+0x53c>
mov    -0x48(%rbp),%rax
sub    $0x3,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x50(%rbp)
movswl -0x28(%rbp),%eax
add    $0x3,%eax
mov    %ax,-0x28(%rbp)
movswl -0x28(%rbp),%eax
cmp    $0xff,%eax
jle    1637 <v4lconvert_decode_sn9c2028+0x537>
movw   $0xff,-0x28(%rbp)
jmp    180d <v4lconvert_decode_sn9c2028+0x70d>
movzwl -0x26(%rbp),%eax
and    $0x380,%eax
cmp    $0x300,%eax
jne    168b <v4lconvert_decode_sn9c2028+0x58b>
mov    -0x48(%rbp),%rax
sub    $0x3,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x50(%rbp)
movswl -0x28(%rbp),%eax
sub    $0x3,%eax
mov    %ax,-0x28(%rbp)
movswl -0x28(%rbp),%eax
cmp    $0x0,%eax
jge    1686 <v4lconvert_decode_sn9c2028+0x586>
movw   $0x0,-0x28(%rbp)
jmp    1808 <v4lconvert_decode_sn9c2028+0x708>
movzwl -0x26(%rbp),%eax
and    $0x3c0,%eax
cmp    $0x200,%eax
jne    16dc <v4lconvert_decode_sn9c2028+0x5dc>
mov    -0x48(%rbp),%rax
sub    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
movswl -0x28(%rbp),%eax
add    $0x8,%eax
mov    %ax,-0x28(%rbp)
movswl -0x28(%rbp),%eax
cmp    $0xff,%eax
jle    16d7 <v4lconvert_decode_sn9c2028+0x5d7>
movw   $0xff,-0x28(%rbp)
jmp    1803 <v4lconvert_decode_sn9c2028+0x703>
movzwl -0x26(%rbp),%eax
and    $0x3c0,%eax
cmp    $0x240,%eax
jne    172b <v4lconvert_decode_sn9c2028+0x62b>
mov    -0x48(%rbp),%rax
sub    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
movswl -0x28(%rbp),%eax
sub    $0x8,%eax
mov    %ax,-0x28(%rbp)
movswl -0x28(%rbp),%eax
cmp    $0x0,%eax
jge    1726 <v4lconvert_decode_sn9c2028+0x626>
movw   $0x0,-0x28(%rbp)
jmp    17fe <v4lconvert_decode_sn9c2028+0x6fe>
movzwl -0x26(%rbp),%eax
and    $0x3c0,%eax
cmp    $0x3c0,%eax
jne    177a <v4lconvert_decode_sn9c2028+0x67a>
mov    -0x48(%rbp),%rax
sub    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
movswl -0x28(%rbp),%eax
sub    $0x14,%eax
mov    %ax,-0x28(%rbp)
movswl -0x28(%rbp),%eax
cmp    $0x0,%eax
jge    1775 <v4lconvert_decode_sn9c2028+0x675>
movw   $0x0,-0x28(%rbp)
jmp    17f9 <v4lconvert_decode_sn9c2028+0x6f9>
movzwl -0x26(%rbp),%eax
and    $0x3e0,%eax
cmp    $0x380,%eax
jne    17cb <v4lconvert_decode_sn9c2028+0x6cb>
mov    -0x48(%rbp),%rax
sub    $0x5,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x50(%rbp)
movswl -0x28(%rbp),%eax
add    $0x14,%eax
mov    %ax,-0x28(%rbp)
movswl -0x28(%rbp),%eax
cmp    $0xff,%eax
jle    17c6 <v4lconvert_decode_sn9c2028+0x6c6>
movw   $0xff,-0x28(%rbp)
jmp    17f4 <v4lconvert_decode_sn9c2028+0x6f4>
mov    -0x48(%rbp),%rax
sub    $0xa,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0xa,%rax
mov    %rax,-0x50(%rbp)
movzwl -0x26(%rbp),%eax
and    $0x1f,%eax
shl    $0x3,%eax
add    $0x0,%eax
mov    %ax,-0x28(%rbp)
jmp    17f9 <v4lconvert_decode_sn9c2028+0x6f9>
jmp    17fe <v4lconvert_decode_sn9c2028+0x6fe>
jmp    1803 <v4lconvert_decode_sn9c2028+0x703>
jmp    1808 <v4lconvert_decode_sn9c2028+0x708>
jmp    180d <v4lconvert_decode_sn9c2028+0x70d>
jmp    1812 <v4lconvert_decode_sn9c2028+0x712>
movswl -0x28(%rbp),%eax
shl    $0x8,%eax
movswl -0x2a(%rbp),%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    %dx,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x30(%rbp)
jmp    129a <v4lconvert_decode_sn9c2028+0x19a>
jmp    1857 <v4lconvert_decode_sn9c2028+0x757>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    114b <v4lconvert_decode_sn9c2028+0x4b>
pop    %rbp
ret

x86 assembly (clang, -O2):
<v4lconvert_decode_sn9c2028>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %ecx,-0x4(%rsp)
test   %ecx,%ecx
jle    148f <v4lconvert_decode_sn9c2028+0x38f>
add    $0xc,%rdi
xor    %r10d,%r10d
mov    $0xff,%r11d
xor    %r13d,%r13d
xor    %ebp,%ebp
xor    %r8d,%r8d
xor    %r14d,%r14d
jmp    1145 <v4lconvert_decode_sn9c2028+0x45>
add    $0x1,%r14d
mov    %r12,%r13
mov    %r9,%rbp
cmp    -0x4(%rsp),%r14d
je     148f <v4lconvert_decode_sn9c2028+0x38f>
cmp    $0x7,%rbp
ja     1174 <v4lconvert_decode_sn9c2028+0x74>
movzbl (%rdi),%eax
movzbl 0x1(%rdi),%ecx
shl    $0x18,%r8
shl    $0x10,%rax
or     %r8,%rax
shl    $0x8,%rcx
or     %rax,%rcx
movzbl 0x2(%rdi),%r8d
add    $0x3,%rdi
or     %rcx,%r8
add    $0x18,%rbp
lea    -0x8(%rbp),%r9
mov    %r8,%rax
mov    %r9d,%ecx
shr    %cl,%rax
cmp    $0x7,%r9
ja     11cb <v4lconvert_decode_sn9c2028+0xcb>
movzbl (%rdi),%ecx
shl    $0x10,%r8
shl    $0x8,%rcx
or     %r8,%rcx
movzbl 0x1(%rdi),%r8d
or     %rcx,%r8
cmp    $0xf,%rbp
ja     11c0 <v4lconvert_decode_sn9c2028+0xc0>
shl    $0x8,%r8
movzbl 0x2(%rdi),%ecx
add    $0x3,%rdi
or     %rcx,%r8
add    $0x10,%rbp
jmp    11c8 <v4lconvert_decode_sn9c2028+0xc8>
nopl   0x0(%rax,%rax,1)
add    $0x2,%rdi
add    $0x8,%rbp
mov    %rbp,%r9
add    $0xfffffffffffffff8,%r9
mov    %r8,%rbx
mov    %r9d,%ecx
shr    %cl,%rbx
movzbl %al,%r15d
mov    %ebx,%eax
shl    $0x8,%eax
movzwl %r15w,%ecx
or     %eax,%ecx
lea    0x2(%r13),%r12
mov    %cx,(%rsi,%r13,1)
cmp    $0x3,%edx
jl     1130 <v4lconvert_decode_sn9c2028+0x30>
movzbl %bl,%r13d
mov    $0x2,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    $0x9,%r9
ja     1258 <v4lconvert_decode_sn9c2028+0x158>
movzbl (%rdi),%eax
shl    $0x10,%r8
shl    $0x8,%rax
or     %r8,%rax
movzbl 0x1(%rdi),%r8d
or     %rax,%r8
cmp    $0x7,%r9
ja     1250 <v4lconvert_decode_sn9c2028+0x150>
shl    $0x8,%r8
movzbl 0x2(%rdi),%eax
add    $0x3,%rdi
or     %rax,%r8
add    $0x18,%r9
jmp    1258 <v4lconvert_decode_sn9c2028+0x158>
nopw   0x0(%rax,%rax,1)
add    $0x2,%rdi
add    $0x10,%r9
lea    -0xa(%r9),%rax
mov    %r8,%rbx
mov    %eax,%ecx
shr    %cl,%rbx
test   $0x200,%ebx
jne    1280 <v4lconvert_decode_sn9c2028+0x180>
add    $0xffffffffffffffff,%r9
jmp    12c3 <v4lconvert_decode_sn9c2028+0x1c3>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %ebx,%ecx
and    $0x380,%ecx
cmp    $0x300,%ecx
je     12b3 <v4lconvert_decode_sn9c2028+0x1b3>
cmp    $0x280,%ecx
jne    1364 <v4lconvert_decode_sn9c2028+0x264>
add    $0xfffffffffffffffd,%r9
add    $0x3,%r15d
movswl %r15w,%eax
cmp    $0xff,%eax
cmovge %r11d,%r15d
jmp    12c3 <v4lconvert_decode_sn9c2028+0x1c3>
add    $0xfffffffffffffffd,%r9
add    $0xfffffffd,%r15d
test   %r15w,%r15w
cmovs  %r10d,%r15d
mov    %r9,%rax
cmp    $0x9,%rax
ja     1308 <v4lconvert_decode_sn9c2028+0x208>
movzbl (%rdi),%ecx
shl    $0x10,%r8
shl    $0x8,%rcx
or     %r8,%rcx
movzbl 0x1(%rdi),%r8d
or     %rcx,%r8
cmp    $0x7,%rax
ja     1300 <v4lconvert_decode_sn9c2028+0x200>
shl    $0x8,%r8
movzbl 0x2(%rdi),%ecx
add    $0x3,%rdi
or     %rcx,%r8
add    $0x18,%rax
jmp    1308 <v4lconvert_decode_sn9c2028+0x208>
nopl   (%rax)
add    $0x2,%rdi
add    $0x10,%rax
lea    -0xa(%rax),%r9
mov    %r8,%rbx
mov    %r9d,%ecx
shr    %cl,%rbx
test   $0x200,%ebx
jne    1330 <v4lconvert_decode_sn9c2028+0x230>
add    $0xffffffffffffffff,%rax
jmp    13ad <v4lconvert_decode_sn9c2028+0x2ad>
cs nopw 0x0(%rax,%rax,1)
mov    %ebx,%ecx
and    $0x380,%ecx
cmp    $0x300,%ecx
je     139d <v4lconvert_decode_sn9c2028+0x29d>
cmp    $0x280,%ecx
jne    13d2 <v4lconvert_decode_sn9c2028+0x2d2>
add    $0xfffffffffffffffd,%rax
add    $0x3,%r13d
movswl %r13w,%ecx
cmp    $0xff,%ecx
cmovge %r11d,%r13d
jmp    13ad <v4lconvert_decode_sn9c2028+0x2ad>
mov    %ebx,%ecx
and    $0x3c0,%ecx
cmp    $0x3c0,%ecx
je     13ff <v4lconvert_decode_sn9c2028+0x2ff>
cmp    $0x240,%ecx
je     140c <v4lconvert_decode_sn9c2028+0x30c>
cmp    $0x200,%ecx
jne    1419 <v4lconvert_decode_sn9c2028+0x319>
add    $0xfffffffffffffffc,%r9
add    $0x8,%r15d
jmp    12a4 <v4lconvert_decode_sn9c2028+0x1a4>
add    $0xfffffffffffffffd,%rax
add    $0xfffffffd,%r13d
test   %r13w,%r13w
cmovs  %r10d,%r13d
mov    %rax,%r9
mov    %r13d,%eax
shl    $0x8,%eax
add    %r15d,%eax
mov    %ax,(%rsi,%r12,1)
add    $0x2,%ebp
add    $0x2,%r12
cmp    %edx,%ebp
jl     1210 <v4lconvert_decode_sn9c2028+0x110>
jmp    1130 <v4lconvert_decode_sn9c2028+0x30>
mov    %ebx,%ecx
and    $0x3c0,%ecx
cmp    $0x3c0,%ecx
je     1436 <v4lconvert_decode_sn9c2028+0x336>
cmp    $0x240,%ecx
je     1443 <v4lconvert_decode_sn9c2028+0x343>
cmp    $0x200,%ecx
jne    1450 <v4lconvert_decode_sn9c2028+0x350>
add    $0xfffffffffffffffc,%rax
add    $0x8,%r13d
jmp    1354 <v4lconvert_decode_sn9c2028+0x254>
add    $0xfffffffffffffffc,%r9
add    $0xffffffec,%r15d
jmp    12bb <v4lconvert_decode_sn9c2028+0x1bb>
add    $0xfffffffffffffffc,%r9
add    $0xfffffff8,%r15d
jmp    12bb <v4lconvert_decode_sn9c2028+0x1bb>
mov    %ebx,%ecx
and    $0x3e0,%ecx
cmp    $0x380,%ecx
jne    146d <v4lconvert_decode_sn9c2028+0x36d>
add    $0xfffffffffffffffb,%r9
add    $0x14,%r15d
jmp    12a4 <v4lconvert_decode_sn9c2028+0x1a4>
add    $0xfffffffffffffffc,%rax
add    $0xffffffec,%r13d
jmp    13a5 <v4lconvert_decode_sn9c2028+0x2a5>
add    $0xfffffffffffffffc,%rax
add    $0xfffffff8,%r13d
jmp    13a5 <v4lconvert_decode_sn9c2028+0x2a5>
mov    %ebx,%ecx
and    $0x3e0,%ecx
cmp    $0x380,%ecx
jne    1483 <v4lconvert_decode_sn9c2028+0x383>
add    $0xfffffffffffffffb,%rax
add    $0x14,%r13d
jmp    1354 <v4lconvert_decode_sn9c2028+0x254>
shl    $0x3,%ebx
movzbl %bl,%r15d
cmp    $0x9,%rax
jbe    12cc <v4lconvert_decode_sn9c2028+0x1cc>
jmp    1308 <v4lconvert_decode_sn9c2028+0x208>
shl    $0x3,%ebx
movzbl %bl,%r13d
jmp    13b0 <v4lconvert_decode_sn9c2028+0x2b0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @v4lconvert_decode_sn9c2028(i8* nocapture %0, i8* nocapture writeonly %1, i32 %2, i32 %3) {
%5 = icmp sgt i32 %3, 0
br i1 %5, label %6, label %254
6: ; preds = %4
%7 = getelementptr inbounds i8, i8* %0, i64 12
%8 = icmp sgt i32 %2, 2
br label %9
9: ; preds = %6, %247
%10 = phi i8* [ %7, %6 ], [ %250, %247 ]
%11 = phi i64 [ 0, %6 ], [ %251, %247 ]
%12 = phi i64 [ 0, %6 ], [ %249, %247 ]
%13 = phi i64 [ 0, %6 ], [ %248, %247 ]
%14 = phi i32 [ 0, %6 ], [ %252, %247 ]
%15 = icmp ult i64 %12, 8
br i1 %15, label %16, label %35
16: ; preds = %9
%17 = shl i64 %13, 8
%18 = getelementptr inbounds i8, i8* %10, i64 1
%19 = load i8, i8* %10
%20 = zext i8 %19 to i64
%21 = or i64 %17, %20
%22 = add nuw nsw i64 %12, 8
%23 = shl i64 %21, 8
%24 = getelementptr inbounds i8, i8* %10, i64 2
%25 = load i8, i8* %18
%26 = zext i8 %25 to i64
%27 = or i64 %23, %26
%28 = add nuw nsw i64 %12, 16
%29 = shl i64 %27, 8
%30 = getelementptr inbounds i8, i8* %10, i64 3
%31 = load i8, i8* %24
%32 = zext i8 %31 to i64
%33 = or i64 %29, %32
%34 = add nuw nsw i64 %12, 24
br label %35
35: ; preds = %16, %9
%36 = phi i64 [ %13, %9 ], [ %33, %16 ]
%37 = phi i64 [ %12, %9 ], [ %34, %16 ]
%38 = phi i8* [ %10, %9 ], [ %30, %16 ]
%39 = add i64 %37, -8
%40 = lshr i64 %36, %39
%41 = trunc i64 %40 to i16
%42 = and i16 %41, 255
%43 = icmp ult i64 %39, 8
br i1 %43, label %44, label %64
44: ; preds = %35
%45 = shl i64 %36, 8
%46 = getelementptr inbounds i8, i8* %38, i64 1
%47 = load i8, i8* %38
%48 = zext i8 %47 to i64
%49 = or i64 %45, %48
%50 = shl i64 %49, 8
%51 = getelementptr inbounds i8, i8* %38, i64 2
%52 = load i8, i8* %46
%53 = zext i8 %52 to i64
%54 = or i64 %50, %53
%55 = add nuw nsw i64 %37, 8
%56 = icmp ult i64 %37, 16
br i1 %56, label %57, label %64
57: ; preds = %44
%58 = shl i64 %54, 8
%59 = getelementptr inbounds i8, i8* %38, i64 3
%60 = load i8, i8* %51
%61 = zext i8 %60 to i64
%62 = or i64 %58, %61
%63 = add nuw nsw i64 %37, 16
br label %64
64: ; preds = %44, %57, %35
%65 = phi i64 [ %36, %35 ], [ %54, %44 ], [ %62, %57 ]
%66 = phi i64 [ %39, %35 ], [ %55, %44 ], [ %63, %57 ]
%67 = phi i8* [ %38, %35 ], [ %51, %44 ], [ %59, %57 ]
%68 = add i64 %66, -8
%69 = lshr i64 %65, %68
%70 = trunc i64 %69 to i16
%71 = shl i16 %70, 8
%72 = or i16 %71, %42
%73 = getelementptr inbounds i8, i8* %1, i64 %11
%74 = bitcast i8* %73 to i16*
store i16 %72, i16* %74
%75 = add nsw i64 %11, 2
br i1 %8, label %76, label %247
76: ; preds = %64
%77 = and i16 %70, 255
br label %78
78: ; preds = %76, %237
%79 = phi i64 [ %245, %237 ], [ %75, %76 ]
%80 = phi i8* [ %188, %237 ], [ %67, %76 ]
%81 = phi i64 [ %239, %237 ], [ %68, %76 ]
%82 = phi i64 [ %186, %237 ], [ %65, %76 ]
%83 = phi i32 [ %244, %237 ], [ 2, %76 ]
%84 = phi i16 [ %161, %237 ], [ %42, %76 ]
%85 = phi i16 [ %238, %237 ], [ %77, %76 ]
%86 = icmp ult i64 %81, 10
br i1 %86, label %87, label %108
87: ; preds = %78
%88 = shl i64 %82, 8
%89 = getelementptr inbounds i8, i8* %80, i64 1
%90 = load i8, i8* %80
%91 = zext i8 %90 to i64
%92 = or i64 %88, %91
%93 = add nuw nsw i64 %81, 8
%94 = shl i64 %92, 8
%95 = getelementptr inbounds i8, i8* %80, i64 2
%96 = load i8, i8* %89
%97 = zext i8 %96 to i64
%98 = or i64 %94, %97
%99 = add nuw nsw i64 %81, 16
%100 = icmp ult i64 %81, 8
br i1 %100, label %101, label %108
101: ; preds = %87
%102 = shl i64 %98, 8
%103 = getelementptr inbounds i8, i8* %80, i64 3
%104 = load i8, i8* %95
%105 = zext i8 %104 to i64
%106 = or i64 %102, %105
%107 = add nuw nsw i64 %81, 24
br label %108
108: ; preds = %87, %101, %78
%109 = phi i64 [ %82, %78 ], [ %98, %87 ], [ %106, %101 ]
%110 = phi i64 [ %81, %78 ], [ %99, %87 ], [ %107, %101 ]
%111 = phi i8* [ %80, %78 ], [ %95, %87 ], [ %103, %101 ]
%112 = add i64 %110, -10
%113 = lshr i64 %109, %112
%114 = trunc i64 %113 to i32
%115 = and i32 %114, 512
%116 = icmp eq i32 %115, 0
br i1 %116, label %117, label %119
117: ; preds = %108
%118 = add i64 %110, -1
br label %160
119: ; preds = %108
%120 = and i32 %114, 896
switch i32 %120, label %131 [
i32 640, label %121
i32 768, label %126
]
121: ; preds = %119
%122 = add i64 %110, -3
%123 = add i16 %84, 3
%124 = icmp slt i16 %123, 255
%125 = select i1 %124, i16 %123, i16 255
br label %160
126: ; preds = %119
%127 = add i64 %110, -3
%128 = add i16 %84, -3
%129 = icmp sgt i16 %128, 0
%130 = select i1 %129, i16 %128, i16 0
br label %160
131: ; preds = %119
%132 = and i32 %114, 960
switch i32 %132, label %148 [
i32 512, label %133
i32 576, label %138
i32 960, label %143
]
133: ; preds = %131
%134 = add i64 %110, -4
%135 = add i16 %84, 8
%136 = icmp slt i16 %135, 255
%137 = select i1 %136, i16 %135, i16 255
br label %160
138: ; preds = %131
%139 = add i64 %110, -4
%140 = add i16 %84, -8
%141 = icmp sgt i16 %140, 0
%142 = select i1 %141, i16 %140, i16 0
br label %160
143: ; preds = %131
%144 = add i64 %110, -4
%145 = add i16 %84, -20
%146 = icmp sgt i16 %145, 0
%147 = select i1 %146, i16 %145, i16 0
br label %160
148: ; preds = %131
%149 = and i32 %114, 992
%150 = icmp eq i32 %149, 896
br i1 %150, label %151, label %156
151: ; preds = %148
%152 = add i64 %110, -5
%153 = add i16 %84, 20
%154 = icmp slt i16 %153, 255
%155 = select i1 %154, i16 %153, i16 255
br label %160
156: ; preds = %148
%157 = trunc i64 %113 to i16
%158 = shl i16 %157, 3
%159 = and i16 %158, 248
br label %160
160: ; preds = %121, %133, %143, %156, %151, %138, %126, %117
%161 = phi i16 [ %84, %117 ], [ %125, %121 ], [ %130, %126 ], [ %137, %133 ], [ %142, %138 ], [ %147, %143 ], [ %155, %151 ], [ %159, %156 ]
%162 = phi i64 [ %118, %117 ], [ %122, %121 ], [ %127, %126 ], [ %134, %133 ], [ %139, %138 ], [ %144, %143 ], [ %152, %151 ], [ %112, %156 ]
%163 = icmp ult i64 %162, 10
br i1 %163, label %164, label %185
164: ; preds = %160
%165 = shl i64 %109, 8
%166 = getelementptr inbounds i8, i8* %111, i64 1
%167 = load i8, i8* %111
%168 = zext i8 %167 to i64
%169 = or i64 %165, %168
%170 = add nuw nsw i64 %162, 8
%171 = shl i64 %169, 8
%172 = getelementptr inbounds i8, i8* %111, i64 2
%173 = load i8, i8* %166
%174 = zext i8 %173 to i64
%175 = or i64 %171, %174
%176 = add nuw nsw i64 %162, 16
%177 = icmp ult i64 %162, 8
br i1 %177, label %178, label %185
178: ; preds = %164
%179 = shl i64 %175, 8
%180 = getelementptr inbounds i8, i8* %111, i64 3
%181 = load i8, i8* %172
%182 = zext i8 %181 to i64
%183 = or i64 %179, %182
%184 = add nuw nsw i64 %162, 24
br label %185
185: ; preds = %164, %178, %160
%186 = phi i64 [ %109, %160 ], [ %175, %164 ], [ %183, %178 ]
%187 = phi i64 [ %162, %160 ], [ %176, %164 ], [ %184, %178 ]
%188 = phi i8* [ %111, %160 ], [ %172, %164 ], [ %180, %178 ]
%189 = add i64 %187, -10
%190 = lshr i64 %186, %189
%191 = trunc i64 %190 to i32
%192 = and i32 %191, 512
%193 = icmp eq i32 %192, 0
br i1 %193, label %194, label %196
194: ; preds = %185
%195 = add i64 %187, -1
br label %237
196: ; preds = %185
%197 = and i32 %191, 896
switch i32 %197, label %208 [
i32 640, label %198
i32 768, label %203
]
198: ; preds = %196
%199 = add i64 %187, -3
%200 = add i16 %85, 3
%201 = icmp slt i16 %200, 255
%202 = select i1 %201, i16 %200, i16 255
br label %237
203: ; preds = %196
%204 = add i64 %187, -3
%205 = add i16 %85, -3
%206 = icmp sgt i16 %205, 0
%207 = select i1 %206, i16 %205, i16 0
br label %237
208: ; preds = %196
%209 = and i32 %191, 960
switch i32 %209, label %225 [
i32 512, label %210
i32 576, label %215
i32 960, label %220
]
210: ; preds = %208
%211 = add i64 %187, -4
%212 = add i16 %85, 8
%213 = icmp slt i16 %212, 255
%214 = select i1 %213, i16 %212, i16 255
br label %237
215: ; preds = %208
%216 = add i64 %187, -4
%217 = add i16 %85, -8
%218 = icmp sgt i16 %217, 0
%219 = select i1 %218, i16 %217, i16 0
br label %237
220: ; preds = %208
%221 = add i64 %187, -4
%222 = add i16 %85, -20
%223 = icmp sgt i16 %222, 0
%224 = select i1 %223, i16 %222, i16 0
br label %237
225: ; preds = %208
%226 = and i32 %191, 992
%227 = icmp eq i32 %226, 896
br i1 %227, label %228, label %233
228: ; preds = %225
%229 = add i64 %187, -5
%230 = add i16 %85, 20
%231 = icmp slt i16 %230, 255
%232 = select i1 %231, i16 %230, i16 255
br label %237
233: ; preds = %225
%234 = trunc i64 %190 to i16
%235 = shl i16 %234, 3
%236 = and i16 %235, 248
br label %237
237: ; preds = %198, %210, %220, %233, %228, %215, %203, %194
%238 = phi i16 [ %85, %194 ], [ %202, %198 ], [ %207, %203 ], [ %214, %210 ], [ %219, %215 ], [ %224, %220 ], [ %232, %228 ], [ %236, %233 ]
%239 = phi i64 [ %195, %194 ], [ %199, %198 ], [ %204, %203 ], [ %211, %210 ], [ %216, %215 ], [ %221, %220 ], [ %229, %228 ], [ %189, %233 ]
%240 = shl i16 %238, 8
%241 = add i16 %240, %161
%242 = getelementptr inbounds i8, i8* %1, i64 %79
%243 = bitcast i8* %242 to i16*
store i16 %241, i16* %243
%244 = add nuw nsw i32 %83, 2
%245 = add nsw i64 %79, 2
%246 = icmp slt i32 %244, %2
br i1 %246, label %78, label %247
247: ; preds = %237, %64
%248 = phi i64 [ %65, %64 ], [ %186, %237 ]
%249 = phi i64 [ %68, %64 ], [ %239, %237 ]
%250 = phi i8* [ %67, %64 ], [ %188, %237 ]
%251 = phi i64 [ %75, %64 ], [ %245, %237 ]
%252 = add nuw nsw i32 %14, 1
%253 = icmp eq i32 %252, %3
br i1 %253, label %254, label %9
254: ; preds = %247, %4
ret void
}