void RGB32toRGB444_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 int *)(s);
    da_rgb =
        ((8 + 4 < 8) ? (((((16 + 8 < 8) ? ((sa_rgb << ((8 - (16 + 8)) & 0x1F)) &
                                           (0x100 - (1U << (8 - 8))))
                                        : ((sa_rgb >> (((16 + 8) - 8) & 0x1F)) &
                                           (0x100 - (1U << (8 - 8)))))) &
                         (0x100 - (1U << (8 - 4)))) >>
                        ((8 - (8 + 4)) & 0x1F))
                     : (((((16 + 8 < 8) ? ((sa_rgb << ((8 - (16 + 8)) & 0x1F)) &
                                           (0x100 - (1U << (8 - 8))))
                                        : ((sa_rgb >> (((16 + 8) - 8) & 0x1F)) &
                                           (0x100 - (1U << (8 - 8)))))) &
                         (0x100 - (1U << (8 - 4))))
                        << (((8 + 4) - 8) & 0x1F))) |
        ((4 + 4 < 8) ? (((((8 + 8 < 8) ? ((sa_rgb << ((8 - (8 + 8)) & 0x1F)) &
                                          (0x100 - (1U << (8 - 8))))
                                       : ((sa_rgb >> (((8 + 8) - 8) & 0x1F)) &
                                          (0x100 - (1U << (8 - 8)))))) &
                         (0x100 - (1U << (8 - 4)))) >>
                        ((8 - (4 + 4)) & 0x1F))
                     : (((((8 + 8 < 8) ? ((sa_rgb << ((8 - (8 + 8)) & 0x1F)) &
                                          (0x100 - (1U << (8 - 8))))
                                       : ((sa_rgb >> (((8 + 8) - 8) & 0x1F)) &
                                          (0x100 - (1U << (8 - 8)))))) &
                         (0x100 - (1U << (8 - 4))))
                        << (((4 + 4) - 8) & 0x1F))) |
        ((0 + 4 < 8) ? (((((0 + 8 < 8) ? ((sa_rgb << ((8 - (0 + 8)) & 0x1F)) &
                                          (0x100 - (1U << (8 - 8))))
                                       : ((sa_rgb >> (((0 + 8) - 8) & 0x1F)) &
                                          (0x100 - (1U << (8 - 8)))))) &
                         (0x100 - (1U << (8 - 4)))) >>
                        ((8 - (0 + 4)) & 0x1F))
                     : (((((0 + 8 < 8) ? ((sa_rgb << ((8 - (0 + 8)) & 0x1F)) &
                                          (0x100 - (1U << (8 - 8))))
                                       : ((sa_rgb >> (((0 + 8) - 8) & 0x1F)) &
                                          (0x100 - (1U << (8 - 8)))))) &
                         (0x100 - (1U << (8 - 4))))
                        << (((0 + 4) - 8) & 0x1F)));
    s += 4;
    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 int *)(s);
      db_rgb =
          ((8 + 4 < 8)
               ? (((((16 + 8 < 8) ? ((sa_rgb << ((8 - (16 + 8)) & 0x1F)) &
                                     (0x100 - (1U << (8 - 8))))
                                  : ((sa_rgb >> (((16 + 8) - 8) & 0x1F)) &
                                     (0x100 - (1U << (8 - 8)))))) &
                   (0x100 - (1U << (8 - 4)))) >>
                  ((8 - (8 + 4)) & 0x1F))
               : (((((16 + 8 < 8) ? ((sa_rgb << ((8 - (16 + 8)) & 0x1F)) &
                                     (0x100 - (1U << (8 - 8))))
                                  : ((sa_rgb >> (((16 + 8) - 8) & 0x1F)) &
                                     (0x100 - (1U << (8 - 8)))))) &
                   (0x100 - (1U << (8 - 4))))
                  << (((8 + 4) - 8) & 0x1F))) |
          ((4 + 4 < 8) ? (((((8 + 8 < 8) ? ((sa_rgb << ((8 - (8 + 8)) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8))))
                                         : ((sa_rgb >> (((8 + 8) - 8) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8)))))) &
                           (0x100 - (1U << (8 - 4)))) >>
                          ((8 - (4 + 4)) & 0x1F))
                       : (((((8 + 8 < 8) ? ((sa_rgb << ((8 - (8 + 8)) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8))))
                                         : ((sa_rgb >> (((8 + 8) - 8) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8)))))) &
                           (0x100 - (1U << (8 - 4))))
                          << (((4 + 4) - 8) & 0x1F))) |
          ((0 + 4 < 8) ? (((((0 + 8 < 8) ? ((sa_rgb << ((8 - (0 + 8)) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8))))
                                         : ((sa_rgb >> (((0 + 8) - 8) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8)))))) &
                           (0x100 - (1U << (8 - 4)))) >>
                          ((8 - (0 + 4)) & 0x1F))
                       : (((((0 + 8 < 8) ? ((sa_rgb << ((8 - (0 + 8)) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8))))
                                         : ((sa_rgb >> (((0 + 8) - 8) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8)))))) &
                           (0x100 - (1U << (8 - 4))))
                          << (((0 + 4) - 8) & 0x1F)));
      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 int *)(s + 4);
      da_rgb =
          ((8 + 4 < 8)
               ? (((((16 + 8 < 8) ? ((sa_rgb << ((8 - (16 + 8)) & 0x1F)) &
                                     (0x100 - (1U << (8 - 8))))
                                  : ((sa_rgb >> (((16 + 8) - 8) & 0x1F)) &
                                     (0x100 - (1U << (8 - 8)))))) &
                   (0x100 - (1U << (8 - 4)))) >>
                  ((8 - (8 + 4)) & 0x1F))
               : (((((16 + 8 < 8) ? ((sa_rgb << ((8 - (16 + 8)) & 0x1F)) &
                                     (0x100 - (1U << (8 - 8))))
                                  : ((sa_rgb >> (((16 + 8) - 8) & 0x1F)) &
                                     (0x100 - (1U << (8 - 8)))))) &
                   (0x100 - (1U << (8 - 4))))
                  << (((8 + 4) - 8) & 0x1F))) |
          ((4 + 4 < 8) ? (((((8 + 8 < 8) ? ((sa_rgb << ((8 - (8 + 8)) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8))))
                                         : ((sa_rgb >> (((8 + 8) - 8) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8)))))) &
                           (0x100 - (1U << (8 - 4)))) >>
                          ((8 - (4 + 4)) & 0x1F))
                       : (((((8 + 8 < 8) ? ((sa_rgb << ((8 - (8 + 8)) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8))))
                                         : ((sa_rgb >> (((8 + 8) - 8) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8)))))) &
                           (0x100 - (1U << (8 - 4))))
                          << (((4 + 4) - 8) & 0x1F))) |
          ((0 + 4 < 8) ? (((((0 + 8 < 8) ? ((sa_rgb << ((8 - (0 + 8)) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8))))
                                         : ((sa_rgb >> (((0 + 8) - 8) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8)))))) &
                           (0x100 - (1U << (8 - 4)))) >>
                          ((8 - (0 + 4)) & 0x1F))
                       : (((((0 + 8 < 8) ? ((sa_rgb << ((8 - (0 + 8)) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8))))
                                         : ((sa_rgb >> (((0 + 8) - 8) & 0x1F)) &
                                            (0x100 - (1U << (8 - 8)))))) &
                           (0x100 - (1U << (8 - 4))))
                          << (((0 + 4) - 8) & 0x1F)));
      s += 2 * 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):
