void interpRGB565(unsigned char *src1, unsigned char *src2, unsigned char *dst1,
                  unsigned char *dst2, int width) {
  unsigned int a, b, c, d, e, f;
  unsigned int w, x, y, z;
  width >>= 1;
  while (--width) {
    a = *(unsigned int *)(src1 + 0);
    b = *(unsigned int *)(src1 + 4);
    e = *(unsigned int *)(src1 + 8);
    w = a;
    x = a + b;
    y = b;
    z = b + e;
    *(unsigned int *)(dst1 + 0) =
        ((w & 0x000000f8) >> 3) | ((w & 0x0007e000) >> 8) |
        ((w & 0x3e000000) >> 14) | ((x & 0x000001f0) << 12) |
        ((x & 0x000fc000) << 7) | ((x & 0x7c000000) << 1);
    *(unsigned int *)(dst1 + 4) =
        ((y & 0x000000f8) >> 3) | ((y & 0x0007e000) >> 8) |
        ((y & 0x3e000000) >> 14) | ((z & 0x000001f0) << 12) |
        ((z & 0x000fc000) << 7) | ((z & 0x7c000000) << 1);
    c = *(unsigned int *)(src2 + 0);
    d = *(unsigned int *)(src2 + 4);
    f = *(unsigned int *)(src2 + 8);
    w = a + c;
    x = a + b + c + d;
    y = b + d;
    z = b + e + d + f;
    *(unsigned int *)(dst2 + 0) =
        ((w & 0x000001f0) >> 4) | ((w & 0x000fc000) >> 9) |
        ((w & 0x7c000000) >> 15) | ((x & 0x000003e0) << 11) |
        ((x & 0x001f8000) << 6) | ((x & 0xf8000000) << 0);
    *(unsigned int *)(dst2 + 4) =
        ((y & 0x000001f0) >> 4) | ((y & 0x000fc000) >> 9) |
        ((y & 0x7c000000) >> 15) | ((z & 0x000003e0) << 11) |
        ((z & 0x001f8000) << 6) | ((z & 0xf8000000) << 0);
    src1 += 8;
    src2 += 8;
    dst1 += 8;
    dst2 += 8;
  }
  a = *(unsigned int *)(src1 + 0);
  b = *(unsigned int *)(src1 + 4);
  e = b;
  w = a;
  x = a + b;
  y = b;
  z = b + e;
  *(unsigned int *)(dst1 + 0) =
      ((w & 0x000000f8) >> 3) | ((w & 0x0007e000) >> 8) |
      ((w & 0x3e000000) >> 14) | ((x & 0x000001f0) << 12) |
      ((x & 0x000fc000) << 7) | ((x & 0x7c000000) << 1);
  *(unsigned int *)(dst1 + 4) =
      ((y & 0x000000f8) >> 3) | ((y & 0x0007e000) >> 8) |
      ((y & 0x3e000000) >> 14) | ((z & 0x000001f0) << 12) |
      ((z & 0x000fc000) << 7) | ((z & 0x7c000000) << 1);
  c = *(unsigned int *)(src2 + 0);
  d = *(unsigned int *)(src2 + 4);
  f = d;
  w = a + c;
  x = a + b + c + d;
  y = b + d;
  z = b + e + d + f;
  *(unsigned int *)(dst2 + 0) =
      ((w & 0x000001f0) >> 4) | ((w & 0x000fc000) >> 9) |
      ((w & 0x7c000000) >> 15) | ((x & 0x000003e0) << 11) |
      ((x & 0x001f8000) << 6) | ((x & 0xf8000000) << 0);
  *(unsigned int *)(dst2 + 4) =
      ((y & 0x000001f0) >> 4) | ((y & 0x000fc000) >> 9) |
      ((y & 0x7c000000) >> 15) | ((z & 0x000003e0) << 11) |
      ((z & 0x001f8000) << 6) | ((z & 0xf8000000) << 0);
}


