void RGB444toRGB444_ROW2X_STRETCH2XPLUS(unsigned char *dest_ptr_1,
                                        unsigned char *dest_ptr_12,
                                        unsigned char *dest_ptr_2, int dest_dx,
                                        unsigned char *src_ptr, int src_dx) {
  register unsigned char *d1 = dest_ptr_1;
  register unsigned char *d12 = dest_ptr_12;
  register unsigned char *d2 = dest_ptr_2;
  register unsigned char *s = src_ptr;
  register int count = dest_dx;
  register int limit = dest_dx >> 1;
  register int step = src_dx << 1;
  register int remainder = (2 * dest_dx - limit) / step;
  if (count) {
    register unsigned int da_rgb = 0;
    register unsigned int db_rgb = 0;
    register unsigned int dc_rgb = 0;
    register unsigned int dd_rgb = 0;
    register unsigned int sa_rgb = 0;
    sa_rgb = *(unsigned short *)(s);
    da_rgb = sa_rgb;
    s += 2;
    if (!(count -= remainder))
      goto end_of_row;
    while (1) {
      register unsigned int sb_rgb;
      sb_rgb = *(unsigned short *)(d1);
      dc_rgb =
          (((da_rgb ^ sb_rgb) >> 1) & (((1U << (8 + 4 - 1)) - (1U << 8)) |
                                       ((1U << (4 + 4 - 1)) - (1U << 4)) |
                                       ((1U << (0 + 4 - 1)) - (1U << 0)))) +
          (da_rgb & sb_rgb);
      do {
        d1 += 2;
        *(unsigned short *)(d2) = da_rgb;
        d2 += 2;
        *(unsigned short *)(d12) = dc_rgb;
        d12 += 2;
        if (!(--count))
          goto end_of_row;
      } while ((limit -= step) >= 0);
      limit += dest_dx;
      register unsigned int sa_rgb;
      sa_rgb = *(unsigned short *)(s);
      db_rgb = sa_rgb;
      da_rgb =
          (((da_rgb ^ db_rgb) >> 1) & (((1U << (8 + 4 - 1)) - (1U << 8)) |
                                       ((1U << (4 + 4 - 1)) - (1U << 4)) |
                                       ((1U << (0 + 4 - 1)) - (1U << 0)))) +
          (da_rgb & db_rgb);
      sb_rgb = *(unsigned short *)(d1);
      dc_rgb =
          (((da_rgb ^ sb_rgb) >> 1) & (((1U << (8 + 4 - 1)) - (1U << 8)) |
                                       ((1U << (4 + 4 - 1)) - (1U << 4)) |
                                       ((1U << (0 + 4 - 1)) - (1U << 0)))) +
          (da_rgb & sb_rgb);
      do {
        d1 += 2;
        *(unsigned short *)(d2) = da_rgb;
        d2 += 2;
        *(unsigned short *)(d12) = dc_rgb;
        d12 += 2;
        if (!(--count))
          goto end_of_row;
      } while ((limit -= step) >= 0);
      limit += dest_dx;
      sb_rgb = *(unsigned short *)(d1);
      dd_rgb =
          (((db_rgb ^ sb_rgb) >> 1) & (((1U << (8 + 4 - 1)) - (1U << 8)) |
                                       ((1U << (4 + 4 - 1)) - (1U << 4)) |
                                       ((1U << (0 + 4 - 1)) - (1U << 0)))) +
          (db_rgb & sb_rgb);
      do {
        d1 += 2;
        *(unsigned short *)(d2) = db_rgb;
        d2 += 2;
        *(unsigned short *)(d12) = dd_rgb;
        d12 += 2;
        if (!(--count))
          goto end_of_row_2;
      } while ((limit -= step) >= 0);
      limit += dest_dx;
      sa_rgb = *(unsigned short *)(s + 2);
      da_rgb = sa_rgb;
      s += 4;
      db_rgb =
          (((db_rgb ^ da_rgb) >> 1) & (((1U << (8 + 4 - 1)) - (1U << 8)) |
                                       ((1U << (4 + 4 - 1)) - (1U << 4)) |
                                       ((1U << (0 + 4 - 1)) - (1U << 0)))) +
          (db_rgb & da_rgb);
      sb_rgb = *(unsigned short *)(d1);
      dd_rgb =
          (((db_rgb ^ sb_rgb) >> 1) & (((1U << (8 + 4 - 1)) - (1U << 8)) |
                                       ((1U << (4 + 4 - 1)) - (1U << 4)) |
                                       ((1U << (0 + 4 - 1)) - (1U << 0)))) +
          (db_rgb & sb_rgb);
      do {
        d1 += 2;
        *(unsigned short *)(d2) = db_rgb;
        d2 += 2;
        *(unsigned short *)(d12) = dd_rgb;
        d12 += 2;
        if (!(--count))
          goto end_of_row_2;
      } while ((limit -= step) >= 0);
      limit += dest_dx;
    }
  end_of_row_2:
    da_rgb = db_rgb;
    dc_rgb = dd_rgb;
  end_of_row:
    while (remainder--) {
      *(unsigned short *)(d2) = da_rgb;
      d2 += 2;
      *(unsigned short *)(d12) = dc_rgb;
      d12 += 2;
    }
  }
}