<RGB32toRGB444_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     15ae <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4ae>
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x6c(%rbp)
movl   $0x0,-0x70(%rbp)
movl   $0x0,-0x74(%rbp)
mov    -0x50(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
shr    $0x10,%eax
and    $0xff,%eax
and    $0xf0,%eax
shl    $0x4,%eax
mov    -0x74(%rbp),%ecx
shr    $0x8,%ecx
and    $0xff,%ecx
and    $0xf0,%ecx
shl    $0x0,%ecx
or     %ecx,%eax
mov    -0x74(%rbp),%ecx
shr    $0x0,%ecx
and    $0xff,%ecx
and    $0xf0,%ecx
shr    $0x4,%ecx
or     %ecx,%eax
mov    %eax,-0x64(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x50(%rbp)
mov    -0x60(%rbp),%ecx
mov    -0x54(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x54(%rbp)
cmp    $0x0,%eax
jne    1202 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x102>
jmp    1559 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x459>
jmp    1207 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x107>
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    127f <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x17f>
jmp    1559 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x459>
jmp    1284 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x184>
mov    -0x5c(%rbp),%ecx
mov    -0x58(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x58(%rbp)
cmp    $0x0,%eax
jge    122a <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x12a>
mov    -0x1c(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x50(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
shr    $0x10,%eax
and    $0xff,%eax
and    $0xf0,%eax
shl    $0x4,%eax
mov    -0x7c(%rbp),%ecx
shr    $0x8,%ecx
and    $0xff,%ecx
and    $0xf0,%ecx
shl    $0x0,%ecx
or     %ecx,%eax
mov    -0x7c(%rbp),%ecx
shr    $0x0,%ecx
and    $0xff,%ecx
and    $0xf0,%ecx
shr    $0x4,%ecx
or     %ecx,%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    137f <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x27f>
jmp    1559 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x459>
jmp    1384 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x284>
mov    -0x5c(%rbp),%ecx
mov    -0x58(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x58(%rbp)
cmp    $0x0,%eax
jge    132a <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x22a>
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    1419 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x319>
jmp    154d <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x44d>
jmp    141e <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x31e>
mov    -0x5c(%rbp),%ecx
mov    -0x58(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x58(%rbp)
cmp    $0x0,%eax
jge    13c4 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x2c4>
mov    -0x1c(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x50(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
shr    $0x10,%eax
and    $0xff,%eax
and    $0xf0,%eax
shl    $0x4,%eax
mov    -0x7c(%rbp),%ecx
shr    $0x8,%ecx
and    $0xff,%ecx
and    $0xf0,%ecx
shl    $0x0,%ecx
or     %ecx,%eax
mov    -0x7c(%rbp),%ecx
shr    $0x0,%ecx
and    $0xff,%ecx
and    $0xf0,%ecx
shr    $0x4,%ecx
or     %ecx,%eax
mov    %eax,-0x64(%rbp)
mov    -0x50(%rbp),%rax
add    $0x8,%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    1526 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x426>
jmp    154d <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x44d>
jmp    152b <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x42b>
mov    -0x5c(%rbp),%ecx
mov    -0x58(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x58(%rbp)
cmp    $0x0,%eax
jge    14d1 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x3d1>
mov    -0x1c(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
jmp    1207 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x107>
mov    -0x68(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0x6c(%rbp)
jmp    155e <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x45e>
mov    -0x60(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x60(%rbp)
cmp    $0x0,%eax
je     15a9 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4a9>
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    155e <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x45e>
jmp    15ae <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4ae>
pop    %rbp
ret

x86 assembly (clang, -O2):
<RGB32toRGB444_ROW2X_STRETCH2XPLUS>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdx,%r10
mov    %ecx,%edx
sar    %edx
lea    (%r9,%r9,1),%ebx
lea    (%rcx,%rcx,1),%r11d
mov    %r11d,%eax
mov    %rdx,-0x58(%rsp)
sub    %edx,%eax
cltd
mov    %rbx,-0x50(%rsp)
idiv   %ebx
test   %ecx,%ecx
je     15fe <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4fe>
mov    (%r8),%edx
mov    %edx,%ebp
shr    $0xc,%ebp
and    $0xf00,%ebp
mov    %edx,%ebx
shr    $0x8,%ebx
and    $0xf0,%ebx
or     %ebp,%ebx
shr    $0x4,%edx
and    $0xf,%edx
or     %ebx,%edx
mov    %ecx,%r13d
sub    %eax,%r13d
je     141c <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x31c>
mov    %rax,-0x40(%rsp)
add    $0x4,%r8
mov    %r8,-0x38(%rsp)
mov    -0x50(%rsp),%rax
sub    %eax,%r11d
lea    (%rcx,%rcx,2),%ebp
shl    $0x2,%r9d
sub    %r9d,%ebp
mov    %rcx,-0x10(%rsp)
lea    0x0(,%rcx,4),%ebx
lea    (%rax,%rax,2),%eax
sub    %eax,%ebx
mov    %r11,-0x18(%rsp)
mov    %rbp,-0x20(%rsp)
mov    %rbx,-0x28(%rsp)
mov    %rdi,-0x30(%rsp)
movzwl (%rdi),%ecx
mov    %edx,%eax
xor    %ecx,%eax
shr    %eax
and    $0x777,%eax
mov    %edx,-0x44(%rsp)
and    %edx,%ecx
add    %eax,%ecx
mov    %ecx,-0x5c(%rsp)
mov    -0x58(%rsp),%rax
lea    (%r11,%rax,1),%edi
mov    %rbp,%rdx
lea    0x0(%rbp,%rax,1),%edx
lea    (%rbx,%rax,1),%ecx
mov    $0x2,%r8d
mov    $0x4,%r11d
xor    %eax,%eax
mov    %r10,-0x8(%rsp)
nopw   0x0(%rax,%rax,1)
mov    %edx,%r9d
mov    %ecx,%r15d
mov    -0x44(%rsp),%edx
mov    %dx,(%r10,%rax,1)
mov    -0x5c(%rsp),%ecx
mov    %cx,(%rsi,%rax,1)
cmp    $0x1,%r13d
je     1427 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x327>
mov    %r8,%r14
mov    %edi,%ebx
mov    %r11,%rbp
add    $0x2,%rax
add    $0xffffffff,%r13d
add    $0x2,%r8
mov    -0x50(%rsp),%r10
sub    %r10d,%edi
add    $0x2,%r11
mov    %r9d,%edx
sub    %r10d,%edx
mov    %r15d,%ecx
sub    %r10d,%ecx
mov    %r13d,%r12d
mov    -0x58(%rsp),%r13
sub    %r10d,%r13d
mov    %r13,-0x58(%rsp)
mov    %r12d,%r13d
mov    -0x8(%rsp),%r10
jns    11f0 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0xf0>
mov    %ebx,%r8d
mov    -0x58(%rsp),%rdi
add    -0x10(%rsp),%edi
mov    -0x38(%rsp),%rcx
mov    (%rcx),%ecx
mov    %ecx,%ebx
shr    $0xc,%ebx
and    $0xf00,%ebx
mov    %ecx,%edx
shr    $0x8,%edx
and    $0xf0,%edx
or     %ebx,%edx
shr    $0x4,%ecx
and    $0xf,%ecx
or     %edx,%ecx
mov    %ecx,%ebx
mov    -0x44(%rsp),%edx
xor    %edx,%ebx
shr    %ebx
and    $0x777,%ebx
mov    %ecx,-0x5c(%rsp)
and    %ecx,%edx
add    %ebx,%edx
mov    -0x30(%rsp),%rcx
movzwl (%rcx,%rax,1),%ecx
mov    %edx,%eax
xor    %ecx,%eax
shr    %eax
and    $0x777,%eax
and    %edx,%ecx
add    %eax,%ecx
mov    %ecx,%r11d
nopl   (%rax)
mov    %dx,(%r10,%r14,1)
mov    %r11d,%ebx
mov    %bx,(%rsi,%r14,1)
cmp    $0x1,%r13d
je     1447 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x347>
mov    %rbp,%rcx
mov    %r9d,%r12d
mov    %r15d,%eax
add    $0x2,%r14
mov    -0x50(%rsp),%rbx
sub    %ebx,%r8d
add    $0xffffffff,%r13d
add    $0x2,%rbp
sub    %ebx,%r9d
sub    %ebx,%r15d
sub    %ebx,%edi
jns    12c0 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x1c0>
mov    -0x30(%rsp),%rdi
movzwl (%rdi,%r14,1),%ebx
mov    -0x5c(%rsp),%r14d
mov    %r14d,%ebp
xor    %ebx,%ebp
shr    %ebp
and    $0x777,%ebp
and    %r14d,%ebx
add    %ebp,%ebx
mov    %r8d,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r14w,(%r10,%rcx,1)
mov    %bx,(%rsi,%rcx,1)
cmp    $0x1,%r13d
je     1457 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x357>
mov    %eax,%r8d
add    $0x2,%rcx
mov    -0x50(%rsp),%rbp
sub    %ebp,%r12d
add    $0xffffffff,%r13d
sub    %ebp,%eax
sub    %ebp,%edx
jns    1330 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x230>
mov    %r8,-0x58(%rsp)
mov    -0x38(%rsp),%r8
mov    0x4(%r8),%edx
mov    %edx,%eax
shr    $0xc,%eax
and    $0xf00,%eax
mov    %edx,%ebx
shr    $0x8,%ebx
and    $0xf0,%ebx
or     %eax,%ebx
shr    $0x4,%edx
and    $0xf,%edx
or     %ebx,%edx
add    $0x8,%r8
mov    %edx,%eax
xor    %r14d,%eax
shr    %eax
and    $0x777,%eax
and    %edx,%r14d
add    %eax,%r14d
movzwl (%rdi,%rcx,1),%ebx
add    %rcx,%rdi
mov    %r14d,%eax
xor    %ebx,%eax
shr    %eax
and    $0x777,%eax
and    %r14d,%ebx
add    %eax,%ebx
add    %rcx,%r10
add    %rcx,%rsi
mov    -0x40(%rsp),%rax
mov    -0x18(%rsp),%r11
nopw   0x0(%rax,%rax,1)
mov    %r14w,(%r10)
mov    %bx,(%rsi)
cmp    $0x1,%r13d
je     161a <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x51a>
add    $0x2,%rdi
add    $0x2,%r10
add    $0x2,%rsi
mov    -0x50(%rsp),%r9
mov    -0x58(%rsp),%rcx
sub    %r9d,%ecx
mov    %rcx,-0x58(%rsp)
add    $0xffffffff,%r13d
sub    %r9d,%r12d
jns    13d0 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x2d0>
mov    %r8,-0x38(%rsp)
mov    -0x20(%rsp),%rbp
mov    -0x28(%rsp),%rbx
jmp    11a2 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0xa2>
xor    %ebx,%ebx
test   %eax,%eax
jne    1475 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x375>
jmp    15fe <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4fe>
add    %rax,%r10
add    $0x2,%r10
add    %rax,%rsi
add    $0x2,%rsi
mov    -0x40(%rsp),%rax
mov    -0x5c(%rsp),%ebx
test   %eax,%eax
jne    1475 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x375>
jmp    15fe <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4fe>
add    %r14,%r10
add    $0x2,%r10
add    %r14,%rsi
add    $0x2,%rsi
jmp    1468 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x368>
add    %rcx,%r10
add    $0x2,%r10
add    %rcx,%rsi
add    $0x2,%rsi
mov    %r14d,%edx
mov    -0x40(%rsp),%rax
test   %eax,%eax
je     15fe <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4fe>
lea    -0x1(%rax),%r9d
cmp    $0xf,%r9d
jb     1560 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x460>
lea    (%rsi,%r9,2),%rcx
add    $0x2,%rcx
cmp    %rcx,%r10
jae    14a1 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x3a1>
lea    (%r10,%r9,2),%rcx
add    $0x2,%rcx
cmp    %rcx,%rsi
jb     1560 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x460>
add    $0x1,%r9
mov    %r9,%rcx
and    $0xfffffffffffffff0,%rcx
mov    %edx,%r8d
movd   %edx,%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     1609 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x509>
mov    %rbp,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %edx,%edx
nopl   0x0(%rax)
movdqu %xmm0,(%r10,%rdx,1)
movdqu %xmm0,0x10(%r10,%rdx,1)
movdqu %xmm1,(%rsi,%rdx,1)
movdqu %xmm1,0x10(%rsi,%rdx,1)
movdqu %xmm0,0x20(%r10,%rdx,1)
movdqu %xmm0,0x30(%r10,%rdx,1)
movdqu %xmm1,0x20(%rsi,%rdx,1)
movdqu %xmm1,0x30(%rsi,%rdx,1)
add    $0x40,%rdx
add    $0xfffffffffffffffe,%rdi
jne    14f0 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x3f0>
test   $0x1,%bpl
je     154a <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x44a>
movdqu %xmm0,(%r10,%rdx,1)
movdqu %xmm0,0x10(%r10,%rdx,1)
movdqu %xmm1,(%rsi,%rdx,1)
movdqu %xmm1,0x10(%rsi,%rdx,1)
cmp    %rcx,%r9
je     15fe <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4fe>
mov    %r8d,%edx
sub    %ecx,%eax
lea    (%rsi,%rcx,2),%rsi
lea    (%r10,%rcx,2),%r10
lea    -0x1(%rax),%edi
test   $0x7,%al
je     1589 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x489>
mov    %eax,%ebp
and    $0x7,%ebp
xor    %ecx,%ecx
xchg   %ax,%ax
mov    %dx,(%r10)
add    $0x2,%r10
mov    %bx,(%rsi)
add    $0x2,%rsi
add    $0x1,%rcx
cmp    %ecx,%ebp
jne    1570 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x470>
sub    %ecx,%eax
cmp    $0x7,%edi
jb     15fe <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4fe>
mov    %eax,%eax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %dx,(%r10,%rcx,2)
mov    %bx,(%rsi,%rcx,2)
mov    %dx,0x2(%r10,%rcx,2)
mov    %bx,0x2(%rsi,%rcx,2)
mov    %dx,0x4(%r10,%rcx,2)
mov    %bx,0x4(%rsi,%rcx,2)
mov    %dx,0x6(%r10,%rcx,2)
mov    %bx,0x6(%rsi,%rcx,2)
mov    %dx,0x8(%r10,%rcx,2)
mov    %bx,0x8(%rsi,%rcx,2)
mov    %dx,0xa(%r10,%rcx,2)
mov    %bx,0xa(%rsi,%rcx,2)
mov    %dx,0xc(%r10,%rcx,2)
mov    %bx,0xc(%rsi,%rcx,2)
mov    %dx,0xe(%r10,%rcx,2)
mov    %bx,0xe(%rsi,%rcx,2)
add    $0x8,%rcx
cmp    %ecx,%eax
jne    15a0 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4a0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %edx,%edx
test   $0x1,%bpl
jne    1532 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x432>
jmp    154a <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x44a>
add    $0x2,%r10
add    $0x2,%rsi
mov    %r14d,%edx
test   %eax,%eax
jne    1475 <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x375>
jmp    15fe <RGB32toRGB444_ROW2X_STRETCH2XPLUS+0x4fe>

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

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