x86 assembly (clang, -O0):
<interpRGB565>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
mov    -0x24(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
cmp    $0x0,%eax
je     133e <interpRGB565+0x23e>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x28(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x40(%rbp),%ecx
and    $0xf8,%ecx
shr    $0x3,%ecx
mov    -0x40(%rbp),%eax
and    $0x7e000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xe,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xfc000,%eax
shl    $0x7,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x1,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
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    -0x18(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x28(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x28(%rbp),%eax
add    -0x2c(%rbp),%eax
add    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
add    -0x34(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x40(%rbp),%ecx
and    $0x1f0,%ecx
shr    $0x4,%ecx
mov    -0x40(%rbp),%eax
and    $0xfc000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x7c000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x1f8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xf8000000,%eax
shl    $0x0,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
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    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x8(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
jmp    1121 <interpRGB565+0x21>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x28(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x40(%rbp),%ecx
and    $0xf8,%ecx
shr    $0x3,%ecx
mov    -0x40(%rbp),%eax
and    $0x7e000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xe,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xfc000,%eax
shl    $0x7,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x1,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
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    -0x18(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x28(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x28(%rbp),%eax
add    -0x2c(%rbp),%eax
add    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
add    -0x34(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x40(%rbp),%ecx
and    $0x1f0,%ecx
shr    $0x4,%ecx
mov    -0x40(%rbp),%eax
and    $0xfc000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x7c000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x1f8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xf8000000,%eax
shl    $0x0,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
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    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<interpRGB565>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sar    %r8d
mov    %r8d,%eax
add    $0xffffffff,%eax
je     160d <interpRGB565+0x50d>
add    $0xfffffffe,%r8d
cmp    $0x4,%r8d
jb     1468 <interpRGB565+0x368>
mov    %eax,-0x4(%rsp)
lea    (%rcx,%r8,8),%rbp
add    $0x8,%rbp
cmp    %rdx,%rbp
seta   -0x5(%rsp)
lea    (%rdx,%r8,8),%rax
add    $0x8,%rax
cmp    %rcx,%rax
seta   %r15b
lea    (%rdi,%r8,8),%rbx
add    $0xc,%rbx
cmp    %rdx,%rbx
seta   %r13b
cmp    %rdi,%rax
seta   %r11b
lea    (%rsi,%r8,8),%r10
add    $0xc,%r10
cmp    %rdx,%r10
seta   %r12b
cmp    %rsi,%rax
seta   %r14b
cmp    %rcx,%rbx
seta   %r9b
cmp    %rdi,%rbp
seta   %al
cmp    %rcx,%r10
seta   %r10b
cmp    %rsi,%rbp
seta   %bpl
test   %r15b,-0x5(%rsp)
jne    1464 <interpRGB565+0x364>
and    %r11b,%r13b
jne    1464 <interpRGB565+0x364>
and    %r14b,%r12b
jne    1464 <interpRGB565+0x364>
and    %al,%r9b
jne    1464 <interpRGB565+0x364>
and    %bpl,%r10b
jne    1464 <interpRGB565+0x364>
add    $0x1,%r8
mov    %r8d,%eax
and    $0x3,%eax
test   %rax,%rax
mov    $0x4,%ebp
cmovne %rax,%rbp
sub    %rbp,%r8
mov    -0x4(%rsp),%eax
sub    %r8d,%eax
lea    (%rcx,%r8,8),%r9
lea    (%rdx,%r8,8),%r10
lea    (%rsi,%r8,8),%r11
lea    (%rdi,%r8,8),%r14
xor    %ebx,%ebx
movdqa 0xe05(%rip),%xmm8
movdqa 0xe0c(%rip),%xmm9
movdqa 0xe13(%rip),%xmm10
movdqa 0xe1a(%rip),%xmm11
movdqa 0xe21(%rip),%xmm12
movdqa 0xe28(%rip),%xmm13
nopl   0x0(%rax,%rax,1)
movups (%rdi,%rbx,8),%xmm7
movups 0x4(%rdi,%rbx,8),%xmm5
movups 0x10(%rdi,%rbx,8),%xmm1
shufps $0x88,%xmm1,%xmm7
movups 0x14(%rdi,%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(%rdx,%rbx,8)
movdqu %xmm0,(%rdx,%rbx,8)
movups (%rsi,%rbx,8),%xmm2
movups 0x4(%rsi,%rbx,8),%xmm3
movups 0x10(%rsi,%rbx,8),%xmm0
shufps $0x88,%xmm0,%xmm2
movups 0x14(%rsi,%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(%rcx,%rbx,8)
movdqu %xmm0,(%rcx,%rbx,8)
add    $0x4,%rbx
cmp    %rbx,%r8
jne    1230 <interpRGB565+0x130>
mov    %r9,%rcx
mov    %r10,%rdx
mov    %r11,%rsi
mov    %r14,%rdi
jmp    1468 <interpRGB565+0x368>
mov    -0x4(%rsp),%eax
mov    %eax,%r8d
xor    %r9d,%r9d
xor    %r10d,%r10d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    (%rdi,%r10,8),%r15d
mov    0x4(%rdi,%r10,8),%r11d
lea    (%r11,%r15,1),%r14d
mov    0x8(%rdi,%r10,8),%r12d
add    %r11d,%r12d
mov    %r15d,%ebp
shr    $0x3,%ebp
and    $0x1f,%ebp
mov    %r15d,%ebx
shr    $0x8,%ebx
and    $0x7e0,%ebx
or     %ebp,%ebx
mov    %r15d,%ebp
shr    $0xe,%ebp
and    $0xf800,%ebp
or     %ebx,%ebp
mov    %r14d,%ebx
shl    $0xc,%ebx
and    $0x1f0000,%ebx
or     %ebp,%ebx
mov    %r14d,%ebp
shl    $0x7,%ebp
and    $0x7e00000,%ebp
or     %ebx,%ebp
mov    %r14d,%ebx
and    $0xfc000000,%ebx
lea    0x0(%rbp,%rbx,2),%ebx
mov    %ebx,(%rdx,%r10,8)
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    %r12d,%ebp
shl    $0xc,%ebp
and    $0x1f0000,%ebp
or     %ebx,%ebp
mov    %r12d,%ebx
shl    $0x7,%ebx
and    $0x7e00000,%ebx
or     %ebp,%ebx
mov    %r12d,%ebp
and    $0xfc000000,%ebp
lea    (%rbx,%rbp,2),%ebx
mov    %ebx,0x4(%rdx,%r10,8)
mov    (%rsi,%r10,8),%ebp
mov    0x4(%rsi,%r10,8),%ebx
add    %ebp,%r15d
add    %r14d,%ebp
add    %ebx,%ebp
add    %ebx,%r11d
add    %ebx,%r12d
add    0x8(%rsi,%r10,8),%r12d
mov    %r15d,%ebx
shr    $0x4,%ebx
and    $0x1f,%ebx
mov    %r15d,%eax
shr    $0x9,%eax
and    $0x7e0,%eax
or     %ebx,%eax
shr    $0xf,%r15d
and    $0xf800,%r15d
or     %eax,%r15d
mov    %ebp,%eax
shl    $0xb,%eax
and    $0x1f0000,%eax
mov    %ebp,%ebx
shl    $0x6,%ebx
and    $0x7e00000,%ebx
and    $0xf8000000,%ebp
or     %r15d,%ebp
or     %eax,%ebp
or     %ebx,%ebp
mov    %ebp,(%rcx,%r10,8)
mov    %r11d,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %r11d,%ebx
shr    $0x9,%ebx
and    $0x7e0,%ebx
or     %eax,%ebx
shr    $0xf,%r11d
and    $0xf800,%r11d
or     %ebx,%r11d
mov    %r12d,%eax
shl    $0xb,%eax
and    $0x1f0000,%eax
mov    %r12d,%ebx
shl    $0x6,%ebx
and    $0x7e00000,%ebx
and    $0xf8000000,%r12d
or     %r11d,%r12d
or     %eax,%r12d
or     %ebx,%r12d
mov    %r12d,0x4(%rcx,%r10,8)
add    $0x1,%r10
add    $0xfffffffffffffff8,%r9
cmp    %r10d,%r8d
jne    1480 <interpRGB565+0x380>
sub    %r9,%rcx
sub    %r9,%rdx
sub    %r9,%rsi
sub    %r9,%rdi
mov    (%rdi),%eax
mov    0x4(%rdi),%r9d
lea    (%r9,%rax,1),%r8d
mov    %eax,%ebx
shr    $0x3,%ebx
and    $0x1f,%ebx
mov    %eax,%ebp
shr    $0x8,%ebp
and    $0x7e0,%ebp
or     %ebx,%ebp
mov    %eax,%ebx
shr    $0xe,%ebx
and    $0xf800,%ebx
or     %ebp,%ebx
mov    %r8d,%ebp
shl    $0xc,%ebp
and    $0x1f0000,%ebp
or     %ebx,%ebp
mov    %r8d,%ebx
shl    $0x7,%ebx
and    $0x7e00000,%ebx
or     %ebp,%ebx
mov    %r8d,%ebp
and    $0xfc000000,%ebp
lea    (%rbx,%rbp,2),%ebp
mov    %ebp,(%rdx)
mov    %r9d,%ebp
shr    $0x3,%ebp
and    $0x1f,%ebp
mov    %r9d,%ebx
shr    $0x8,%ebx
and    $0x7e0,%ebx
or     %ebp,%ebx
mov    %r9d,%ebp
shr    $0xe,%ebp
and    $0xf800,%ebp
or     %ebx,%ebp
mov    %r9d,%ebx
shl    $0xd,%ebx
and    $0x1f0000,%ebx
or     %ebp,%ebx
mov    %r9d,%edi
shl    $0x8,%edi
and    $0x7e00000,%edi
or     %ebx,%edi
mov    %r9d,%ebp
and    $0xfe000000,%ebp
lea    (%rdi,%rbp,4),%edi
mov    %edi,0x4(%rdx)
mov    (%rsi),%ebx
mov    0x4(%rsi),%edx
add    %ebx,%eax
add    %r8d,%ebx
add    %edx,%ebx
add    %r9d,%edx
mov    %eax,%esi
shr    $0x4,%esi
and    $0x1f,%esi
mov    %eax,%edi
shr    $0x9,%edi
and    $0x7e0,%edi
or     %esi,%edi
shr    $0xf,%eax
and    $0xf800,%eax
or     %edi,%eax
mov    %ebx,%esi
shl    $0xb,%esi
and    $0x1f0000,%esi
mov    %ebx,%edi
shl    $0x6,%edi
and    $0x7e00000,%edi
and    $0xf8000000,%ebx
or     %eax,%ebx
or     %esi,%ebx
or     %edi,%ebx
mov    %ebx,(%rcx)
mov    %edx,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %edx,%esi
shr    $0x9,%esi
and    $0x7e0,%esi
or     %eax,%esi
mov    %edx,%eax
shr    $0xf,%eax
and    $0xf800,%eax
or     %esi,%eax
mov    %edx,%esi
shl    $0xc,%esi
and    $0x1f0000,%esi
or     %eax,%esi
mov    %edx,%eax
shl    $0x7,%eax
and    $0x7e00000,%eax
or     %esi,%eax
and    $0xfc000000,%edx
lea    (%rax,%rdx,2),%eax
mov    %eax,0x4(%rcx)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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