void dblineXRGBtoRGB555x2(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 & 0x0007c000) >> 9) |
                          ((w & 0x3e000000) >> 15) | ((x & 0x000001f0) << 12) |
                          ((x & 0x000f8000) << 6) | ((x & 0x7c000000) << 0);
    c = *(unsigned int *)s2;
    d = *(unsigned int *)(s2 + 4);
    w = a + c;
    x = a + b + c + d;
    *(unsigned int *)d2 = ((w & 0x000001f0) >> 4) | ((w & 0x000f8000) >> 10) |
                          ((w & 0x7c000000) >> 16) | ((x & 0x000003e0) << 11) |
                          ((x & 0x001f0000) << 5) | ((x & 0xf8000000) >> 1);
    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 & 0x0007c000) >> 9) |
                          ((w & 0x3e000000) >> 15) | ((x & 0x000001f0) << 12) |
                          ((x & 0x000f8000) << 6) | ((x & 0x7c000000) << 0);
    *(unsigned int *)(d1 + 4) =
        ((y & 0x000000f8) >> 3) | ((y & 0x0007c000) >> 9) |
        ((y & 0x3e000000) >> 15) | ((z & 0x000001f0) << 12) |
        ((z & 0x000f8000) << 6) | ((z & 0x7c000000) << 0);
    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 & 0x000f8000) >> 10) |
                          ((w & 0x7c000000) >> 16) | ((x & 0x000003e0) << 11) |
                          ((x & 0x001f0000) << 5) | ((x & 0xf8000000) >> 1);
    *(unsigned int *)(d2 + 4) =
        ((y & 0x000001f0) >> 4) | ((y & 0x000f8000) >> 10) |
        ((y & 0x7c000000) >> 16) | ((z & 0x000003e0) << 11) |
        ((z & 0x001f0000) << 5) | ((z & 0xf8000000) >> 1);
    s1 += 2 * 4;
    s2 += 2 * 4;
    d1 += 4 * 2;
    d2 += 4 * 2;
    dx -= 2;
  }
  if (dx > 1) {
    a = *(unsigned int *)(s1 + 0);
    b = *(unsigned int *)(s1 + 4);
    e = b;
    w = a;
    x = a + b;
    y = b;
    z = b + e;
    *(unsigned int *)d1 = ((w & 0x000000f8) >> 3) | ((w & 0x0007c000) >> 9) |
                          ((w & 0x3e000000) >> 15) | ((x & 0x000001f0) << 12) |
                          ((x & 0x000f8000) << 6) | ((x & 0x7c000000) << 0);
    *(unsigned int *)(d1 + 4) =
        ((y & 0x000000f8) >> 3) | ((y & 0x0007c000) >> 9) |
        ((y & 0x3e000000) >> 15) | ((z & 0x000001f0) << 12) |
        ((z & 0x000f8000) << 6) | ((z & 0x7c000000) << 0);
    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 & 0x000f8000) >> 10) |
                          ((w & 0x7c000000) >> 16) | ((x & 0x000003e0) << 11) |
                          ((x & 0x001f0000) << 5) | ((x & 0xf8000000) >> 1);
    *(unsigned int *)(d2 + 2 * 2) =
        ((y & 0x000001f0) >> 4) | ((y & 0x000f8000) >> 10) |
        ((y & 0x7c000000) >> 16) | ((z & 0x000003e0) << 11) |
        ((z & 0x001f0000) << 5) | ((z & 0xf8000000) >> 1);
  } else {
    a = *(unsigned int *)s1;
    b = a;
    w = a;
    x = a + b;
    *(unsigned int *)d1 = ((w & 0x000000f8) >> 3) | ((w & 0x0007c000) >> 9) |
                          ((w & 0x3e000000) >> 15) | ((x & 0x000001f0) << 12) |
                          ((x & 0x000f8000) << 6) | ((x & 0x7c000000) << 0);
    c = *(unsigned int *)s2;
    d = c;
    w = a + c;
    x = a + b + c + d;
    *(unsigned int *)d2 = ((w & 0x000001f0) >> 4) | ((w & 0x000f8000) >> 10) |
                          ((w & 0x7c000000) >> 16) | ((x & 0x000003e0) << 11) |
                          ((x & 0x001f0000) << 5) | ((x & 0xf8000000) >> 1);
  }
}


