void dblineXRGBtoRGB565x2(unsigned char *d1, unsigned char *d2, int dest_x,
                          unsigned char *s1, unsigned char *s2, int src_x,
                          int dx) {
  register unsigned int a, b, c, d, e, f;
  register unsigned int w, x, y, z;
  if (dest_x & 1) {
    a = *(unsigned int *)s1;
    b = *(unsigned int *)(s1 + 4);
    w = a;
    x = a + b;
    *(unsigned int *)d1 = ((w & 0x000000f8) >> 3) | ((w & 0x0007e000) >> 8) |
                          ((w & 0x3e000000) >> 14) | ((x & 0x000001f0) << 12) |
                          ((x & 0x000fc000) << 7) | ((x & 0x7c000000) << 1);
    c = *(unsigned int *)s2;
    d = *(unsigned int *)(s2 + 4);
    w = a + c;
    x = a + b + c + d;
    *(unsigned int *)d2 = ((w & 0x000001f0) >> 4) | ((w & 0x000fc000) >> 9) |
                          ((w & 0x7c000000) >> 15) | ((x & 0x000003e0) << 11) |
                          ((x & 0x001f8000) << 6) | ((x & 0xf8000000) << 0);
    s1 += 4;
    s2 += 4;
    d1 += 2 * 2;
    d2 += 2 * 2;
    dx -= 1;
  }
  while (dx > 2) {
    a = *(unsigned int *)s1;
    b = *(unsigned int *)(s1 + 4);
    e = *(unsigned int *)(s1 + 2 * 4);
    w = a;
    x = a + b;
    y = b;
    z = b + e;
    *(unsigned int *)d1 = ((w & 0x000000f8) >> 3) | ((w & 0x0007e000) >> 8) |
                          ((w & 0x3e000000) >> 14) | ((x & 0x000001f0) << 12) |
                          ((x & 0x000fc000) << 7) | ((x & 0x7c000000) << 1);
    *(unsigned int *)(d1 + 2 * 2) =
        ((y & 0x000000f8) >> 3) | ((y & 0x0007e000) >> 8) |
        ((y & 0x3e000000) >> 14) | ((z & 0x000001f0) << 12) |
        ((z & 0x000fc000) << 7) | ((z & 0x7c000000) << 1);
    c = *(unsigned int *)s2;
    d = *(unsigned int *)(s2 + 4);
    f = *(unsigned int *)(s2 + 2 * 4);
    w = a + c;
    x = a + b + c + d;
    y = b + d;
    z = b + e + d + f;
    *(unsigned int *)d2 = ((w & 0x000001f0) >> 4) | ((w & 0x000fc000) >> 9) |
                          ((w & 0x7c000000) >> 15) | ((x & 0x000003e0) << 11) |
                          ((x & 0x001f8000) << 6) | ((x & 0xf8000000) << 0);
    *(unsigned int *)(d2 + 2 * 2) =
        ((y & 0x000001f0) >> 4) | ((y & 0x000fc000) >> 9) |
        ((y & 0x7c000000) >> 15) | ((z & 0x000003e0) << 11) |
        ((z & 0x001f8000) << 6) | ((z & 0xf8000000) << 0);
    s1 += 2 * 4;
    s2 += 2 * 4;
    d1 += 4 * 2;
    d2 += 4 * 2;
    dx -= 2;
  }
  if (dx > 1) {
    a = *(unsigned int *)s1;
    b = *(unsigned int *)(s1 + 4);
    e = b;
    w = a;
    x = a + b;
    y = b;
    z = b + e;
    *(unsigned int *)d1 = ((w & 0x000000f8) >> 3) | ((w & 0x0007e000) >> 8) |
                          ((w & 0x3e000000) >> 14) | ((x & 0x000001f0) << 12) |
                          ((x & 0x000fc000) << 7) | ((x & 0x7c000000) << 1);
    *(unsigned int *)(d1 + 2 * 2) =
        ((y & 0x000000f8) >> 3) | ((y & 0x0007e000) >> 8) |
        ((y & 0x3e000000) >> 14) | ((z & 0x000001f0) << 12) |
        ((z & 0x000fc000) << 7) | ((z & 0x7c000000) << 1);
    c = *(unsigned int *)s2;
    d = *(unsigned int *)(s2 + 4);
    f = d;
    w = a + c;
    x = a + b + c + d;
    y = b + d;
    z = b + e + d + f;
    *(unsigned int *)d2 = ((w & 0x000001f0) >> 4) | ((w & 0x000fc000) >> 9) |
                          ((w & 0x7c000000) >> 15) | ((x & 0x000003e0) << 11) |
                          ((x & 0x001f8000) << 6) | ((x & 0xf8000000) << 0);
    *(unsigned int *)(d2 + 2 * 2) =
        ((y & 0x000001f0) >> 4) | ((y & 0x000fc000) >> 9) |
        ((y & 0x7c000000) >> 15) | ((z & 0x000003e0) << 11) |
        ((z & 0x001f8000) << 6) | ((z & 0xf8000000) << 0);
  } else {
    a = *(unsigned int *)s1;
    b = a;
    w = a;
    x = a + b;
    *(unsigned int *)d1 = ((w & 0x000000f8) >> 3) | ((w & 0x0007e000) >> 8) |
                          ((w & 0x3e000000) >> 14) | ((x & 0x000001f0) << 12) |
                          ((x & 0x000fc000) << 7) | ((x & 0x7c000000) << 1);
    c = *(unsigned int *)s2;
    d = c;
    w = a + c;
    x = a + b + c + d;
    *(unsigned int *)d2 = ((w & 0x000001f0) >> 4) | ((w & 0x000fc000) >> 9) |
                          ((w & 0x7c000000) >> 15) | ((x & 0x000003e0) << 11) |
                          ((x & 0x001f8000) << 6) | ((x & 0xf8000000) << 0);
  }
}