x86 assembly (clang, -O0):
<RGB444toRGB444_ROW2X_STRETCH2XPLUS>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x2c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
sub    -0x58(%rbp),%eax
cltd
idivl  -0x5c(%rbp)
mov    %eax,-0x60(%rbp)
cmpl   $0x0,-0x54(%rbp)
je     14f7 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3f7>
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x6c(%rbp)
movl   $0x0,-0x70(%rbp)
movl   $0x0,-0x74(%rbp)
mov    -0x50(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x50(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x50(%rbp)
mov    -0x60(%rbp),%ecx
mov    -0x54(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x54(%rbp)
cmp    $0x0,%eax
jne    11c5 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0xc5>
jmp    14a2 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3a2>
jmp    11ca <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0xca>
mov    -0x38(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x78(%rbp)
mov    -0x64(%rbp),%eax
xor    -0x78(%rbp),%eax
shr    $0x1,%eax
and    $0x777,%eax
mov    -0x64(%rbp),%ecx
and    -0x78(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x38(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
mov    -0x64(%rbp),%eax
mov    %ax,%cx
mov    -0x48(%rbp),%rax
mov    %cx,(%rax)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
mov    -0x6c(%rbp),%eax
mov    %ax,%cx
mov    -0x40(%rbp),%rax
mov    %cx,(%rax)
mov    -0x40(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x40(%rbp)
mov    -0x54(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x54(%rbp)
cmp    $0x0,%eax
jne    1242 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x142>
jmp    14a2 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3a2>
jmp    1247 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x147>
mov    -0x5c(%rbp),%ecx
mov    -0x58(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x58(%rbp)
cmp    $0x0,%eax
jge    11ed <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0xed>
mov    -0x1c(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x50(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x64(%rbp),%eax
xor    -0x68(%rbp),%eax
shr    $0x1,%eax
and    $0x777,%eax
mov    -0x64(%rbp),%ecx
and    -0x68(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x64(%rbp)
mov    -0x38(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x78(%rbp)
mov    -0x64(%rbp),%eax
xor    -0x78(%rbp),%eax
shr    $0x1,%eax
and    $0x777,%eax
mov    -0x64(%rbp),%ecx
and    -0x78(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x38(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
mov    -0x64(%rbp),%eax
mov    %ax,%cx
mov    -0x48(%rbp),%rax
mov    %cx,(%rax)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
mov    -0x6c(%rbp),%eax
mov    %ax,%cx
mov    -0x40(%rbp),%rax
mov    %cx,(%rax)
mov    -0x40(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x40(%rbp)
mov    -0x54(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x54(%rbp)
cmp    $0x0,%eax
jne    1305 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x205>
jmp    14a2 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3a2>
jmp    130a <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x20a>
mov    -0x5c(%rbp),%ecx
mov    -0x58(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x58(%rbp)
cmp    $0x0,%eax
jge    12b0 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x1b0>
mov    -0x1c(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x38(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x78(%rbp)
mov    -0x68(%rbp),%eax
xor    -0x78(%rbp),%eax
shr    $0x1,%eax
and    $0x777,%eax
mov    -0x68(%rbp),%ecx
and    -0x78(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x70(%rbp)
mov    -0x38(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
mov    -0x68(%rbp),%eax
mov    %ax,%cx
mov    -0x48(%rbp),%rax
mov    %cx,(%rax)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
mov    -0x70(%rbp),%eax
mov    %ax,%cx
mov    -0x40(%rbp),%rax
mov    %cx,(%rax)
mov    -0x40(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x40(%rbp)
mov    -0x54(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x54(%rbp)
cmp    $0x0,%eax
jne    139f <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x29f>
jmp    1496 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x396>
jmp    13a4 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x2a4>
mov    -0x5c(%rbp),%ecx
mov    -0x58(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x58(%rbp)
cmp    $0x0,%eax
jge    134a <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x24a>
mov    -0x1c(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x50(%rbp),%rax
movzwl 0x2(%rax),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
mov    -0x68(%rbp),%eax
xor    -0x64(%rbp),%eax
shr    $0x1,%eax
and    $0x777,%eax
mov    -0x68(%rbp),%ecx
and    -0x64(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x68(%rbp)
mov    -0x38(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x78(%rbp)
mov    -0x68(%rbp),%eax
xor    -0x78(%rbp),%eax
shr    $0x1,%eax
and    $0x777,%eax
mov    -0x68(%rbp),%ecx
and    -0x78(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x70(%rbp)
mov    -0x38(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
mov    -0x68(%rbp),%eax
mov    %ax,%cx
mov    -0x48(%rbp),%rax
mov    %cx,(%rax)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
mov    -0x70(%rbp),%eax
mov    %ax,%cx
mov    -0x40(%rbp),%rax
mov    %cx,(%rax)
mov    -0x40(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x40(%rbp)
mov    -0x54(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x54(%rbp)
cmp    $0x0,%eax
jne    146f <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x36f>
jmp    1496 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x396>
jmp    1474 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x374>
mov    -0x5c(%rbp),%ecx
mov    -0x58(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x58(%rbp)
cmp    $0x0,%eax
jge    141a <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x31a>
mov    -0x1c(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
jmp    11ca <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0xca>
mov    -0x68(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0x6c(%rbp)
jmp    14a7 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3a7>
mov    -0x60(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x60(%rbp)
cmp    $0x0,%eax
je     14f2 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3f2>
mov    -0x64(%rbp),%eax
mov    %ax,%cx
mov    -0x48(%rbp),%rax
mov    %cx,(%rax)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
mov    -0x6c(%rbp),%eax
mov    %ax,%cx
mov    -0x40(%rbp),%rax
mov    %cx,(%rax)
mov    -0x40(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x40(%rbp)
jmp    14a7 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3a7>
jmp    14f7 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3f7>
pop    %rbp
ret

x86 assembly (clang, -O2):
<RGB444toRGB444_ROW2X_STRETCH2XPLUS>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdx,%r10
mov    %ecx,%r12d
sar    %r12d
lea    (%r9,%r9,1),%ebp
lea    (%rcx,%rcx,1),%ebx
mov    %ebx,%eax
sub    %r12d,%eax
cltd
mov    %rbp,-0x58(%rsp)
idiv   %ebp
test   %ecx,%ecx
je     159e <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x49e>
mov    %eax,%r11d
movzwl (%r8),%ebp
mov    %ecx,%r15d
sub    %eax,%r15d
je     13a7 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x2a7>
mov    %r11,-0x48(%rsp)
add    $0x2,%r8
mov    %r8,-0x40(%rsp)
mov    -0x58(%rsp),%rax
sub    %eax,%ebx
lea    (%rcx,%rcx,2),%r8d
shl    $0x2,%r9d
sub    %r9d,%r8d
mov    %rcx,-0x10(%rsp)
lea    0x0(,%rcx,4),%edx
lea    (%rax,%rax,2),%eax
sub    %eax,%edx
mov    %rbx,-0x18(%rsp)
mov    %r8,-0x20(%rsp)
mov    %rdx,-0x28(%rsp)
mov    %rdi,-0x30(%rsp)
movzwl (%rdi),%ecx
mov    %ebp,%eax
xor    %ecx,%eax
shr    %eax
and    $0x777,%eax
mov    %ebp,-0x4c(%rsp)
and    %ebp,%ecx
add    %eax,%ecx
mov    %ecx,-0x5c(%rsp)
lea    (%rbx,%r12,1),%ecx
lea    (%r8,%r12,1),%edi
mov    %r12,%r14
lea    (%rdx,%r12,1),%ebx
mov    $0x2,%r8d
mov    $0x4,%ebp
xor    %eax,%eax
mov    %r10,-0x8(%rsp)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %ecx,%edx
mov    %rbp,%r13
mov    -0x4c(%rsp),%ebp
mov    %bp,(%r10,%rax,1)
mov    -0x5c(%rsp),%ecx
mov    %cx,(%rsi,%rax,1)
cmp    $0x1,%r15d
je     13b3 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x2b3>
mov    %r8,%r12
mov    %edi,%r9d
mov    %ebx,%r11d
add    $0x2,%rax
add    $0xffffffff,%r15d
add    $0x2,%r8
mov    %edx,%ecx
mov    -0x58(%rsp),%r10
sub    %r10d,%ecx
lea    0x2(%r13),%rbp
sub    %r10d,%edi
sub    %r10d,%ebx
sub    %r10d,%r14d
mov    -0x8(%rsp),%r10
jns    11d0 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0xd0>
mov    %edx,%r8d
mov    %r14,%rdi
add    -0x10(%rsp),%edi
mov    -0x40(%rsp),%rcx
movzwl (%rcx),%ecx
mov    %ecx,-0x34(%rsp)
movzwl %cx,%edx
mov    -0x4c(%rsp),%ebp
mov    %ebp,%ecx
xor    %edx,%ecx
shr    %ecx
and    $0x777,%ecx
mov    %edx,-0x38(%rsp)
and    %edx,%ebp
add    %ecx,%ebp
mov    -0x30(%rsp),%rcx
movzwl (%rcx,%rax,1),%ecx
mov    %ebp,%eax
xor    %ecx,%eax
shr    %eax
and    $0x777,%eax
and    %ebp,%ecx
add    %eax,%ecx
mov    %ecx,-0x5c(%rsp)
mov    %bp,(%r10,%r12,1)
mov    -0x5c(%rsp),%ebx
mov    %bx,(%rsi,%r12,1)
cmp    $0x1,%r15d
je     13d4 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x2d4>
mov    %r13,%rdx
mov    %r9d,%r14d
mov    %r11d,%ecx
add    $0x2,%r12
mov    -0x58(%rsp),%rbx
sub    %ebx,%r8d
add    $0xffffffff,%r15d
add    $0x2,%r13
sub    %ebx,%r9d
sub    %ebx,%r11d
sub    %ebx,%edi
jns    1270 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x170>
mov    -0x30(%rsp),%rdi
movzwl (%rdi,%r12,1),%ebx
mov    %ebx,%ebp
mov    -0x34(%rsp),%r9d
xor    %r9d,%ebp
shr    %ebp
and    $0x777,%ebp
and    %r9d,%ebx
movzwl %bx,%ebx
add    %ebp,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r9w,(%r10,%rdx,1)
mov    %bx,(%rsi,%rdx,1)
cmp    $0x1,%r15d
je     13e4 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x2e4>
mov    %ecx,%r12d
add    $0x2,%rdx
mov    -0x58(%rsp),%rbp
sub    %ebp,%r14d
add    $0xffffffff,%r15d
sub    %ebp,%ecx
sub    %ebp,%r8d
jns    12e0 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x1e0>
mov    -0x40(%rsp),%r8
movzwl 0x2(%r8),%ebp
add    $0x4,%r8
mov    %ebp,%ecx
xor    %r9d,%ecx
shr    %ecx
and    $0x777,%ecx
and    %ebp,%r9d
add    %ecx,%r9d
movzwl (%rdi,%rdx,1),%ebx
add    %rdx,%rdi
mov    %r9d,%ecx
xor    %ebx,%ecx
shr    %ecx
and    $0x777,%ecx
and    %r9d,%ebx
add    %ecx,%ebx
add    %rdx,%r10
add    %rdx,%rsi
mov    -0x48(%rsp),%r11
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r9w,(%r10)
mov    %bx,(%rsi)
cmp    $0x1,%r15d
je     15ba <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x4ba>
add    $0x2,%rdi
add    $0x2,%r10
add    $0x2,%rsi
mov    -0x58(%rsp),%rcx
sub    %ecx,%r12d
add    $0xffffffff,%r15d
sub    %ecx,%r14d
jns    1360 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x260>
mov    %r8,-0x40(%rsp)
mov    -0x18(%rsp),%rbx
mov    -0x20(%rsp),%r8
mov    -0x28(%rsp),%rdx
jmp    1182 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x82>
xor    %ebx,%ebx
test   %r11d,%r11d
jne    1404 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x304>
jmp    159e <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x49e>
add    %rax,%r10
add    $0x2,%r10
add    %rax,%rsi
add    $0x2,%rsi
mov    -0x48(%rsp),%r11
mov    -0x5c(%rsp),%ebx
test   %r11d,%r11d
jne    1404 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x304>
jmp    159e <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x49e>
add    %r12,%r10
add    $0x2,%r10
add    %r12,%rsi
add    $0x2,%rsi
jmp    13f6 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x2f6>
add    %rdx,%r10
add    $0x2,%r10
add    %rdx,%rsi
add    $0x2,%rsi
mov    -0x38(%rsp),%ebp
mov    -0x48(%rsp),%r11
test   %r11d,%r11d
je     159e <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x49e>
lea    -0x1(%r11),%r9d
cmp    $0xf,%r9d
jb     14f1 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3f1>
lea    (%rsi,%r9,2),%rcx
add    $0x2,%rcx
cmp    %rcx,%r10
jae    1430 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x330>
lea    (%r10,%r9,2),%rcx
add    $0x2,%rcx
cmp    %rcx,%rsi
jb     14f1 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3f1>
add    $0x1,%r9
mov    %r9,%rcx
and    $0xfffffffffffffff0,%rcx
mov    %ebp,%r8d
movd   %ebp,%xmm0
pshuflw $0x0,%xmm0,%xmm0
pshufd $0x0,%xmm0,%xmm0
movd   %ebx,%xmm1
pshuflw $0x0,%xmm1,%xmm1
pshufd $0x0,%xmm1,%xmm1
lea    -0x10(%rcx),%rdx
mov    %rdx,%rbp
shr    $0x4,%rbp
add    $0x1,%rbp
test   %rdx,%rdx
je     15a9 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x4a9>
mov    %rbp,%rdx
and    $0xfffffffffffffffe,%rdx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movdqu %xmm0,(%r10,%rdi,1)
movdqu %xmm0,0x10(%r10,%rdi,1)
movdqu %xmm1,(%rsi,%rdi,1)
movdqu %xmm1,0x10(%rsi,%rdi,1)
movdqu %xmm0,0x20(%r10,%rdi,1)
movdqu %xmm0,0x30(%r10,%rdi,1)
movdqu %xmm1,0x20(%rsi,%rdi,1)
movdqu %xmm1,0x30(%rsi,%rdi,1)
add    $0x40,%rdi
add    $0xfffffffffffffffe,%rdx
jne    1480 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x380>
test   $0x1,%bpl
je     14da <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3da>
movdqu %xmm0,(%r10,%rdi,1)
movdqu %xmm0,0x10(%r10,%rdi,1)
movdqu %xmm1,(%rsi,%rdi,1)
movdqu %xmm1,0x10(%rsi,%rdi,1)
cmp    %rcx,%r9
je     159e <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x49e>
mov    %r8d,%ebp
sub    %ecx,%r11d
lea    (%rsi,%rcx,2),%rsi
lea    (%r10,%rcx,2),%r10
lea    -0x1(%r11),%edi
test   $0x7,%r11b
je     152a <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x42a>
mov    %r11d,%edx
and    $0x7,%edx
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %bp,(%r10)
add    $0x2,%r10
mov    %bx,(%rsi)
add    $0x2,%rsi
add    $0x1,%rcx
cmp    %ecx,%edx
jne    1510 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x410>
sub    %ecx,%r11d
cmp    $0x7,%edi
jb     159e <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x49e>
mov    %r11d,%eax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %bp,(%r10,%rcx,2)
mov    %bx,(%rsi,%rcx,2)
mov    %bp,0x2(%r10,%rcx,2)
mov    %bx,0x2(%rsi,%rcx,2)
mov    %bp,0x4(%r10,%rcx,2)
mov    %bx,0x4(%rsi,%rcx,2)
mov    %bp,0x6(%r10,%rcx,2)
mov    %bx,0x6(%rsi,%rcx,2)
mov    %bp,0x8(%r10,%rcx,2)
mov    %bx,0x8(%rsi,%rcx,2)
mov    %bp,0xa(%r10,%rcx,2)
mov    %bx,0xa(%rsi,%rcx,2)
mov    %bp,0xc(%r10,%rcx,2)
mov    %bx,0xc(%rsi,%rcx,2)
mov    %bp,0xe(%r10,%rcx,2)
mov    %bx,0xe(%rsi,%rcx,2)
add    $0x8,%rcx
cmp    %ecx,%eax
jne    1540 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x440>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %edi,%edi
test   $0x1,%bpl
jne    14c2 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3c2>
jmp    14da <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x3da>
add    $0x2,%r10
add    $0x2,%rsi
mov    %r9d,%ebp
test   %r11d,%r11d
jne    1404 <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x304>
jmp    159e <RGB444toRGB444_ROW2X_STRETCH2XPLUS+0x49e>

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

LLVM IR (-O2):
define void @RGB444toRGB444_ROW2X_STRETCH2XPLUS(i8* nocapture %0, i8* nocapture writeonly %1, i8* nocapture writeonly %2, i32 %3, i8* nocapture %4, i32 %5) {
%7 = ashr i32 %3, 1
%8 = shl i32 %5, 1
%9 = shl nsw i32 %3, 1
%10 = sub nsw i32 %9, %7
%11 = sdiv i32 %10, %8
%12 = icmp eq i32 %3, 0
br i1 %12, label %314, label %13
13: ; preds = %6
%14 = bitcast i8* %4 to i16*
%15 = load i16, i16* %14
%16 = zext i16 %15 to i32
%17 = sub nsw i32 %3, %11
%18 = icmp eq i32 %17, 0
br i1 %18, label %163, label %19
19: ; preds = %13
%20 = getelementptr inbounds i8, i8* %4, i64 2
br label %21
21: ; preds = %19, %159
%22 = phi i8* [ %151, %159 ], [ %2, %19 ]
%23 = phi i8* [ %125, %159 ], [ %20, %19 ]
%24 = phi i32 [ %154, %159 ], [ %17, %19 ]
%25 = phi i32 [ %160, %159 ], [ %7, %19 ]
%26 = phi i8* [ %153, %159 ], [ %1, %19 ]
%27 = phi i32 [ %124, %159 ], [ %16, %19 ]
%28 = phi i8* [ %149, %159 ], [ %0, %19 ]
%29 = bitcast i8* %28 to i16*
%30 = load i16, i16* %29
%31 = zext i16 %30 to i32
%32 = xor i32 %27, %31
%33 = lshr i32 %32, 1
%34 = and i32 %33, 1911
%35 = and i32 %27, %31
%36 = add nuw nsw i32 %34, %35
%37 = trunc i32 %27 to i16
%38 = trunc i32 %36 to i16
br label %39
39: ; preds = %52, %21
%40 = phi i8* [ %22, %21 ], [ %47, %52 ]
%41 = phi i32 [ %24, %21 ], [ %50, %52 ]
%42 = phi i32 [ %25, %21 ], [ %53, %52 ]
%43 = phi i8* [ %26, %21 ], [ %49, %52 ]
%44 = phi i8* [ %28, %21 ], [ %45, %52 ]
%45 = getelementptr inbounds i8, i8* %44, i64 2
%46 = bitcast i8* %40 to i16*
store i16 %37, i16* %46
%47 = getelementptr inbounds i8, i8* %40, i64 2
%48 = bitcast i8* %43 to i16*
store i16 %38, i16* %48
%49 = getelementptr inbounds i8, i8* %43, i64 2
%50 = add nsw i32 %41, -1
%51 = icmp eq i32 %50, 0
br i1 %51, label %163, label %52
52: ; preds = %39
%53 = sub nsw i32 %42, %8
%54 = icmp sgt i32 %53, -1
br i1 %54, label %39, label %55
55: ; preds = %52
%56 = add nsw i32 %53, %3
%57 = bitcast i8* %23 to i16*
%58 = load i16, i16* %57
%59 = zext i16 %58 to i32
%60 = xor i32 %27, %59
%61 = lshr i32 %60, 1
%62 = and i32 %61, 1911
%63 = and i32 %27, %59
%64 = add nuw nsw i32 %62, %63
%65 = bitcast i8* %45 to i16*
%66 = load i16, i16* %65
%67 = zext i16 %66 to i32
%68 = xor i32 %64, %67
%69 = lshr i32 %68, 1
%70 = and i32 %69, 1911
%71 = and i32 %64, %67
%72 = add nuw nsw i32 %70, %71
%73 = trunc i32 %64 to i16
%74 = trunc i32 %72 to i16
br label %75
75: ; preds = %88, %55
%76 = phi i8* [ %47, %55 ], [ %83, %88 ]
%77 = phi i32 [ %50, %55 ], [ %86, %88 ]
%78 = phi i32 [ %56, %55 ], [ %89, %88 ]
%79 = phi i8* [ %49, %55 ], [ %85, %88 ]
%80 = phi i8* [ %45, %55 ], [ %81, %88 ]
%81 = getelementptr inbounds i8, i8* %80, i64 2
%82 = bitcast i8* %76 to i16*
store i16 %73, i16* %82
%83 = getelementptr inbounds i8, i8* %76, i64 2
%84 = bitcast i8* %79 to i16*
store i16 %74, i16* %84
%85 = getelementptr inbounds i8, i8* %79, i64 2
%86 = add nsw i32 %77, -1
%87 = icmp eq i32 %86, 0
br i1 %87, label %163, label %88
88: ; preds = %75
%89 = sub nsw i32 %78, %8
%90 = icmp sgt i32 %89, -1
br i1 %90, label %75, label %91
91: ; preds = %88
%92 = add nsw i32 %89, %3
%93 = bitcast i8* %81 to i16*
%94 = load i16, i16* %93
%95 = xor i16 %94, %58
%96 = lshr i16 %95, 1
%97 = and i16 %96, 1911
%98 = zext i16 %97 to i32
%99 = and i16 %94, %58
%100 = zext i16 %99 to i32
%101 = add nuw nsw i32 %98, %100
%102 = trunc i32 %101 to i16
br label %103
103: ; preds = %116, %91
%104 = phi i8* [ %83, %91 ], [ %111, %116 ]
%105 = phi i32 [ %86, %91 ], [ %114, %116 ]
%106 = phi i32 [ %92, %91 ], [ %117, %116 ]
%107 = phi i8* [ %85, %91 ], [ %113, %116 ]
%108 = phi i8* [ %81, %91 ], [ %109, %116 ]
%109 = getelementptr inbounds i8, i8* %108, i64 2
%110 = bitcast i8* %104 to i16*
store i16 %58, i16* %110
%111 = getelementptr inbounds i8, i8* %104, i64 2
%112 = bitcast i8* %107 to i16*
store i16 %102, i16* %112
%113 = getelementptr inbounds i8, i8* %107, i64 2
%114 = add nsw i32 %105, -1
%115 = icmp eq i32 %114, 0
br i1 %115, label %161, label %116
116: ; preds = %103
%117 = sub nsw i32 %106, %8
%118 = icmp sgt i32 %117, -1
br i1 %118, label %103, label %119
119: ; preds = %116
%120 = add nsw i32 %117, %3
%121 = getelementptr inbounds i8, i8* %23, i64 2
%122 = bitcast i8* %121 to i16*
%123 = load i16, i16* %122
%124 = zext i16 %123 to i32
%125 = getelementptr inbounds i8, i8* %23, i64 4
%126 = xor i16 %123, %58
%127 = lshr i16 %126, 1
%128 = and i16 %127, 1911
%129 = zext i16 %128 to i32
%130 = and i16 %123, %58
%131 = zext i16 %130 to i32
%132 = add nuw nsw i32 %129, %131
%133 = bitcast i8* %109 to i16*
%134 = load i16, i16* %133
%135 = zext i16 %134 to i32
%136 = xor i32 %132, %135
%137 = lshr i32 %136, 1
%138 = and i32 %137, 1911
%139 = and i32 %132, %135
%140 = add nuw nsw i32 %138, %139
%141 = trunc i32 %132 to i16
%142 = trunc i32 %140 to i16
br label %143
143: ; preds = %156, %119
%144 = phi i8* [ %111, %119 ], [ %151, %156 ]
%145 = phi i32 [ %114, %119 ], [ %154, %156 ]
%146 = phi i32 [ %120, %119 ], [ %157, %156 ]
%147 = phi i8* [ %113, %119 ], [ %153, %156 ]
%148 = phi i8* [ %109, %119 ], [ %149, %156 ]
%149 = getelementptr inbounds i8, i8* %148, i64 2
%150 = bitcast i8* %144 to i16*
store i16 %141, i16* %150
%151 = getelementptr inbounds i8, i8* %144, i64 2
%152 = bitcast i8* %147 to i16*
store i16 %142, i16* %152
%153 = getelementptr inbounds i8, i8* %147, i64 2
%154 = add nsw i32 %145, -1
%155 = icmp eq i32 %154, 0
br i1 %155, label %163, label %156
156: ; preds = %143
%157 = sub nsw i32 %146, %8
%158 = icmp sgt i32 %157, -1
br i1 %158, label %143, label %159
159: ; preds = %156
%160 = add nsw i32 %157, %3
br label %21
161: ; preds = %103
%162 = zext i16 %58 to i32
br label %163
163: ; preds = %39, %75, %143, %161, %13
%164 = phi i8* [ %2, %13 ], [ %111, %161 ], [ %151, %143 ], [ %83, %75 ], [ %47, %39 ]
%165 = phi i8* [ %1, %13 ], [ %113, %161 ], [ %153, %143 ], [ %85, %75 ], [ %49, %39 ]
%166 = phi i32 [ %16, %13 ], [ %162, %161 ], [ %132, %143 ], [ %64, %75 ], [ %27, %39 ]
%167 = phi i32 [ 0, %13 ], [ %101, %161 ], [ %140, %143 ], [ %72, %75 ], [ %36, %39 ]
%168 = icmp eq i32 %11, 0
br i1 %168, label %314, label %169
169: ; preds = %163
%170 = trunc i32 %166 to i16
%171 = trunc i32 %167 to i16
%172 = add i32 %11, -1
%173 = zext i32 %172 to i64
%174 = add nuw nsw i64 %173, 1
%175 = icmp ult i32 %172, 15
br i1 %175, label %252, label %176
176: ; preds = %169
%177 = add i32 %11, -1
%178 = zext i32 %177 to i64
%179 = shl nuw nsw i64 %178, 1
%180 = add nuw nsw i64 %179, 2
%181 = getelementptr i8, i8* %164, i64 %180
%182 = getelementptr i8, i8* %165, i64 %180
%183 = icmp ult i8* %164, %182
%184 = icmp ult i8* %165, %181
%185 = and i1 %183, %184
br i1 %185, label %252, label %186
186: ; preds = %176
%187 = and i64 %174, 8589934576
%188 = trunc i64 %187 to i32
%189 = sub i32 %11, %188
%190 = shl nuw nsw i64 %187, 1
%191 = getelementptr i8, i8* %165, i64 %190
%192 = shl nuw nsw i64 %187, 1
%193 = getelementptr i8, i8* %164, i64 %192
%194 = insertelement <8 x i16> poison, i16 %170, i64 0
%195 = shufflevector <8 x i16> %194, <8 x i16> poison, <8 x i32> zeroinitializer
%196 = insertelement <8 x i16> poison, i16 %170, i64 0
%197 = shufflevector <8 x i16> %196, <8 x i16> poison, <8 x i32> zeroinitializer
%198 = insertelement <8 x i16> poison, i16 %171, i64 0
%199 = shufflevector <8 x i16> %198, <8 x i16> poison, <8 x i32> zeroinitializer
%200 = insertelement <8 x i16> poison, i16 %171, i64 0
%201 = shufflevector <8 x i16> %200, <8 x i16> poison, <8 x i32> zeroinitializer
%202 = add nsw i64 %187, -16
%203 = lshr exact i64 %202, 4
%204 = add nuw nsw i64 %203, 1
%205 = and i64 %204, 1
%206 = icmp eq i64 %202, 0
br i1 %206, label %238, label %207
207: ; preds = %186
%208 = and i64 %204, 2305843009213693950
br label %209
209: ; preds = %209, %207
%210 = phi i64 [ 0, %207 ], [ %233, %209 ]
%211 = phi i64 [ 0, %207 ], [ %234, %209 ]
%212 = shl i64 %210, 1
%213 = getelementptr i8, i8* %165, i64 %212
%214 = shl i64 %210, 1
%215 = getelementptr i8, i8* %164, i64 %214
%216 = bitcast i8* %215 to <8 x i16>*
store <8 x i16> %195, <8 x i16>* %216
%217 = getelementptr i8, i8* %215, i64 16
%218 = bitcast i8* %217 to <8 x i16>*
store <8 x i16> %197, <8 x i16>* %218
%219 = bitcast i8* %213 to <8 x i16>*
store <8 x i16> %199, <8 x i16>* %219
%220 = getelementptr i8, i8* %213, i64 16
%221 = bitcast i8* %220 to <8 x i16>*
store <8 x i16> %201, <8 x i16>* %221
%222 = or i64 %210, 16
%223 = shl i64 %222, 1
%224 = getelementptr i8, i8* %165, i64 %223
%225 = shl i64 %222, 1
%226 = getelementptr i8, i8* %164, i64 %225
%227 = bitcast i8* %226 to <8 x i16>*
store <8 x i16> %195, <8 x i16>* %227
%228 = getelementptr i8, i8* %226, i64 16
%229 = bitcast i8* %228 to <8 x i16>*
store <8 x i16> %197, <8 x i16>* %229
%230 = bitcast i8* %224 to <8 x i16>*
store <8 x i16> %199, <8 x i16>* %230
%231 = getelementptr i8, i8* %224, i64 16
%232 = bitcast i8* %231 to <8 x i16>*
store <8 x i16> %201, <8 x i16>* %232
%233 = add nuw i64 %210, 32
%234 = add i64 %211, 2
%235 = icmp eq i64 %234, %208
br i1 %235, label %236, label %209
236: ; preds = %209
%237 = shl i64 %233, 1
br label %238
238: ; preds = %236, %186
%239 = phi i64 [ 0, %186 ], [ %237, %236 ]
%240 = icmp eq i64 %205, 0
br i1 %240, label %250, label %241
241: ; preds = %238
%242 = getelementptr i8, i8* %165, i64 %239
%243 = getelementptr i8, i8* %164, i64 %239
%244 = bitcast i8* %243 to <8 x i16>*
store <8 x i16> %195, <8 x i16>* %244
%245 = getelementptr i8, i8* %243, i64 16
%246 = bitcast i8* %245 to <8 x i16>*
store <8 x i16> %197, <8 x i16>* %246
%247 = bitcast i8* %242 to <8 x i16>*
store <8 x i16> %199, <8 x i16>* %247
%248 = getelementptr i8, i8* %242, i64 16
%249 = bitcast i8* %248 to <8 x i16>*
store <8 x i16> %201, <8 x i16>* %249
br label %250
250: ; preds = %238, %241
%251 = icmp eq i64 %174, %187
br i1 %251, label %314, label %252
252: ; preds = %176, %169, %250
%253 = phi i32 [ %11, %176 ], [ %11, %169 ], [ %189, %250 ]
%254 = phi i8* [ %165, %176 ], [ %165, %169 ], [ %191, %250 ]
%255 = phi i8* [ %164, %176 ], [ %164, %169 ], [ %193, %250 ]
%256 = add i32 %253, -1
%257 = and i32 %253, 7
%258 = icmp eq i32 %257, 0
br i1 %258, label %271, label %259
259: ; preds = %252, %259
%260 = phi i32 [ %264, %259 ], [ %253, %252 ]
%261 = phi i8* [ %268, %259 ], [ %254, %252 ]
%262 = phi i8* [ %266, %259 ], [ %255, %252 ]
%263 = phi i32 [ %269, %259 ], [ 0, %252 ]
%264 = add nsw i32 %260, -1
%265 = bitcast i8* %262 to i16*
store i16 %170, i16* %265
%266 = getelementptr inbounds i8, i8* %262, i64 2
%267 = bitcast i8* %261 to i16*
store i16 %171, i16* %267
%268 = getelementptr inbounds i8, i8* %261, i64 2
%269 = add i32 %263, 1
%270 = icmp eq i32 %269, %257
br i1 %270, label %271, label %259
271: ; preds = %259, %252
%272 = phi i32 [ %253, %252 ], [ %264, %259 ]
%273 = phi i8* [ %254, %252 ], [ %268, %259 ]
%274 = phi i8* [ %255, %252 ], [ %266, %259 ]
%275 = icmp ult i32 %256, 7
br i1 %275, label %314, label %276
276: ; preds = %271, %276
%277 = phi i32 [ %308, %276 ], [ %272, %271 ]
%278 = phi i8* [ %312, %276 ], [ %273, %271 ]
%279 = phi i8* [ %310, %276 ], [ %274, %271 ]
%280 = bitcast i8* %279 to i16*
store i16 %170, i16* %280
%281 = getelementptr inbounds i8, i8* %279, i64 2
%282 = bitcast i8* %278 to i16*
store i16 %171, i16* %282
%283 = getelementptr inbounds i8, i8* %278, i64 2
%284 = bitcast i8* %281 to i16*
store i16 %170, i16* %284
%285 = getelementptr inbounds i8, i8* %279, i64 4
%286 = bitcast i8* %283 to i16*
store i16 %171, i16* %286
%287 = getelementptr inbounds i8, i8* %278, i64 4
%288 = bitcast i8* %285 to i16*
store i16 %170, i16* %288
%289 = getelementptr inbounds i8, i8* %279, i64 6
%290 = bitcast i8* %287 to i16*
store i16 %171, i16* %290
%291 = getelementptr inbounds i8, i8* %278, i64 6
%292 = bitcast i8* %289 to i16*
store i16 %170, i16* %292
%293 = getelementptr inbounds i8, i8* %279, i64 8
%294 = bitcast i8* %291 to i16*
store i16 %171, i16* %294
%295 = getelementptr inbounds i8, i8* %278, i64 8
%296 = bitcast i8* %293 to i16*
store i16 %170, i16* %296
%297 = getelementptr inbounds i8, i8* %279, i64 10
%298 = bitcast i8* %295 to i16*
store i16 %171, i16* %298
%299 = getelementptr inbounds i8, i8* %278, i64 10
%300 = bitcast i8* %297 to i16*
store i16 %170, i16* %300
%301 = getelementptr inbounds i8, i8* %279, i64 12
%302 = bitcast i8* %299 to i16*
store i16 %171, i16* %302
%303 = getelementptr inbounds i8, i8* %278, i64 12
%304 = bitcast i8* %301 to i16*
store i16 %170, i16* %304
%305 = getelementptr inbounds i8, i8* %279, i64 14
%306 = bitcast i8* %303 to i16*
store i16 %171, i16* %306
%307 = getelementptr inbounds i8, i8* %278, i64 14
%308 = add nsw i32 %277, -8
%309 = bitcast i8* %305 to i16*
store i16 %170, i16* %309
%310 = getelementptr inbounds i8, i8* %279, i64 16
%311 = bitcast i8* %307 to i16*
store i16 %171, i16* %311
%312 = getelementptr inbounds i8, i8* %278, i64 16
%313 = icmp eq i32 %308, 0
br i1 %313, label %314, label %276
314: ; preds = %271, %276, %250, %163, %6
ret void
}