x86 assembly (clang, -O0):
<dblineXRGBtoRGB555x2>:
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 <dblineXRGBtoRGB555x2+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    $0x7c000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x0,%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    $0xf8000,%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7c000000,%eax
shr    $0x10,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0000,%eax
shl    $0x5,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000000,%eax
shr    $0x1,%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 <dblineXRGBtoRGB555x2+0x15e>
cmpl   $0x2,0x10(%rbp)
jle    147c <dblineXRGBtoRGB555x2+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    $0x7c000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x0,%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    $0x7c000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x50(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0xf8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x0,%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    $0xf8000,%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7c000000,%eax
shr    $0x10,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0000,%eax
shl    $0x5,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000000,%eax
shr    $0x1,%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    $0xf8000,%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x50(%rbp),%eax
and    $0x7c000000,%eax
shr    $0x10,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x1f0000,%eax
shl    $0x5,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0xf8000000,%eax
shr    $0x1,%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 <dblineXRGBtoRGB555x2+0x15e>
cmpl   $0x1,0x10(%rbp)
jle    1659 <dblineXRGBtoRGB555x2+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    $0x7c000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x0,%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    $0x7c000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x50(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0xf8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x0,%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    $0xf8000,%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7c000000,%eax
shr    $0x10,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0000,%eax
shl    $0x5,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000000,%eax
shr    $0x1,%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    $0xf8000,%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x50(%rbp),%eax
and    $0x7c000000,%eax
shr    $0x10,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0x1f0000,%eax
shl    $0x5,%eax
or     %eax,%ecx
mov    -0x54(%rbp),%eax
and    $0xf8000000,%eax
shr    $0x1,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
jmp    1744 <dblineXRGBtoRGB555x2+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    $0x7c000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x0,%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    $0xf8000,%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7c000000,%eax
shr    $0x10,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1f0000,%eax
shl    $0x5,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xf8000000,%eax
shr    $0x1,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<dblineXRGBtoRGB555x2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x38(%rsp),%eax
test   $0x1,%dl
je     11e4 <dblineXRGBtoRGB555x2+0xe4>
mov    (%rcx),%r9d
mov    0x4(%rcx),%r11d
add    %r9d,%r11d
add    $0x4,%rcx
mov    %r9d,%ebx
shr    $0x3,%ebx
and    $0x1f,%ebx
mov    %r9d,%ebp
shr    $0x9,%ebp
and    $0x3e0,%ebp
or     %ebx,%ebp
mov    %r9d,%ebx
shr    $0xf,%ebx
and    $0x7c00,%ebx
or     %ebp,%ebx
mov    %r11d,%r10d
shl    $0xc,%r10d
and    $0x1f0000,%r10d
mov    %r11d,%ebp
shl    $0x6,%ebp
and    $0x3e00000,%ebp
mov    %r11d,%edx
and    $0x7c000000,%edx
or     %ebx,%edx
or     %r10d,%edx
or     %ebp,%edx
mov    %edx,(%rdi)
mov    (%r8),%edx
add    %edx,%r9d
add    %edx,%r11d
add    0x4(%r8),%r11d
add    $0x4,%r8
mov    %r9d,%edx
shr    $0x4,%edx
and    $0x1f,%edx
mov    %r9d,%ebp
shr    $0xa,%ebp
and    $0x3e0,%ebp
or     %edx,%ebp
shr    $0x10,%r9d
and    $0x7c00,%r9d
or     %ebp,%r9d
mov    %r11d,%edx
shl    $0xb,%edx
and    $0x1f0000,%edx
or     %r9d,%edx
mov    %r11d,%ebp
shl    $0x5,%ebp
and    $0x3e00000,%ebp
or     %edx,%ebp
shr    %r11d
and    $0x7c000000,%r11d
or     %ebp,%r11d
mov    %r11d,(%rsi)
add    $0x4,%rdi
add    $0x4,%rsi
add    $0xffffffff,%eax
cmp    $0x3,%eax
jl     16d4 <dblineXRGBtoRGB555x2+0x5d4>
xor    %ebp,%ebp
mov    %eax,%edx
sub    $0x4,%edx
cmovb  %ebp,%edx
add    $0x1,%edx
cmp    $0x8,%edx
jb     1550 <dblineXRGBtoRGB555x2+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 <dblineXRGBtoRGB555x2+0x450>
and    %r13b,%r15b
jne    1550 <dblineXRGBtoRGB555x2+0x450>
and    %bpl,%r9b
jne    1550 <dblineXRGBtoRGB555x2+0x450>
and    -0x2(%rsp),%r10b
jne    1550 <dblineXRGBtoRGB555x2+0x450>
and    %r12b,%r11b
jne    1550 <dblineXRGBtoRGB555x2+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 0xd1f(%rip),%xmm8
movdqa 0xd26(%rip),%xmm9
movdqa 0xd2d(%rip),%xmm10
movdqa 0xd34(%rip),%xmm11
movdqa 0xd3b(%rip),%xmm12
movdqa 0xd42(%rip),%xmm13
xchg   %ax,%ax
movups (%rcx,%rbx,8),%xmm4
movups 0x4(%rcx,%rbx,8),%xmm5
movups 0x10(%rcx,%rbx,8),%xmm1
shufps $0x88,%xmm1,%xmm4
movups 0x14(%rcx,%rbx,8),%xmm1
movaps %xmm5,%xmm6
shufps $0x88,%xmm1,%xmm6
shufps $0xdd,%xmm1,%xmm5
movaps %xmm6,%xmm14
paddd  %xmm4,%xmm14
paddd  %xmm6,%xmm5
movdqa %xmm4,%xmm1
psrld  $0x3,%xmm1
pand   %xmm8,%xmm1
movdqa %xmm4,%xmm2
psrld  $0x9,%xmm2
pand   %xmm9,%xmm2
por    %xmm1,%xmm2
movdqa %xmm4,%xmm7
psrld  $0xf,%xmm7
pand   %xmm10,%xmm7
movdqa %xmm14,%xmm1
pslld  $0xc,%xmm1
pand   %xmm11,%xmm1
movdqa %xmm14,%xmm3
pslld  $0x6,%xmm3
pand   %xmm12,%xmm3
por    %xmm1,%xmm3
movdqa %xmm14,%xmm1
pand   %xmm13,%xmm1
por    %xmm7,%xmm1
por    %xmm2,%xmm1
por    %xmm3,%xmm1
movdqa %xmm6,%xmm2
psrld  $0x3,%xmm2
pand   %xmm8,%xmm2
movdqa %xmm6,%xmm3
psrld  $0x9,%xmm3
pand   %xmm9,%xmm3
por    %xmm2,%xmm3
movdqa %xmm6,%xmm2
psrld  $0xf,%xmm2
pand   %xmm10,%xmm2
movdqa %xmm5,%xmm7
pslld  $0xc,%xmm7
pand   %xmm11,%xmm7
movdqa %xmm5,%xmm0
pslld  $0x6,%xmm0
pand   %xmm12,%xmm0
por    %xmm7,%xmm0
movdqa %xmm5,%xmm7
pand   %xmm13,%xmm7
por    %xmm2,%xmm7
por    %xmm3,%xmm7
por    %xmm0,%xmm7
movdqa %xmm1,%xmm0
punpckldq %xmm7,%xmm0
punpckhdq %xmm7,%xmm1
movdqu %xmm1,0x10(%rdi,%rbx,8)
movdqu %xmm0,(%rdi,%rbx,8)
movups (%r8,%rbx,8),%xmm1
movups 0x4(%r8,%rbx,8),%xmm2
movups 0x10(%r8,%rbx,8),%xmm0
shufps $0x88,%xmm0,%xmm1
movups 0x14(%r8,%rbx,8),%xmm0
movaps %xmm2,%xmm3
shufps $0x88,%xmm0,%xmm3
shufps $0xdd,%xmm0,%xmm2
paddd  %xmm1,%xmm4
paddd  %xmm3,%xmm1
paddd  %xmm14,%xmm1
paddd  %xmm3,%xmm6
paddd  %xmm3,%xmm2
paddd  %xmm5,%xmm2
movdqa %xmm4,%xmm0
psrld  $0x4,%xmm0
pand   %xmm8,%xmm0
movdqa %xmm4,%xmm3
psrld  $0xa,%xmm3
pand   %xmm9,%xmm3
por    %xmm0,%xmm3
psrld  $0x10,%xmm4
pand   %xmm10,%xmm4
por    %xmm3,%xmm4
movdqa %xmm1,%xmm0
pslld  $0xb,%xmm0
pand   %xmm11,%xmm0
movdqa %xmm1,%xmm3
pslld  $0x5,%xmm3
pand   %xmm12,%xmm3
por    %xmm0,%xmm3
por    %xmm4,%xmm3
psrld  $0x1,%xmm1
pand   %xmm13,%xmm1
por    %xmm3,%xmm1
movdqa %xmm6,%xmm0
psrld  $0x4,%xmm0
pand   %xmm8,%xmm0
movdqa %xmm6,%xmm3
psrld  $0xa,%xmm3
pand   %xmm9,%xmm3
por    %xmm0,%xmm3
psrld  $0x10,%xmm6
pand   %xmm10,%xmm6
por    %xmm3,%xmm6
movdqa %xmm2,%xmm0
pslld  $0xb,%xmm0
pand   %xmm11,%xmm0
movdqa %xmm2,%xmm3
pslld  $0x5,%xmm3
pand   %xmm12,%xmm3
por    %xmm0,%xmm3
por    %xmm6,%xmm3
psrld  $0x1,%xmm2
pand   %xmm13,%xmm2
por    %xmm3,%xmm2
movdqa %xmm1,%xmm0
punpckldq %xmm2,%xmm0
punpckhdq %xmm2,%xmm1
movdqu %xmm1,0x10(%rsi,%rbx,8)
movdqu %xmm0,(%rsi,%rbx,8)
add    $0x4,%rbx
cmp    %rbx,%rdx
jne    1310 <dblineXRGBtoRGB555x2+0x210>
mov    %r9,%rdi
mov    %r10,%r8
mov    %r11,%rcx
mov    %r14,%rsi
xchg   %ax,%ax
mov    %eax,%r9d
mov    (%rcx),%r15d
mov    0x4(%rcx),%r11d
lea    (%r11,%r15,1),%r10d
mov    0x8(%rcx),%r14d
add    %r11d,%r14d
add    $0x8,%rcx
mov    %r15d,%ebx
shr    $0x3,%ebx
and    $0x1f,%ebx
mov    %r15d,%ebp
shr    $0x9,%ebp
and    $0x3e0,%ebp
or     %ebx,%ebp
mov    %r15d,%ebx
shr    $0xf,%ebx
and    $0x7c00,%ebx
or     %ebp,%ebx
mov    %r10d,%ebp
shl    $0xc,%ebp
and    $0x1f0000,%ebp
mov    %r10d,%eax
shl    $0x6,%eax
and    $0x3e00000,%eax
mov    %r10d,%edx
and    $0x7c000000,%edx
or     %ebx,%edx
or     %ebp,%edx
or     %eax,%edx
mov    %edx,(%rdi)
mov    %r11d,%eax
shr    $0x3,%eax
and    $0x1f,%eax
mov    %r11d,%edx
shr    $0x9,%edx
and    $0x3e0,%edx
or     %eax,%edx
mov    %r11d,%eax
shr    $0xf,%eax
and    $0x7c00,%eax
or     %edx,%eax
mov    %r14d,%edx
shl    $0xc,%edx
and    $0x1f0000,%edx
mov    %r14d,%ebx
shl    $0x6,%ebx
and    $0x3e00000,%ebx
mov    %r14d,%ebp
and    $0x7c000000,%ebp
or     %eax,%ebp
or     %edx,%ebp
or     %ebx,%ebp
mov    %ebp,0x4(%rdi)
mov    (%r8),%ebx
mov    0x4(%r8),%eax
add    %ebx,%r15d
add    %r10d,%ebx
add    %eax,%ebx
add    %eax,%r11d
add    %eax,%r14d
add    0x8(%r8),%r14d
add    $0x8,%r8
mov    %r15d,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %r15d,%edx
shr    $0xa,%edx
and    $0x3e0,%edx
or     %eax,%edx
shr    $0x10,%r15d
and    $0x7c00,%r15d
or     %edx,%r15d
mov    %ebx,%eax
shl    $0xb,%eax
and    $0x1f0000,%eax
or     %r15d,%eax
mov    %ebx,%edx
shl    $0x5,%edx
and    $0x3e00000,%edx
or     %eax,%edx
shr    %ebx
and    $0x7c000000,%ebx
or     %edx,%ebx
mov    %ebx,(%rsi)
mov    %r11d,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %r11d,%edx
shr    $0xa,%edx
and    $0x3e0,%edx
or     %eax,%edx
shr    $0x10,%r11d
and    $0x7c00,%r11d
or     %edx,%r11d
mov    %r14d,%eax
shl    $0xb,%eax
and    $0x1f0000,%eax
or     %r11d,%eax
mov    %r14d,%edx
shl    $0x5,%edx
and    $0x3e00000,%edx
or     %eax,%edx
shr    %r14d
and    $0x7c000000,%r14d
or     %edx,%r14d
mov    %r14d,0x4(%rsi)
add    $0x8,%rdi
add    $0x8,%rsi
lea    -0x2(%r9),%eax
cmp    $0x4,%r9d
ja     1550 <dblineXRGBtoRGB555x2+0x450>
mov    (%rcx),%edx
cmp    $0x2,%eax
jne    1822 <dblineXRGBtoRGB555x2+0x722>
mov    0x4(%rcx),%r10d
lea    (%r10,%rdx,1),%r9d
mov    %edx,%eax
shr    $0x3,%eax
and    $0x1f,%eax
mov    %edx,%ebp
shr    $0x9,%ebp
and    $0x3e0,%ebp
or     %eax,%ebp
mov    %edx,%eax
shr    $0xf,%eax
and    $0x7c00,%eax
or     %ebp,%eax
mov    %r9d,%ebx
shl    $0xc,%ebx
and    $0x1f0000,%ebx
mov    %r9d,%ebp
shl    $0x6,%ebp
and    $0x3e00000,%ebp
mov    %r9d,%ecx
and    $0x7c000000,%ecx
or     %eax,%ecx
or     %ebx,%ecx
or     %ebp,%ecx
mov    %ecx,(%rdi)
mov    %r10d,%eax
shr    $0x3,%eax
and    $0x1f,%eax
mov    %r10d,%ecx
shr    $0x9,%ecx
and    $0x3e0,%ecx
or     %eax,%ecx
mov    %r10d,%eax
shr    $0xf,%eax
and    $0x7c00,%eax
or     %ecx,%eax
mov    %r10d,%ecx
shl    $0xd,%ecx
and    $0x1f0000,%ecx
or     %eax,%ecx
mov    %r10d,%eax
shl    $0x7,%eax
and    $0x3e00000,%eax
or     %ecx,%eax
mov    %r10d,%ecx
and    $0x3e000000,%ecx
lea    (%rax,%rcx,2),%eax
mov    %eax,0x4(%rdi)
mov    (%r8),%edi
mov    0x4(%r8),%eax
add    %edi,%edx
add    %r9d,%edi
add    %eax,%edi
add    %r10d,%eax
mov    %edx,%ecx
shr    $0x4,%ecx
and    $0x1f,%ecx
mov    %edx,%ebp
shr    $0xa,%ebp
and    $0x3e0,%ebp
or     %ecx,%ebp
shr    $0x10,%edx
and    $0x7c00,%edx
or     %ebp,%edx
mov    %edi,%ecx
shl    $0xb,%ecx
and    $0x1f0000,%ecx
or     %edx,%ecx
mov    %edi,%edx
shl    $0x5,%edx
and    $0x3e00000,%edx
or     %ecx,%edx
shr    %edi
and    $0x7c000000,%edi
or     %edx,%edi
mov    %edi,(%rsi)
mov    %eax,%ecx
shr    $0x4,%ecx
and    $0x1f,%ecx
mov    %eax,%edx
shr    $0xa,%edx
and    $0x3e0,%edx
mov    %eax,%edi
shr    $0x10,%edi
and    $0x7c00,%edi
mov    %eax,%ebp
shl    $0xc,%ebp
and    $0x1f0000,%ebp
mov    %eax,%ebx
shl    $0x6,%ebx
and    $0x3e00000,%ebx
and    $0x7c000000,%eax
or     %edx,%eax
or     %ecx,%eax
or     %edi,%eax
or     %ebp,%eax
or     %ebx,%eax
add    $0x4,%rsi
jmp    18b2 <dblineXRGBtoRGB555x2+0x7b2>
mov    %edx,%eax
shr    $0x3,%eax
and    $0x1f,%eax
mov    %edx,%ecx
shr    $0x9,%ecx
and    $0x3e0,%ecx
or     %eax,%ecx
mov    %edx,%eax
shr    $0xf,%eax
and    $0x7c00,%eax
or     %ecx,%eax
mov    %edx,%ecx
shl    $0xd,%ecx
and    $0x1f0000,%ecx
or     %eax,%ecx
mov    %edx,%eax
shl    $0x7,%eax
and    $0x3e00000,%eax
or     %ecx,%eax
mov    %edx,%ecx
and    $0x3e000000,%ecx
lea    (%rax,%rcx,2),%eax
mov    %eax,(%rdi)
add    (%r8),%edx
mov    %edx,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %edx,%ecx
shr    $0xa,%ecx
and    $0x3e0,%ecx
mov    %edx,%edi
shr    $0x10,%edi
and    $0x7c00,%edi
mov    %edx,%ebp
shl    $0xc,%ebp
and    $0x1f0000,%ebp
mov    %edx,%ebx
shl    $0x6,%ebx
and    $0x3e00000,%ebx
and    $0x7c000000,%edx
or     %ecx,%edx
or     %eax,%edx
or     %edi,%edx
or     %ebp,%edx
or     %ebx,%edx
mov    %edx,%eax
mov    %eax,(%rsi)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @dblineXRGBtoRGB555x2(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, 507904
%45 = lshr i32 %44, 9
%46 = or i32 %42, %45
%47 = load i32, i32* %21
%48 = and i32 %47, 1040187392
%49 = lshr i32 %48, 15
%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, 1015808
%57 = shl i32 %56, 6
%58 = or i32 %54, %57
%59 = load i32, i32* %22
%60 = and i32 %59, 2080374784
%61 = shl i32 %60, 0
%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, 1015808
%87 = lshr i32 %86, 10
%88 = or i32 %84, %87
%89 = load i32, i32* %21
%90 = and i32 %89, 2080374784
%91 = lshr i32 %90, 16
%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, 2031616
%99 = shl i32 %98, 5
%100 = or i32 %96, %99
%101 = load i32, i32* %22
%102 = and i32 %101, -134217728
%103 = lshr i32 %102, 1
%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, 507904
%146 = lshr i32 %145, 9
%147 = or i32 %143, %146
%148 = load i32, i32* %21
%149 = and i32 %148, 1040187392
%150 = lshr i32 %149, 15
%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, 1015808
%158 = shl i32 %157, 6
%159 = or i32 %155, %158
%160 = load i32, i32* %22
%161 = and i32 %160, 2080374784
%162 = shl i32 %161, 0
%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, 507904
%171 = lshr i32 %170, 9
%172 = or i32 %168, %171
%173 = load i32, i32* %23
%174 = and i32 %173, 1040187392
%175 = lshr i32 %174, 15
%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, 1015808
%183 = shl i32 %182, 6
%184 = or i32 %180, %183
%185 = load i32, i32* %24
%186 = and i32 %185, 2080374784
%187 = shl i32 %186, 0
%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, 1015808
%228 = lshr i32 %227, 10
%229 = or i32 %225, %228
%230 = load i32, i32* %21
%231 = and i32 %230, 2080374784
%232 = lshr i32 %231, 16
%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, 2031616
%240 = shl i32 %239, 5
%241 = or i32 %237, %240
%242 = load i32, i32* %22
%243 = and i32 %242, -134217728
%244 = lshr i32 %243, 1
%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, 1015808
%253 = lshr i32 %252, 10
%254 = or i32 %250, %253
%255 = load i32, i32* %23
%256 = and i32 %255, 2080374784
%257 = lshr i32 %256, 16
%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, 2031616
%265 = shl i32 %264, 5
%266 = or i32 %262, %265
%267 = load i32, i32* %24
%268 = and i32 %267, -134217728
%269 = lshr i32 %268, 1
%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 %435
287: ; preds = %284
%288 = load i8*, i8** %11
%289 = getelementptr inbounds i8, i8* %288, i64 0
%290 = bitcast i8* %289 to i32*
%291 = load i32, i32* %290
store i32 %291, i32* %15
%292 = load i8*, i8** %11
%293 = getelementptr inbounds i8, i8* %292, i64 4
%294 = bitcast i8* %293 to i32*
%295 = load i32, i32* %294
store i32 %295, i32* %16
%296 = load i32, i32* %16
store i32 %296, i32* %19
%297 = load i32, i32* %15
store i32 %297, i32* %21
%298 = load i32, i32* %15
%299 = load i32, i32* %16
%300 = add i32 %298, %299
store i32 %300, i32* %22
%301 = load i32, i32* %16
store i32 %301, i32* %23
%302 = load i32, i32* %16
%303 = load i32, i32* %19
%304 = add i32 %302, %303
store i32 %304, i32* %24
%305 = load i32, i32* %21
%306 = and i32 %305, 248
%307 = lshr i32 %306, 3
%308 = load i32, i32* %21
%309 = and i32 %308, 507904
%310 = lshr i32 %309, 9
%311 = or i32 %307, %310
%312 = load i32, i32* %21
%313 = and i32 %312, 1040187392
%314 = lshr i32 %313, 15
%315 = or i32 %311, %314
%316 = load i32, i32* %22
%317 = and i32 %316, 496
%318 = shl i32 %317, 12
%319 = or i32 %315, %318
%320 = load i32, i32* %22
%321 = and i32 %320, 1015808
%322 = shl i32 %321, 6
%323 = or i32 %319, %322
%324 = load i32, i32* %22
%325 = and i32 %324, 2080374784
%326 = shl i32 %325, 0
%327 = or i32 %323, %326
%328 = load i8*, i8** %8
%329 = bitcast i8* %328 to i32*
store i32 %327, i32* %329
%330 = load i32, i32* %23
%331 = and i32 %330, 248
%332 = lshr i32 %331, 3
%333 = load i32, i32* %23
%334 = and i32 %333, 507904
%335 = lshr i32 %334, 9
%336 = or i32 %332, %335
%337 = load i32, i32* %23
%338 = and i32 %337, 1040187392
%339 = lshr i32 %338, 15
%340 = or i32 %336, %339
%341 = load i32, i32* %24
%342 = and i32 %341, 496
%343 = shl i32 %342, 12
%344 = or i32 %340, %343
%345 = load i32, i32* %24
%346 = and i32 %345, 1015808
%347 = shl i32 %346, 6
%348 = or i32 %344, %347
%349 = load i32, i32* %24
%350 = and i32 %349, 2080374784
%351 = shl i32 %350, 0
%352 = or i32 %348, %351
%353 = load i8*, i8** %8
%354 = getelementptr inbounds i8, i8* %353, i64 4
%355 = bitcast i8* %354 to i32*
store i32 %352, i32* %355
%356 = load i8*, i8** %12
%357 = bitcast i8* %356 to i32*
%358 = load i32, i32* %357
store i32 %358, i32* %17
%359 = load i8*, i8** %12
%360 = getelementptr inbounds i8, i8* %359, i64 4
%361 = bitcast i8* %360 to i32*
%362 = load i32, i32* %361
store i32 %362, i32* %18
%363 = load i32, i32* %18
store i32 %363, i32* %20
%364 = load i32, i32* %15
%365 = load i32, i32* %17
%366 = add i32 %364, %365
store i32 %366, i32* %21
%367 = load i32, i32* %15
%368 = load i32, i32* %16
%369 = add i32 %367, %368
%370 = load i32, i32* %17
%371 = add i32 %369, %370
%372 = load i32, i32* %18
%373 = add i32 %371, %372
store i32 %373, i32* %22
%374 = load i32, i32* %16
%375 = load i32, i32* %18
%376 = add i32 %374, %375
store i32 %376, i32* %23
%377 = load i32, i32* %16
%378 = load i32, i32* %19
%379 = add i32 %377, %378
%380 = load i32, i32* %18
%381 = add i32 %379, %380
%382 = load i32, i32* %20
%383 = add i32 %381, %382
store i32 %383, i32* %24
%384 = load i32, i32* %21
%385 = and i32 %384, 496
%386 = lshr i32 %385, 4
%387 = load i32, i32* %21
%388 = and i32 %387, 1015808
%389 = lshr i32 %388, 10
%390 = or i32 %386, %389
%391 = load i32, i32* %21
%392 = and i32 %391, 2080374784
%393 = lshr i32 %392, 16
%394 = or i32 %390, %393
%395 = load i32, i32* %22
%396 = and i32 %395, 992
%397 = shl i32 %396, 11
%398 = or i32 %394, %397
%399 = load i32, i32* %22
%400 = and i32 %399, 2031616
%401 = shl i32 %400, 5
%402 = or i32 %398, %401
%403 = load i32, i32* %22
%404 = and i32 %403, -134217728
%405 = lshr i32 %404, 1
%406 = or i32 %402, %405
%407 = load i8*, i8** %9
%408 = bitcast i8* %407 to i32*
store i32 %406, i32* %408
%409 = load i32, i32* %23
%410 = and i32 %409, 496
%411 = lshr i32 %410, 4
%412 = load i32, i32* %23
%413 = and i32 %412, 1015808
%414 = lshr i32 %413, 10
%415 = or i32 %411, %414
%416 = load i32, i32* %23
%417 = and i32 %416, 2080374784
%418 = lshr i32 %417, 16
%419 = or i32 %415, %418
%420 = load i32, i32* %24
%421 = and i32 %420, 992
%422 = shl i32 %421, 11
%423 = or i32 %419, %422
%424 = load i32, i32* %24
%425 = and i32 %424, 2031616
%426 = shl i32 %425, 5
%427 = or i32 %423, %426
%428 = load i32, i32* %24
%429 = and i32 %428, -134217728
%430 = lshr i32 %429, 1
%431 = or i32 %427, %430
%432 = load i8*, i8** %9
%433 = getelementptr inbounds i8, i8* %432, i64 4
%434 = bitcast i8* %433 to i32*
store i32 %431, i32* %434
br label %508
435: ; preds = %284
%436 = load i8*, i8** %11
%437 = bitcast i8* %436 to i32*
%438 = load i32, i32* %437
store i32 %438, i32* %15
%439 = load i32, i32* %15
store i32 %439, i32* %16
%440 = load i32, i32* %15
store i32 %440, i32* %21
%441 = load i32, i32* %15
%442 = load i32, i32* %16
%443 = add i32 %441, %442
store i32 %443, i32* %22
%444 = load i32, i32* %21
%445 = and i32 %444, 248
%446 = lshr i32 %445, 3
%447 = load i32, i32* %21
%448 = and i32 %447, 507904
%449 = lshr i32 %448, 9
%450 = or i32 %446, %449
%451 = load i32, i32* %21
%452 = and i32 %451, 1040187392
%453 = lshr i32 %452, 15
%454 = or i32 %450, %453
%455 = load i32, i32* %22
%456 = and i32 %455, 496
%457 = shl i32 %456, 12
%458 = or i32 %454, %457
%459 = load i32, i32* %22
%460 = and i32 %459, 1015808
%461 = shl i32 %460, 6
%462 = or i32 %458, %461
%463 = load i32, i32* %22
%464 = and i32 %463, 2080374784
%465 = shl i32 %464, 0
%466 = or i32 %462, %465
%467 = load i8*, i8** %8
%468 = bitcast i8* %467 to i32*
store i32 %466, i32* %468
%469 = load i8*, i8** %12
%470 = bitcast i8* %469 to i32*
%471 = load i32, i32* %470
store i32 %471, i32* %17
%472 = load i32, i32* %17
store i32 %472, i32* %18
%473 = load i32, i32* %15
%474 = load i32, i32* %17
%475 = add i32 %473, %474
store i32 %475, i32* %21
%476 = load i32, i32* %15
%477 = load i32, i32* %16
%478 = add i32 %476, %477
%479 = load i32, i32* %17
%480 = add i32 %478, %479
%481 = load i32, i32* %18
%482 = add i32 %480, %481
store i32 %482, i32* %22
%483 = load i32, i32* %21
%484 = and i32 %483, 496
%485 = lshr i32 %484, 4
%486 = load i32, i32* %21
%487 = and i32 %486, 1015808
%488 = lshr i32 %487, 10
%489 = or i32 %485, %488
%490 = load i32, i32* %21
%491 = and i32 %490, 2080374784
%492 = lshr i32 %491, 16
%493 = or i32 %489, %492
%494 = load i32, i32* %22
%495 = and i32 %494, 992
%496 = shl i32 %495, 11
%497 = or i32 %493, %496
%498 = load i32, i32* %22
%499 = and i32 %498, 2031616
%500 = shl i32 %499, 5
%501 = or i32 %497, %500
%502 = load i32, i32* %22
%503 = and i32 %502, -134217728
%504 = lshr i32 %503, 1
%505 = or i32 %501, %504
%506 = load i8*, i8** %9
%507 = bitcast i8* %506 to i32*
store i32 %505, i32* %507
br label %508
508: ; preds = %435, %287
ret void
}

LLVM IR (-O2):
define void @dblineXRGBtoRGB555x2(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, 9
%20 = and i32 %19, 992
%21 = or i32 %18, %20
%22 = lshr i32 %12, 15
%23 = and i32 %22, 31744
%24 = or i32 %21, %23
%25 = shl i32 %16, 12
%26 = and i32 %25, 2031616
%27 = shl i32 %16, 6
%28 = and i32 %27, 65011712
%29 = and i32 %16, 2080374784
%30 = or i32 %24, %29
%31 = or i32 %30, %26
%32 = or i32 %31, %28
%33 = bitcast i8* %0 to i32*
store i32 %32, i32* %33
%34 = bitcast i8* %4 to i32*
%35 = load i32, i32* %34
%36 = getelementptr inbounds i8, i8* %4, i64 4
%37 = bitcast i8* %36 to i32*
%38 = load i32, i32* %37
%39 = add i32 %35, %12
%40 = add i32 %35, %16
%41 = add i32 %40, %38
%42 = lshr i32 %39, 4
%43 = and i32 %42, 31
%44 = lshr i32 %39, 10
%45 = and i32 %44, 992
%46 = or i32 %43, %45
%47 = lshr i32 %39, 16
%48 = and i32 %47, 31744
%49 = or i32 %46, %48
%50 = shl i32 %41, 11
%51 = and i32 %50, 2031616
%52 = or i32 %49, %51
%53 = shl i32 %41, 5
%54 = and i32 %53, 65011712
%55 = or i32 %52, %54
%56 = lshr i32 %41, 1
%57 = and i32 %56, 2080374784
%58 = or i32 %55, %57
%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* [ %36, %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 9, i32 9, i32 9, i32 9>
%147 = and <4 x i32> %146, <i32 992, i32 992, i32 992, i32 992>
%148 = or <4 x i32> %145, %147
%149 = lshr <4 x i32> %136, <i32 15, i32 15, i32 15, i32 15>
%150 = and <4 x i32> %149, <i32 31744, i32 31744, i32 31744, i32 31744>
%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 = shl <4 x i32> %142, <i32 6, i32 6, i32 6, i32 6>
%155 = and <4 x i32> %154, <i32 65011712, i32 65011712, i32 65011712, i32 65011712>
%156 = and <4 x i32> %142, <i32 2080374784, i32 2080374784, i32 2080374784, i32 2080374784>
%157 = or <4 x i32> %151, %156
%158 = or <4 x i32> %157, %153
%159 = or <4 x i32> %158, %155
%160 = lshr <4 x i32> %140, <i32 3, i32 3, i32 3, i32 3>
%161 = and <4 x i32> %160, <i32 31, i32 31, i32 31, i32 31>
%162 = lshr <4 x i32> %140, <i32 9, i32 9, i32 9, i32 9>
%163 = and <4 x i32> %162, <i32 992, i32 992, i32 992, i32 992>
%164 = or <4 x i32> %161, %163
%165 = lshr <4 x i32> %140, <i32 15, i32 15, i32 15, i32 15>
%166 = and <4 x i32> %165, <i32 31744, i32 31744, i32 31744, i32 31744>
%167 = or <4 x i32> %164, %166
%168 = shl <4 x i32> %143, <i32 12, i32 12, i32 12, i32 12>
%169 = and <4 x i32> %168, <i32 2031616, i32 2031616, i32 2031616, i32 2031616>
%170 = shl <4 x i32> %143, <i32 6, i32 6, i32 6, i32 6>
%171 = and <4 x i32> %170, <i32 65011712, i32 65011712, i32 65011712, i32 65011712>
%172 = and <4 x i32> %143, <i32 2080374784, i32 2080374784, i32 2080374784, i32 2080374784>
%173 = or <4 x i32> %167, %172
%174 = or <4 x i32> %173, %169
%175 = or <4 x i32> %174, %171
%176 = getelementptr inbounds i8, i8* %67, i64 %128
%177 = bitcast i8* %176 to <8 x i32>*
%178 = shufflevector <4 x i32> %159, <4 x i32> %175, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
store <8 x i32> %178, <8 x i32>* %177
%179 = bitcast i8* %130 to <8 x i32>*
%180 = load <8 x i32>, <8 x i32>* %179
%181 = shufflevector <8 x i32> %180, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
%182 = getelementptr inbounds i8, i8* %130, i64 4
%183 = bitcast i8* %182 to <8 x i32>*
%184 = load <8 x i32>, <8 x i32>* %183
%185 = shufflevector <8 x i32> %184, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
%186 = shufflevector <8 x i32> %184, <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
%187 = add <4 x i32> %181, %136
%188 = add <4 x i32> %181, %142
%189 = add <4 x i32> %188, %185
%190 = add <4 x i32> %185, %140
%191 = add <4 x i32> %185, %143
%192 = add <4 x i32> %191, %186
%193 = lshr <4 x i32> %187, <i32 4, i32 4, i32 4, i32 4>
%194 = and <4 x i32> %193, <i32 31, i32 31, i32 31, i32 31>
%195 = lshr <4 x i32> %187, <i32 10, i32 10, i32 10, i32 10>
%196 = and <4 x i32> %195, <i32 992, i32 992, i32 992, i32 992>
%197 = or <4 x i32> %194, %196
%198 = lshr <4 x i32> %187, <i32 16, i32 16, i32 16, i32 16>
%199 = and <4 x i32> %198, <i32 31744, i32 31744, i32 31744, i32 31744>
%200 = or <4 x i32> %197, %199
%201 = shl <4 x i32> %189, <i32 11, i32 11, i32 11, i32 11>
%202 = and <4 x i32> %201, <i32 2031616, i32 2031616, i32 2031616, i32 2031616>
%203 = or <4 x i32> %200, %202
%204 = shl <4 x i32> %189, <i32 5, i32 5, i32 5, i32 5>
%205 = and <4 x i32> %204, <i32 65011712, i32 65011712, i32 65011712, i32 65011712>
%206 = or <4 x i32> %203, %205
%207 = lshr <4 x i32> %189, <i32 1, i32 1, i32 1, i32 1>
%208 = and <4 x i32> %207, <i32 2080374784, i32 2080374784, i32 2080374784, i32 2080374784>
%209 = or <4 x i32> %206, %208
%210 = lshr <4 x i32> %190, <i32 4, i32 4, i32 4, i32 4>
%211 = and <4 x i32> %210, <i32 31, i32 31, i32 31, i32 31>
%212 = lshr <4 x i32> %190, <i32 10, i32 10, i32 10, i32 10>
%213 = and <4 x i32> %212, <i32 992, i32 992, i32 992, i32 992>
%214 = or <4 x i32> %211, %213
%215 = lshr <4 x i32> %190, <i32 16, i32 16, i32 16, i32 16>
%216 = and <4 x i32> %215, <i32 31744, i32 31744, i32 31744, i32 31744>
%217 = or <4 x i32> %214, %216
%218 = shl <4 x i32> %192, <i32 11, i32 11, i32 11, i32 11>
%219 = and <4 x i32> %218, <i32 2031616, i32 2031616, i32 2031616, i32 2031616>
%220 = or <4 x i32> %217, %219
%221 = shl <4 x i32> %192, <i32 5, i32 5, i32 5, i32 5>
%222 = and <4 x i32> %221, <i32 65011712, i32 65011712, i32 65011712, i32 65011712>
%223 = or <4 x i32> %220, %222
%224 = lshr <4 x i32> %192, <i32 1, i32 1, i32 1, i32 1>
%225 = and <4 x i32> %224, <i32 2080374784, i32 2080374784, i32 2080374784, i32 2080374784>
%226 = or <4 x i32> %223, %225
%227 = getelementptr inbounds i8, i8* %64, i64 %133
%228 = bitcast i8* %227 to <8 x i32>*
%229 = shufflevector <4 x i32> %209, <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* [ %294, %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, 9
%257 = and i32 %256, 992
%258 = or i32 %255, %257
%259 = lshr i32 %245, 15
%260 = and i32 %259, 31744
%261 = or i32 %258, %260
%262 = shl i32 %252, 12
%263 = and i32 %262, 2031616
%264 = shl i32 %252, 6
%265 = and i32 %264, 65011712
%266 = and i32 %252, 2080374784
%267 = or i32 %261, %266
%268 = or i32 %267, %263
%269 = or i32 %268, %265
%270 = bitcast i8* %240 to i32*
store i32 %269, i32* %270
%271 = lshr i32 %248, 3
%272 = and i32 %271, 31
%273 = lshr i32 %248, 9
%274 = and i32 %273, 992
%275 = or i32 %272, %274
%276 = lshr i32 %248, 15
%277 = and i32 %276, 31744
%278 = or i32 %275, %277
%279 = shl i32 %253, 12
%280 = and i32 %279, 2031616
%281 = shl i32 %253, 6
%282 = and i32 %281, 65011712
%283 = and i32 %253, 2080374784
%284 = or i32 %278, %283
%285 = or i32 %284, %280
%286 = or i32 %285, %282
%287 = getelementptr inbounds i8, i8* %240, i64 4
%288 = bitcast i8* %287 to i32*
store i32 %286, i32* %288
%289 = bitcast i8* %241 to i32*
%290 = load i32, i32* %289
%291 = getelementptr inbounds i8, i8* %241, i64 4
%292 = bitcast i8* %291 to i32*
%293 = load i32, i32* %292
%294 = getelementptr inbounds i8, i8* %241, i64 8
%295 = bitcast i8* %294 to i32*
%296 = load i32, i32* %295
%297 = add i32 %290, %245
%298 = add i32 %290, %252
%299 = add i32 %298, %293
%300 = add i32 %293, %248
%301 = add i32 %293, %253
%302 = add i32 %301, %296
%303 = lshr i32 %297, 4
%304 = and i32 %303, 31
%305 = lshr i32 %297, 10
%306 = and i32 %305, 992
%307 = or i32 %304, %306
%308 = lshr i32 %297, 16
%309 = and i32 %308, 31744
%310 = or i32 %307, %309
%311 = shl i32 %299, 11
%312 = and i32 %311, 2031616
%313 = or i32 %310, %312
%314 = shl i32 %299, 5
%315 = and i32 %314, 65011712
%316 = or i32 %313, %315
%317 = lshr i32 %299, 1
%318 = and i32 %317, 2080374784
%319 = or i32 %316, %318
%320 = bitcast i8* %243 to i32*
store i32 %319, i32* %320
%321 = lshr i32 %300, 4
%322 = and i32 %321, 31
%323 = lshr i32 %300, 10
%324 = and i32 %323, 992
%325 = or i32 %322, %324
%326 = lshr i32 %300, 16
%327 = and i32 %326, 31744
%328 = or i32 %325, %327
%329 = shl i32 %302, 11
%330 = and i32 %329, 2031616
%331 = or i32 %328, %330
%332 = shl i32 %302, 5
%333 = and i32 %332, 65011712
%334 = or i32 %331, %333
%335 = lshr i32 %302, 1
%336 = and i32 %335, 2080374784
%337 = or i32 %334, %336
%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 ], [ %294, %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 %438
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 = shl i32 %356, 1
%359 = lshr i32 %352, 3
%360 = and i32 %359, 31
%361 = lshr i32 %352, 9
%362 = and i32 %361, 992
%363 = or i32 %360, %362
%364 = lshr i32 %352, 15
%365 = and i32 %364, 31744
%366 = or i32 %363, %365
%367 = shl i32 %357, 12
%368 = and i32 %367, 2031616
%369 = shl i32 %357, 6
%370 = and i32 %369, 65011712
%371 = and i32 %357, 2080374784
%372 = or i32 %366, %371
%373 = or i32 %372, %368
%374 = or i32 %373, %370
%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, 9
%379 = and i32 %378, 992
%380 = or i32 %377, %379
%381 = lshr i32 %356, 15
%382 = and i32 %381, 31744
%383 = or i32 %380, %382
%384 = shl i32 %356, 13
%385 = and i32 %384, 2031616
%386 = or i32 %383, %385
%387 = shl i32 %356, 7
%388 = and i32 %387, 65011712
%389 = or i32 %386, %388
%390 = and i32 %358, 2080374784
%391 = or i32 %389, %390
%392 = getelementptr inbounds i8, i8* %348, i64 4
%393 = bitcast i8* %392 to i32*
store i32 %391, i32* %393
%394 = bitcast i8* %347 to i32*
%395 = load i32, i32* %394
%396 = getelementptr inbounds i8, i8* %347, i64 4
%397 = bitcast i8* %396 to i32*
%398 = load i32, i32* %397
%399 = add i32 %395, %352
%400 = add i32 %395, %357
%401 = add i32 %400, %398
%402 = add i32 %398, %356
%403 = lshr i32 %399, 4
%404 = and i32 %403, 31
%405 = lshr i32 %399, 10
%406 = and i32 %405, 992
%407 = or i32 %404, %406
%408 = lshr i32 %399, 16
%409 = and i32 %408, 31744
%410 = or i32 %407, %409
%411 = shl i32 %401, 11
%412 = and i32 %411, 2031616
%413 = or i32 %410, %412
%414 = shl i32 %401, 5
%415 = and i32 %414, 65011712
%416 = or i32 %413, %415
%417 = lshr i32 %401, 1
%418 = and i32 %417, 2080374784
%419 = or i32 %416, %418
%420 = bitcast i8* %345 to i32*
store i32 %419, i32* %420
%421 = lshr i32 %402, 4
%422 = and i32 %421, 31
%423 = lshr i32 %402, 10
%424 = and i32 %423, 992
%425 = lshr i32 %402, 16
%426 = and i32 %425, 31744
%427 = shl i32 %402, 12
%428 = and i32 %427, 2031616
%429 = shl i32 %402, 6
%430 = and i32 %429, 65011712
%431 = and i32 %402, 2080374784
%432 = or i32 %424, %431
%433 = or i32 %432, %422
%434 = or i32 %433, %426
%435 = or i32 %434, %428
%436 = or i32 %435, %430
%437 = getelementptr inbounds i8, i8* %345, i64 4
br label %476
438: ; preds = %344
%439 = shl i32 %352, 1
%440 = lshr i32 %352, 3
%441 = and i32 %440, 31
%442 = lshr i32 %352, 9
%443 = and i32 %442, 992
%444 = or i32 %441, %443
%445 = lshr i32 %352, 15
%446 = and i32 %445, 31744
%447 = or i32 %444, %446
%448 = shl i32 %352, 13
%449 = and i32 %448, 2031616
%450 = or i32 %447, %449
%451 = shl i32 %352, 7
%452 = and i32 %451, 65011712
%453 = or i32 %450, %452
%454 = and i32 %439, 2080374784
%455 = or i32 %453, %454
%456 = bitcast i8* %348 to i32*
store i32 %455, i32* %456
%457 = bitcast i8* %347 to i32*
%458 = load i32, i32* %457
%459 = add i32 %458, %352
%460 = lshr i32 %459, 4
%461 = and i32 %460, 31
%462 = lshr i32 %459, 10
%463 = and i32 %462, 992
%464 = lshr i32 %459, 16
%465 = and i32 %464, 31744
%466 = shl i32 %459, 12
%467 = and i32 %466, 2031616
%468 = shl i32 %459, 6
%469 = and i32 %468, 65011712
%470 = and i32 %459, 2080374784
%471 = or i32 %463, %470
%472 = or i32 %471, %461
%473 = or i32 %472, %465
%474 = or i32 %473, %467
%475 = or i32 %474, %469
br label %476
476: ; preds = %438, %353
%477 = phi i8* [ %345, %438 ], [ %437, %353 ]
%478 = phi i32 [ %475, %438 ], [ %436, %353 ]
%479 = bitcast i8* %477 to i32*
store i32 %478, i32* %479
ret void
}