x86 assembly (clang, -O0):
<dblineXRGBtoRGB565x2>:
push   %rbp
mov    %rsp,%rbp
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    -0x14(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1259 <dblineXRGBtoRGB565x2+0x159>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%ecx
and    $0xf8,%ecx
shr    $0x3,%ecx
mov    -0x48(%rbp),%eax
and    $0x7e000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xe,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xfc000,%eax
shl    $0x7,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x1,%eax
or     %eax,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x30(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
add    -0x38(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%ecx
and    $0x1f0,%ecx
shr    $0x4,%ecx
mov    -0x48(%rbp),%eax
and    $0xfc000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7c000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000000,%eax
shl    $0x0,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x10(%rbp)
mov    0x10(%rbp),%eax
sub    $0x1,%eax
mov    %eax,0x10(%rbp)
jmp    125e <dblineXRGBtoRGB565x2+0x15e>
cmpl   $0x2,0x10(%rbp)
jle    147c <dblineXRGBtoRGB565x2+0x37c>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x48(%rbp),%ecx
and    $0xf8,%ecx
shr    $0x3,%ecx
mov    -0x48(%rbp),%eax
and    $0x7e000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xe,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xfc000,%eax
shl    $0x7,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x1,%eax
or     %eax,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x50(%rbp),%ecx
and    $0xf8,%ecx
shr    $0x3,%ecx
mov    -0x50(%rbp),%eax
and    $0x7e000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x50(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xe,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0xfc000,%eax
shl    $0x7,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x1,%eax
or     %eax,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x44(%rbp)
mov    -0x30(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
add    -0x38(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
add    -0x3c(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x48(%rbp),%ecx
and    $0x1f0,%ecx
shr    $0x4,%ecx
mov    -0x48(%rbp),%eax
and    $0xfc000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7c000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000000,%eax
shl    $0x0,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x50(%rbp),%ecx
and    $0x1f0,%ecx
shr    $0x4,%ecx
mov    -0x50(%rbp),%eax
and    $0xfc000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x50(%rbp),%eax
and    $0x7c000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x1f8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0xf8000000,%eax
shl    $0x0,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    0x10(%rbp),%eax
sub    $0x2,%eax
mov    %eax,0x10(%rbp)
jmp    125e <dblineXRGBtoRGB565x2+0x15e>
cmpl   $0x1,0x10(%rbp)
jle    1659 <dblineXRGBtoRGB565x2+0x559>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x48(%rbp),%ecx
and    $0xf8,%ecx
shr    $0x3,%ecx
mov    -0x48(%rbp),%eax
and    $0x7e000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xe,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xfc000,%eax
shl    $0x7,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x1,%eax
or     %eax,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x50(%rbp),%ecx
and    $0xf8,%ecx
shr    $0x3,%ecx
mov    -0x50(%rbp),%eax
and    $0x7e000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x50(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xe,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0xfc000,%eax
shl    $0x7,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x1,%eax
or     %eax,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x30(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
add    -0x38(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
add    -0x3c(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x48(%rbp),%ecx
and    $0x1f0,%ecx
shr    $0x4,%ecx
mov    -0x48(%rbp),%eax
and    $0xfc000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7c000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000000,%eax
shl    $0x0,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x50(%rbp),%ecx
and    $0x1f0,%ecx
shr    $0x4,%ecx
mov    -0x50(%rbp),%eax
and    $0xfc000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x50(%rbp),%eax
and    $0x7c000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x1f8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0xf8000000,%eax
shl    $0x0,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
jmp    1744 <dblineXRGBtoRGB565x2+0x644>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%ecx
and    $0xf8,%ecx
shr    $0x3,%ecx
mov    -0x48(%rbp),%eax
and    $0x7e000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xe,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xfc000,%eax
shl    $0x7,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x1,%eax
or     %eax,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x30(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
add    -0x38(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%ecx
and    $0x1f0,%ecx
shr    $0x4,%ecx
mov    -0x48(%rbp),%eax
and    $0xfc000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7c000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000000,%eax
shl    $0x0,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<dblineXRGBtoRGB565x2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x38(%rsp),%eax
test   $0x1,%dl
je     11e1 <dblineXRGBtoRGB565x2+0xe1>
mov    (%rcx),%r9d
mov    0x4(%rcx),%r10d
add    %r9d,%r10d
add    $0x4,%rcx
mov    %r9d,%ebx
shr    $0x3,%ebx
and    $0x1f,%ebx
mov    %r9d,%ebp
shr    $0x8,%ebp
and    $0x7e0,%ebp
or     %ebx,%ebp
mov    %r9d,%ebx
shr    $0xe,%ebx
and    $0xf800,%ebx
or     %ebp,%ebx
mov    %r10d,%edx
shl    $0xc,%edx
and    $0x1f0000,%edx
or     %ebx,%edx
mov    %r10d,%ebp
shl    $0x7,%ebp
and    $0x7e00000,%ebp
or     %edx,%ebp
mov    %r10d,%edx
and    $0xfc000000,%edx
lea    0x0(%rbp,%rdx,2),%edx
mov    %edx,(%rdi)
mov    (%r8),%edx
add    %edx,%r9d
add    %edx,%r10d
add    0x4(%r8),%r10d
add    $0x4,%r8
mov    %r9d,%edx
shr    $0x4,%edx
and    $0x1f,%edx
mov    %r9d,%ebp
shr    $0x9,%ebp
and    $0x7e0,%ebp
or     %edx,%ebp
shr    $0xf,%r9d
and    $0xf800,%r9d
or     %ebp,%r9d
mov    %r10d,%edx
shl    $0xb,%edx
and    $0x1f0000,%edx
mov    %r10d,%ebp
shl    $0x6,%ebp
and    $0x7e00000,%ebp
and    $0xf8000000,%r10d
or     %r9d,%r10d
or     %edx,%r10d
or     %ebp,%r10d
mov    %r10d,(%rsi)
add    $0x4,%rdi
add    $0x4,%rsi
add    $0xffffffff,%eax
cmp    $0x3,%eax
jl     16d5 <dblineXRGBtoRGB565x2+0x5d5>
xor    %ebp,%ebp
mov    %eax,%edx
sub    $0x4,%edx
cmovb  %ebp,%edx
add    $0x1,%edx
cmp    $0x8,%edx
jb     1550 <dblineXRGBtoRGB565x2+0x450>
mov    %eax,%ebx
sub    $0x4,%ebx
cmovb  %ebp,%ebx
add    $0x1,%ebx
shr    %ebx
lea    (%rdi,%rbx,8),%rbp
add    $0x8,%rbp
lea    (%rsi,%rbx,8),%r12
add    $0x8,%r12
lea    (%rcx,%rbx,8),%r10
add    $0xc,%r10
lea    (%r8,%rbx,8),%rbx
add    $0xc,%rbx
cmp    %r12,%rdi
setb   -0x1(%rsp)
cmp    %rbp,%rsi
setb   %r14b
cmp    %r10,%rdi
setb   %r15b
cmp    %rbp,%rcx
setb   %r13b
cmp    %rbx,%rdi
setb   %r9b
cmp    %rbp,%r8
setb   %bpl
cmp    %r10,%rsi
setb   %r10b
cmp    %r12,%rcx
setb   -0x2(%rsp)
cmp    %rbx,%rsi
setb   %r11b
cmp    %r12,%r8
setb   %r12b
test   %r14b,-0x1(%rsp)
jne    1550 <dblineXRGBtoRGB565x2+0x450>
and    %r13b,%r15b
jne    1550 <dblineXRGBtoRGB565x2+0x450>
and    %bpl,%r9b
jne    1550 <dblineXRGBtoRGB565x2+0x450>
and    -0x2(%rsp),%r10b
jne    1550 <dblineXRGBtoRGB565x2+0x450>
and    %r12b,%r11b
jne    1550 <dblineXRGBtoRGB565x2+0x450>
shr    %edx
add    $0x1,%edx
mov    %edx,%ebp
and    $0x3,%ebp
test   %rbp,%rbp
mov    $0x4,%ebx
cmovne %rbp,%rbx
sub    %rbx,%rdx
sub    %edx,%eax
sub    %edx,%eax
lea    (%rdi,%rdx,8),%r9
lea    (%r8,%rdx,8),%r10
lea    (%rcx,%rdx,8),%r11
lea    (%rsi,%rdx,8),%r14
xor    %ebx,%ebx
movdqa 0xd22(%rip),%xmm8
movdqa 0xd29(%rip),%xmm9
movdqa 0xd30(%rip),%xmm10
movdqa 0xd37(%rip),%xmm11
movdqa 0xd3e(%rip),%xmm12
movdqa 0xd45(%rip),%xmm13
nopl   0x0(%rax,%rax,1)
movups (%rcx,%rbx,8),%xmm7
movups 0x4(%rcx,%rbx,8),%xmm5
movups 0x10(%rcx,%rbx,8),%xmm1
shufps $0x88,%xmm1,%xmm7
movups 0x14(%rcx,%rbx,8),%xmm1
movaps %xmm5,%xmm6
shufps $0x88,%xmm1,%xmm6
shufps $0xdd,%xmm1,%xmm5
movaps %xmm6,%xmm4
paddd  %xmm7,%xmm4
paddd  %xmm6,%xmm5
movdqa %xmm7,%xmm2
psrld  $0x3,%xmm2
pand   %xmm8,%xmm2
movdqa %xmm7,%xmm3
psrld  $0x8,%xmm3
pand   %xmm9,%xmm3
por    %xmm2,%xmm3
movdqa %xmm7,%xmm2
psrld  $0xe,%xmm2
pand   %xmm10,%xmm2
por    %xmm3,%xmm2
movdqa %xmm4,%xmm3
pslld  $0xc,%xmm3
pand   %xmm11,%xmm3
movdqa %xmm4,%xmm1
pslld  $0x7,%xmm1
pand   %xmm12,%xmm1
por    %xmm3,%xmm1
por    %xmm2,%xmm1
movdqa %xmm4,%xmm2
paddd  %xmm4,%xmm2
pand   %xmm13,%xmm2
por    %xmm1,%xmm2
movdqa %xmm6,%xmm1
psrld  $0x3,%xmm1
pand   %xmm8,%xmm1
movdqa %xmm6,%xmm3
psrld  $0x8,%xmm3
pand   %xmm9,%xmm3
por    %xmm1,%xmm3
movdqa %xmm6,%xmm1
psrld  $0xe,%xmm1
pand   %xmm10,%xmm1
por    %xmm3,%xmm1
movdqa %xmm5,%xmm3
pslld  $0xc,%xmm3
pand   %xmm11,%xmm3
movdqa %xmm5,%xmm0
pslld  $0x7,%xmm0
pand   %xmm12,%xmm0
por    %xmm3,%xmm0
por    %xmm1,%xmm0
movdqa %xmm5,%xmm1
paddd  %xmm5,%xmm1
pand   %xmm13,%xmm1
por    %xmm0,%xmm1
movdqa %xmm2,%xmm0
punpckldq %xmm1,%xmm0
punpckhdq %xmm1,%xmm2
movdqu %xmm2,0x10(%rdi,%rbx,8)
movdqu %xmm0,(%rdi,%rbx,8)
movups (%r8,%rbx,8),%xmm2
movups 0x4(%r8,%rbx,8),%xmm3
movups 0x10(%r8,%rbx,8),%xmm0
shufps $0x88,%xmm0,%xmm2
movups 0x14(%r8,%rbx,8),%xmm0
movaps %xmm3,%xmm1
shufps $0x88,%xmm0,%xmm1
shufps $0xdd,%xmm0,%xmm3
paddd  %xmm2,%xmm7
paddd  %xmm1,%xmm2
paddd  %xmm4,%xmm2
paddd  %xmm1,%xmm6
paddd  %xmm1,%xmm3
paddd  %xmm5,%xmm3
movdqa %xmm7,%xmm0
psrld  $0x4,%xmm0
pand   %xmm8,%xmm0
movdqa %xmm7,%xmm1
psrld  $0x9,%xmm1
pand   %xmm9,%xmm1
por    %xmm0,%xmm1
psrld  $0xf,%xmm7
pand   %xmm10,%xmm7
movdqa %xmm2,%xmm0
pslld  $0xb,%xmm0
pand   %xmm11,%xmm0
movdqa %xmm2,%xmm4
pslld  $0x6,%xmm4
pand   %xmm12,%xmm4
por    %xmm0,%xmm4
pand   %xmm13,%xmm2
por    %xmm7,%xmm2
por    %xmm1,%xmm2
por    %xmm4,%xmm2
movdqa %xmm6,%xmm0
psrld  $0x4,%xmm0
pand   %xmm8,%xmm0
movdqa %xmm6,%xmm1
psrld  $0x9,%xmm1
pand   %xmm9,%xmm1
por    %xmm0,%xmm1
psrld  $0xf,%xmm6
pand   %xmm10,%xmm6
movdqa %xmm3,%xmm0
pslld  $0xb,%xmm0
pand   %xmm11,%xmm0
movdqa %xmm3,%xmm4
pslld  $0x6,%xmm4
pand   %xmm12,%xmm4
por    %xmm0,%xmm4
pand   %xmm13,%xmm3
por    %xmm6,%xmm3
por    %xmm1,%xmm3
por    %xmm4,%xmm3
movdqa %xmm2,%xmm0
punpckldq %xmm3,%xmm0
punpckhdq %xmm3,%xmm2
movdqu %xmm2,0x10(%rsi,%rbx,8)
movdqu %xmm0,(%rsi,%rbx,8)
add    $0x4,%rbx
cmp    %rbx,%rdx
jne    1310 <dblineXRGBtoRGB565x2+0x210>
mov    %r9,%rdi
mov    %r10,%r8
mov    %r11,%rcx
mov    %r14,%rsi
cs nopw 0x0(%rax,%rax,1)
mov    %eax,%r9d
mov    (%rcx),%r14d
mov    0x4(%rcx),%r11d
lea    (%r11,%r14,1),%r10d
mov    0x8(%rcx),%r15d
add    %r11d,%r15d
add    $0x8,%rcx
mov    %r14d,%ebx
shr    $0x3,%ebx
and    $0x1f,%ebx
mov    %r14d,%ebp
shr    $0x8,%ebp
and    $0x7e0,%ebp
or     %ebx,%ebp
mov    %r14d,%ebx
shr    $0xe,%ebx
and    $0xf800,%ebx
or     %ebp,%ebx
mov    %r10d,%ebp
shl    $0xc,%ebp
and    $0x1f0000,%ebp
or     %ebx,%ebp
mov    %r10d,%ebx
shl    $0x7,%ebx
and    $0x7e00000,%ebx
or     %ebp,%ebx
mov    %r10d,%ebp
and    $0xfc000000,%ebp
lea    (%rbx,%rbp,2),%ebx
mov    %ebx,(%rdi)
mov    %r11d,%ebx
shr    $0x3,%ebx
and    $0x1f,%ebx
mov    %r11d,%ebp
shr    $0x8,%ebp
and    $0x7e0,%ebp
or     %ebx,%ebp
mov    %r11d,%ebx
shr    $0xe,%ebx
and    $0xf800,%ebx
or     %ebp,%ebx
mov    %r15d,%ebp
shl    $0xc,%ebp
and    $0x1f0000,%ebp
or     %ebx,%ebp
mov    %r15d,%ebx
shl    $0x7,%ebx
and    $0x7e00000,%ebx
or     %ebp,%ebx
mov    %r15d,%ebp
and    $0xfc000000,%ebp
lea    (%rbx,%rbp,2),%ebx
mov    %ebx,0x4(%rdi)
mov    (%r8),%ebx
mov    0x4(%r8),%ebp
add    %ebx,%r14d
add    %r10d,%ebx
add    %ebp,%ebx
add    %ebp,%r15d
add    0x8(%r8),%r15d
add    %ebp,%r11d
add    $0x8,%r8
mov    %r14d,%ebp
shr    $0x4,%ebp
and    $0x1f,%ebp
mov    %r14d,%edx
shr    $0x9,%edx
and    $0x7e0,%edx
or     %ebp,%edx
shr    $0xf,%r14d
and    $0xf800,%r14d
or     %edx,%r14d
mov    %ebx,%edx
shl    $0xb,%edx
and    $0x1f0000,%edx
mov    %ebx,%ebp
shl    $0x6,%ebp
and    $0x7e00000,%ebp
and    $0xf8000000,%ebx
or     %r14d,%ebx
or     %edx,%ebx
or     %ebp,%ebx
mov    %ebx,(%rsi)
mov    %r11d,%edx
shr    $0x4,%edx
and    $0x1f,%edx
mov    %r11d,%ebp
shr    $0x9,%ebp
and    $0x7e0,%ebp
or     %edx,%ebp
shr    $0xf,%r11d
and    $0xf800,%r11d
or     %ebp,%r11d
mov    %r15d,%edx
shl    $0xb,%edx
and    $0x1f0000,%edx
mov    %r15d,%eax
shl    $0x6,%eax
and    $0x7e00000,%eax
and    $0xf8000000,%r15d
or     %r11d,%r15d
or     %edx,%r15d
or     %eax,%r15d
mov    %r15d,0x4(%rsi)
add    $0x8,%rdi
add    $0x8,%rsi
lea    -0x2(%r9),%eax
cmp    $0x4,%r9d
ja     1550 <dblineXRGBtoRGB565x2+0x450>
mov    (%rcx),%edx
cmp    $0x2,%eax
jne    1824 <dblineXRGBtoRGB565x2+0x724>
mov    0x4(%rcx),%r10d
lea    (%r10,%rdx,1),%r9d
mov    %edx,%ebp
shr    $0x3,%ebp
and    $0x1f,%ebp
mov    %edx,%ebx
shr    $0x8,%ebx
and    $0x7e0,%ebx
or     %ebp,%ebx
mov    %edx,%ebp
shr    $0xe,%ebp
and    $0xf800,%ebp
or     %ebx,%ebp
mov    %r9d,%ecx
shl    $0xc,%ecx
and    $0x1f0000,%ecx
or     %ebp,%ecx
mov    %r9d,%ebp
shl    $0x7,%ebp
and    $0x7e00000,%ebp
or     %ecx,%ebp
mov    %r9d,%ecx
and    $0xfc000000,%ecx
lea    0x0(%rbp,%rcx,2),%ecx
mov    %ecx,(%rdi)
mov    %r10d,%ecx
shr    $0x3,%ecx
and    $0x1f,%ecx
mov    %r10d,%ebp
shr    $0x8,%ebp
and    $0x7e0,%ebp
or     %ecx,%ebp
mov    %r10d,%ecx
shr    $0xe,%ecx
and    $0xf800,%ecx
or     %ebp,%ecx
mov    %r10d,%ebp
shl    $0xd,%ebp
and    $0x1f0000,%ebp
or     %ecx,%ebp
mov    %r10d,%ecx
shl    $0x8,%ecx
and    $0x7e00000,%ecx
or     %ebp,%ecx
mov    %r10d,%eax
and    $0xfe000000,%eax
lea    (%rcx,%rax,4),%eax
mov    %eax,0x4(%rdi)
mov    (%r8),%ebx
mov    0x4(%r8),%edi
add    %ebx,%edx
add    %r9d,%ebx
add    %edi,%ebx
add    %r10d,%edi
mov    %edx,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %edx,%ecx
shr    $0x9,%ecx
and    $0x7e0,%ecx
or     %eax,%ecx
shr    $0xf,%edx
and    $0xf800,%edx
or     %ecx,%edx
mov    %ebx,%eax
shl    $0xb,%eax
and    $0x1f0000,%eax
mov    %ebx,%ecx
shl    $0x6,%ecx
and    $0x7e00000,%ecx
and    $0xf8000000,%ebx
or     %edx,%ebx
or     %eax,%ebx
or     %ecx,%ebx
mov    %ebx,(%rsi)
mov    %edi,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %edi,%ecx
shr    $0x9,%ecx
and    $0x7e0,%ecx
or     %eax,%ecx
mov    %edi,%eax
shr    $0xf,%eax
and    $0xf800,%eax
or     %ecx,%eax
mov    %edi,%ecx
shl    $0xc,%ecx
and    $0x1f0000,%ecx
or     %eax,%ecx
mov    %edi,%eax
shl    $0x7,%eax
and    $0x7e00000,%eax
or     %ecx,%eax
and    $0xfc000000,%edi
lea    (%rax,%rdi,2),%eax
add    $0x4,%rsi
jmp    18b1 <dblineXRGBtoRGB565x2+0x7b1>
mov    %edx,%eax
shr    $0x3,%eax
and    $0x1f,%eax
mov    %edx,%ecx
shr    $0x8,%ecx
and    $0x7e0,%ecx
or     %eax,%ecx
mov    %edx,%eax
shr    $0xe,%eax
and    $0xf800,%eax
or     %ecx,%eax
mov    %edx,%ecx
shl    $0xd,%ecx
and    $0x1f0000,%ecx
or     %eax,%ecx
mov    %edx,%eax
shl    $0x8,%eax
and    $0x7e00000,%eax
or     %ecx,%eax
mov    %edx,%ecx
and    $0xfe000000,%ecx
lea    (%rax,%rcx,4),%eax
mov    %eax,(%rdi)
add    (%r8),%edx
mov    %edx,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %edx,%ecx
shr    $0x9,%ecx
and    $0x7e0,%ecx
or     %eax,%ecx
mov    %edx,%eax
shr    $0xf,%eax
and    $0xf800,%eax
or     %ecx,%eax
mov    %edx,%ecx
shl    $0xc,%ecx
and    $0x1f0000,%ecx
or     %eax,%ecx
mov    %edx,%eax
shl    $0x7,%eax
and    $0x7e00000,%eax
or     %ecx,%eax
and    $0xfc000000,%edx
lea    (%rax,%rdx,2),%eax
mov    %eax,(%rsi)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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