void interpRGB555(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 & 0x0007c000) >> 9) |
        ((w & 0x3e000000) >> 15) | ((x & 0x000001f0) << 12) |
        ((x & 0x000f8000) << 6) | ((x & 0x7c000000) << 0);
    *(unsigned int *)(dst1 + 4) =
        ((y & 0x000000f8) >> 3) | ((y & 0x0007c000) >> 9) |
        ((y & 0x3e000000) >> 15) | ((z & 0x000001f0) << 12) |
        ((z & 0x000f8000) << 6) | ((z & 0x7c000000) << 0);
    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 & 0x000f8000) >> 10) |
        ((w & 0x7c000000) >> 16) | ((x & 0x000003e0) << 11) |
        ((x & 0x001f0000) << 5) | ((x & 0xf8000000) >> 1);
    *(unsigned int *)(dst2 + 4) =
        ((y & 0x000001f0) >> 4) | ((y & 0x000f8000) >> 10) |
        ((y & 0x7c000000) >> 16) | ((z & 0x000003e0) << 11) |
        ((z & 0x001f0000) << 5) | ((z & 0xf8000000) >> 1);
    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 & 0x0007c000) >> 9) |
      ((w & 0x3e000000) >> 15) | ((x & 0x000001f0) << 12) |
      ((x & 0x000f8000) << 6) | ((x & 0x7c000000) << 0);
  *(unsigned int *)(dst1 + 4) =
      ((y & 0x000000f8) >> 3) | ((y & 0x0007c000) >> 9) |
      ((y & 0x3e000000) >> 15) | ((z & 0x000001f0) << 12) |
      ((z & 0x000f8000) << 6) | ((z & 0x7c000000) << 0);
  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 & 0x000f8000) >> 10) |
      ((w & 0x7c000000) >> 16) | ((x & 0x000003e0) << 11) |
      ((x & 0x001f0000) << 5) | ((x & 0xf8000000) >> 1);
  *(unsigned int *)(dst2 + 4) =
      ((y & 0x000001f0) >> 4) | ((y & 0x000f8000) >> 10) |
      ((y & 0x7c000000) >> 16) | ((z & 0x000003e0) << 11) |
      ((z & 0x001f0000) << 5) | ((z & 0xf8000000) >> 1);
}


x86 assembly (clang, -O0):
<interpRGB555>:
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 <interpRGB555+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    $0x7c000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xf8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x0,%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    $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    -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    $0xf8000,%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x7c000000,%eax
shr    $0x10,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x1f0000,%eax
shl    $0x5,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xf8000000,%eax
shr    $0x1,%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    $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    -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 <interpRGB555+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    $0x7c000,%eax
shr    $0x9,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x3e000000,%eax
shr    $0xf,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x1f0,%eax
shl    $0xc,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xf8000,%eax
shl    $0x6,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x7c000000,%eax
shl    $0x0,%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    $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    -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    $0xf8000,%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x7c000000,%eax
shr    $0x10,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x3e0,%eax
shl    $0xb,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x1f0000,%eax
shl    $0x5,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xf8000000,%eax
shr    $0x1,%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    $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    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<interpRGB555>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sar    %r8d
mov    %r8d,%eax
add    $0xffffffff,%eax
je     1612 <interpRGB555+0x512>
add    $0xfffffffe,%r8d
cmp    $0x4,%r8d
jb     1470 <interpRGB555+0x370>
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    146c <interpRGB555+0x36c>
and    %r11b,%r13b
jne    146c <interpRGB555+0x36c>
and    %r14b,%r12b
jne    146c <interpRGB555+0x36c>
and    %al,%r9b
jne    146c <interpRGB555+0x36c>
and    %bpl,%r10b
jne    146c <interpRGB555+0x36c>
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),%xmm4
movups 0x4(%rdi,%rbx,8),%xmm5
movups 0x10(%rdi,%rbx,8),%xmm1
shufps $0x88,%xmm1,%xmm4
movups 0x14(%rdi,%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(%rdx,%rbx,8)
movdqu %xmm0,(%rdx,%rbx,8)
movups (%rsi,%rbx,8),%xmm1
movups 0x4(%rsi,%rbx,8),%xmm2
movups 0x10(%rsi,%rbx,8),%xmm0
shufps $0x88,%xmm0,%xmm1
movups 0x14(%rsi,%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(%rcx,%rbx,8)
movdqu %xmm0,(%rcx,%rbx,8)
add    $0x4,%rbx
cmp    %rbx,%r8
jne    1230 <interpRGB555+0x130>
mov    %r9,%rcx
mov    %r10,%rdx
mov    %r11,%rsi
mov    %r14,%rdi
jmp    1470 <interpRGB555+0x370>
mov    -0x4(%rsp),%eax
mov    %eax,%r8d
xor    %r9d,%r9d
xor    %r10d,%r10d
nopl   0x0(%rax)
mov    (%rdi,%r10,8),%r12d
mov    0x4(%rdi,%r10,8),%r11d
lea    (%r11,%r12,1),%r14d
mov    0x8(%rdi,%r10,8),%r15d
add    %r11d,%r15d
mov    %r12d,%ebp
shr    $0x3,%ebp
and    $0x1f,%ebp
mov    %r12d,%eax
shr    $0x9,%eax
and    $0x3e0,%eax
or     %ebp,%eax
mov    %r12d,%ebp
shr    $0xf,%ebp
and    $0x7c00,%ebp
or     %eax,%ebp
mov    %r14d,%r13d
shl    $0xc,%r13d
and    $0x1f0000,%r13d
mov    %r14d,%ebx
shl    $0x6,%ebx
and    $0x3e00000,%ebx
mov    %r14d,%eax
and    $0x7c000000,%eax
or     %ebp,%eax
or     %r13d,%eax
or     %ebx,%eax
mov    %eax,(%rdx,%r10,8)
mov    %r11d,%eax
shr    $0x3,%eax
and    $0x1f,%eax
mov    %r11d,%ebx
shr    $0x9,%ebx
and    $0x3e0,%ebx
or     %eax,%ebx
mov    %r11d,%eax
shr    $0xf,%eax
and    $0x7c00,%eax
or     %ebx,%eax
mov    %r15d,%r13d
shl    $0xc,%r13d
and    $0x1f0000,%r13d
mov    %r15d,%ebp
shl    $0x6,%ebp
and    $0x3e00000,%ebp
mov    %r15d,%ebx
and    $0x7c000000,%ebx
or     %eax,%ebx
or     %r13d,%ebx
or     %ebp,%ebx
mov    %ebx,0x4(%rdx,%r10,8)
mov    (%rsi,%r10,8),%ebp
mov    0x4(%rsi,%r10,8),%eax
add    %ebp,%r12d
add    %r14d,%ebp
add    %eax,%ebp
add    %eax,%r15d
add    0x8(%rsi,%r10,8),%r15d
add    %eax,%r11d
mov    %r12d,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %r12d,%ebx
shr    $0xa,%ebx
and    $0x3e0,%ebx
or     %eax,%ebx
shr    $0x10,%r12d
and    $0x7c00,%r12d
or     %ebx,%r12d
mov    %ebp,%eax
shl    $0xb,%eax
and    $0x1f0000,%eax
or     %r12d,%eax
mov    %ebp,%ebx
shl    $0x5,%ebx
and    $0x3e00000,%ebx
or     %eax,%ebx
shr    %ebp
and    $0x7c000000,%ebp
or     %ebx,%ebp
mov    %ebp,(%rcx,%r10,8)
mov    %r11d,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %r11d,%ebx
shr    $0xa,%ebx
and    $0x3e0,%ebx
or     %eax,%ebx
shr    $0x10,%r11d
and    $0x7c00,%r11d
or     %ebx,%r11d
mov    %r15d,%eax
shl    $0xb,%eax
and    $0x1f0000,%eax
or     %r11d,%eax
mov    %r15d,%ebp
shl    $0x5,%ebp
and    $0x3e00000,%ebp
or     %eax,%ebp
shr    %r15d
and    $0x7c000000,%r15d
or     %ebp,%r15d
mov    %r15d,0x4(%rcx,%r10,8)
add    $0x1,%r10
add    $0xfffffffffffffff8,%r9
cmp    %r10d,%r8d
jne    1480 <interpRGB555+0x380>
sub    %r9,%rcx
sub    %r9,%rdx
sub    %r9,%rsi
sub    %r9,%rdi
mov    (%rdi),%r10d
mov    0x4(%rdi),%r9d
lea    (%r9,%r10,1),%r8d
mov    %r10d,%ebx
shr    $0x3,%ebx
and    $0x1f,%ebx
mov    %r10d,%ebp
shr    $0x9,%ebp
and    $0x3e0,%ebp
or     %ebx,%ebp
mov    %r10d,%ebx
shr    $0xf,%ebx
and    $0x7c00,%ebx
or     %ebp,%ebx
mov    %r8d,%ebp
shl    $0xc,%ebp
and    $0x1f0000,%ebp
mov    %r8d,%edi
shl    $0x6,%edi
and    $0x3e00000,%edi
mov    %r8d,%eax
and    $0x7c000000,%eax
or     %ebx,%eax
or     %ebp,%eax
or     %edi,%eax
mov    %eax,(%rdx)
mov    %r9d,%eax
shr    $0x3,%eax
and    $0x1f,%eax
mov    %r9d,%edi
shr    $0x9,%edi
and    $0x3e0,%edi
or     %eax,%edi
mov    %r9d,%eax
shr    $0xf,%eax
and    $0x7c00,%eax
or     %edi,%eax
mov    %r9d,%edi
shl    $0xd,%edi
and    $0x1f0000,%edi
or     %eax,%edi
mov    %r9d,%eax
shl    $0x7,%eax
and    $0x3e00000,%eax
or     %edi,%eax
mov    %r9d,%edi
and    $0x3e000000,%edi
lea    (%rax,%rdi,2),%eax
mov    %eax,0x4(%rdx)
mov    (%rsi),%ebx
mov    0x4(%rsi),%edx
add    %ebx,%r10d
add    %r8d,%ebx
add    %edx,%ebx
add    %r9d,%edx
mov    %r10d,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %r10d,%esi
shr    $0xa,%esi
and    $0x3e0,%esi
or     %eax,%esi
shr    $0x10,%r10d
and    $0x7c00,%r10d
or     %esi,%r10d
mov    %ebx,%eax
shl    $0xb,%eax
and    $0x1f0000,%eax
or     %r10d,%eax
mov    %ebx,%esi
shl    $0x5,%esi
and    $0x3e00000,%esi
or     %eax,%esi
shr    %ebx
and    $0x7c000000,%ebx
or     %esi,%ebx
mov    %ebx,(%rcx)
mov    %edx,%eax
shr    $0x4,%eax
and    $0x1f,%eax
mov    %edx,%esi
shr    $0xa,%esi
and    $0x3e0,%esi
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     %esi,%edx
or     %eax,%edx
or     %edi,%edx
or     %ebp,%edx
or     %ebx,%edx
mov    %edx,0x4(%rcx)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @interpRGB555(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, 507904
%53 = lshr i32 %52, 9
%54 = or i32 %50, %53
%55 = load i32, i32* %17
%56 = and i32 %55, 1040187392
%57 = lshr i32 %56, 15
%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, 1015808
%65 = shl i32 %64, 6
%66 = or i32 %62, %65
%67 = load i32, i32* %18
%68 = and i32 %67, 2080374784
%69 = shl i32 %68, 0
%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, 507904
%79 = lshr i32 %78, 9
%80 = or i32 %76, %79
%81 = load i32, i32* %19
%82 = and i32 %81, 1040187392
%83 = lshr i32 %82, 15
%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, 1015808
%91 = shl i32 %90, 6
%92 = or i32 %88, %91
%93 = load i32, i32* %20
%94 = and i32 %93, 2080374784
%95 = shl i32 %94, 0
%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, 1015808
%137 = lshr i32 %136, 10
%138 = or i32 %134, %137
%139 = load i32, i32* %17
%140 = and i32 %139, 2080374784
%141 = lshr i32 %140, 16
%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, 2031616
%149 = shl i32 %148, 5
%150 = or i32 %146, %149
%151 = load i32, i32* %18
%152 = and i32 %151, -134217728
%153 = lshr i32 %152, 1
%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, 1015808
%163 = lshr i32 %162, 10
%164 = or i32 %160, %163
%165 = load i32, i32* %19
%166 = and i32 %165, 2080374784
%167 = lshr i32 %166, 16
%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, 2031616
%175 = shl i32 %174, 5
%176 = or i32 %172, %175
%177 = load i32, i32* %20
%178 = and i32 %177, -134217728
%179 = lshr i32 %178, 1
%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, 507904
%215 = lshr i32 %214, 9
%216 = or i32 %212, %215
%217 = load i32, i32* %17
%218 = and i32 %217, 1040187392
%219 = lshr i32 %218, 15
%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, 1015808
%227 = shl i32 %226, 6
%228 = or i32 %224, %227
%229 = load i32, i32* %18
%230 = and i32 %229, 2080374784
%231 = shl i32 %230, 0
%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, 507904
%241 = lshr i32 %240, 9
%242 = or i32 %238, %241
%243 = load i32, i32* %19
%244 = and i32 %243, 1040187392
%245 = lshr i32 %244, 15
%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, 1015808
%253 = shl i32 %252, 6
%254 = or i32 %250, %253
%255 = load i32, i32* %20
%256 = and i32 %255, 2080374784
%257 = shl i32 %256, 0
%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, 1015808
%296 = lshr i32 %295, 10
%297 = or i32 %293, %296
%298 = load i32, i32* %17
%299 = and i32 %298, 2080374784
%300 = lshr i32 %299, 16
%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, 2031616
%308 = shl i32 %307, 5
%309 = or i32 %305, %308
%310 = load i32, i32* %18
%311 = and i32 %310, -134217728
%312 = lshr i32 %311, 1
%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, 1015808
%322 = lshr i32 %321, 10
%323 = or i32 %319, %322
%324 = load i32, i32* %19
%325 = and i32 %324, 2080374784
%326 = lshr i32 %325, 16
%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, 2031616
%334 = shl i32 %333, 5
%335 = or i32 %331, %334
%336 = load i32, i32* %20
%337 = and i32 %336, -134217728
%338 = lshr i32 %337, 1
%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 @interpRGB555(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 9, i32 9, i32 9, i32 9>
%79 = and <4 x i32> %78, <i32 992, i32 992, i32 992, i32 992>
%80 = or <4 x i32> %77, %79
%81 = lshr <4 x i32> %68, <i32 15, i32 15, i32 15, i32 15>
%82 = and <4 x i32> %81, <i32 31744, i32 31744, i32 31744, i32 31744>
%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 = shl <4 x i32> %74, <i32 6, i32 6, i32 6, i32 6>
%87 = and <4 x i32> %86, <i32 65011712, i32 65011712, i32 65011712, i32 65011712>
%88 = and <4 x i32> %74, <i32 2080374784, i32 2080374784, i32 2080374784, i32 2080374784>
%89 = or <4 x i32> %83, %88
%90 = or <4 x i32> %89, %85
%91 = or <4 x i32> %90, %87
%92 = lshr <4 x i32> %72, <i32 3, i32 3, i32 3, i32 3>
%93 = and <4 x i32> %92, <i32 31, i32 31, i32 31, i32 31>
%94 = lshr <4 x i32> %72, <i32 9, i32 9, i32 9, i32 9>
%95 = and <4 x i32> %94, <i32 992, i32 992, i32 992, i32 992>
%96 = or <4 x i32> %93, %95
%97 = lshr <4 x i32> %72, <i32 15, i32 15, i32 15, i32 15>
%98 = and <4 x i32> %97, <i32 31744, i32 31744, i32 31744, i32 31744>
%99 = or <4 x i32> %96, %98
%100 = shl <4 x i32> %75, <i32 12, i32 12, i32 12, i32 12>
%101 = and <4 x i32> %100, <i32 2031616, i32 2031616, i32 2031616, i32 2031616>
%102 = shl <4 x i32> %75, <i32 6, i32 6, i32 6, i32 6>
%103 = and <4 x i32> %102, <i32 65011712, i32 65011712, i32 65011712, i32 65011712>
%104 = and <4 x i32> %75, <i32 2080374784, i32 2080374784, i32 2080374784, i32 2080374784>
%105 = or <4 x i32> %99, %104
%106 = or <4 x i32> %105, %101
%107 = or <4 x i32> %106, %103
%108 = getelementptr inbounds i8, i8* %2, i64 %61
%109 = bitcast i8* %108 to <8 x i32>*
%110 = shufflevector <4 x i32> %91, <4 x i32> %107, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
store <8 x i32> %110, <8 x i32>* %109
%111 = bitcast i8* %63 to <8 x i32>*
%112 = load <8 x i32>, <8 x i32>* %111
%113 = shufflevector <8 x i32> %112, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
%114 = getelementptr inbounds i8, i8* %63, i64 4
%115 = bitcast i8* %114 to <8 x i32>*
%116 = load <8 x i32>, <8 x i32>* %115
%117 = shufflevector <8 x i32> %116, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
%118 = shufflevector <8 x i32> %116, <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
%119 = add <4 x i32> %113, %68
%120 = add <4 x i32> %113, %74
%121 = add <4 x i32> %120, %117
%122 = add <4 x i32> %117, %72
%123 = add <4 x i32> %117, %75
%124 = add <4 x i32> %123, %118
%125 = lshr <4 x i32> %119, <i32 4, i32 4, i32 4, i32 4>
%126 = and <4 x i32> %125, <i32 31, i32 31, i32 31, i32 31>
%127 = lshr <4 x i32> %119, <i32 10, i32 10, i32 10, i32 10>
%128 = and <4 x i32> %127, <i32 992, i32 992, i32 992, i32 992>
%129 = or <4 x i32> %126, %128
%130 = lshr <4 x i32> %119, <i32 16, i32 16, i32 16, i32 16>
%131 = and <4 x i32> %130, <i32 31744, i32 31744, i32 31744, i32 31744>
%132 = or <4 x i32> %129, %131
%133 = shl <4 x i32> %121, <i32 11, i32 11, i32 11, i32 11>
%134 = and <4 x i32> %133, <i32 2031616, i32 2031616, i32 2031616, i32 2031616>
%135 = or <4 x i32> %132, %134
%136 = shl <4 x i32> %121, <i32 5, i32 5, i32 5, i32 5>
%137 = and <4 x i32> %136, <i32 65011712, i32 65011712, i32 65011712, i32 65011712>
%138 = or <4 x i32> %135, %137
%139 = lshr <4 x i32> %121, <i32 1, i32 1, i32 1, i32 1>
%140 = and <4 x i32> %139, <i32 2080374784, i32 2080374784, i32 2080374784, i32 2080374784>
%141 = or <4 x i32> %138, %140
%142 = lshr <4 x i32> %122, <i32 4, i32 4, i32 4, i32 4>
%143 = and <4 x i32> %142, <i32 31, i32 31, i32 31, i32 31>
%144 = lshr <4 x i32> %122, <i32 10, i32 10, i32 10, i32 10>
%145 = and <4 x i32> %144, <i32 992, i32 992, i32 992, i32 992>
%146 = or <4 x i32> %143, %145
%147 = lshr <4 x i32> %122, <i32 16, i32 16, i32 16, i32 16>
%148 = and <4 x i32> %147, <i32 31744, i32 31744, i32 31744, i32 31744>
%149 = or <4 x i32> %146, %148
%150 = shl <4 x i32> %124, <i32 11, i32 11, i32 11, i32 11>
%151 = and <4 x i32> %150, <i32 2031616, i32 2031616, i32 2031616, i32 2031616>
%152 = or <4 x i32> %149, %151
%153 = shl <4 x i32> %124, <i32 5, i32 5, i32 5, i32 5>
%154 = and <4 x i32> %153, <i32 65011712, i32 65011712, i32 65011712, i32 65011712>
%155 = or <4 x i32> %152, %154
%156 = lshr <4 x i32> %124, <i32 1, i32 1, i32 1, i32 1>
%157 = and <4 x i32> %156, <i32 2080374784, i32 2080374784, i32 2080374784, i32 2080374784>
%158 = or <4 x i32> %155, %157
%159 = getelementptr inbounds i8, i8* %3, i64 %60
%160 = bitcast i8* %159 to <8 x i32>*
%161 = shufflevector <4 x i32> %141, <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* [ %226, %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, 9
%189 = and i32 %188, 992
%190 = or i32 %187, %189
%191 = lshr i32 %177, 15
%192 = and i32 %191, 31744
%193 = or i32 %190, %192
%194 = shl i32 %184, 12
%195 = and i32 %194, 2031616
%196 = shl i32 %184, 6
%197 = and i32 %196, 65011712
%198 = and i32 %184, 2080374784
%199 = or i32 %193, %198
%200 = or i32 %199, %195
%201 = or i32 %200, %197
%202 = bitcast i8* %173 to i32*
store i32 %201, i32* %202
%203 = lshr i32 %180, 3
%204 = and i32 %203, 31
%205 = lshr i32 %180, 9
%206 = and i32 %205, 992
%207 = or i32 %204, %206
%208 = lshr i32 %180, 15
%209 = and i32 %208, 31744
%210 = or i32 %207, %209
%211 = shl i32 %185, 12
%212 = and i32 %211, 2031616
%213 = shl i32 %185, 6
%214 = and i32 %213, 65011712
%215 = and i32 %185, 2080374784
%216 = or i32 %210, %215
%217 = or i32 %216, %212
%218 = or i32 %217, %214
%219 = getelementptr inbounds i8, i8* %173, i64 4
%220 = bitcast i8* %219 to i32*
store i32 %218, i32* %220
%221 = bitcast i8* %174 to i32*
%222 = load i32, i32* %221
%223 = getelementptr inbounds i8, i8* %174, i64 4
%224 = bitcast i8* %223 to i32*
%225 = load i32, i32* %224
%226 = getelementptr inbounds i8, i8* %174, i64 8
%227 = bitcast i8* %226 to i32*
%228 = load i32, i32* %227
%229 = add i32 %222, %177
%230 = add i32 %222, %184
%231 = add i32 %230, %225
%232 = add i32 %225, %180
%233 = add i32 %225, %185
%234 = add i32 %233, %228
%235 = lshr i32 %229, 4
%236 = and i32 %235, 31
%237 = lshr i32 %229, 10
%238 = and i32 %237, 992
%239 = or i32 %236, %238
%240 = lshr i32 %229, 16
%241 = and i32 %240, 31744
%242 = or i32 %239, %241
%243 = shl i32 %231, 11
%244 = and i32 %243, 2031616
%245 = or i32 %242, %244
%246 = shl i32 %231, 5
%247 = and i32 %246, 65011712
%248 = or i32 %245, %247
%249 = lshr i32 %231, 1
%250 = and i32 %249, 2080374784
%251 = or i32 %248, %250
%252 = bitcast i8* %172 to i32*
store i32 %251, i32* %252
%253 = lshr i32 %232, 4
%254 = and i32 %253, 31
%255 = lshr i32 %232, 10
%256 = and i32 %255, 992
%257 = or i32 %254, %256
%258 = lshr i32 %232, 16
%259 = and i32 %258, 31744
%260 = or i32 %257, %259
%261 = shl i32 %234, 11
%262 = and i32 %261, 2031616
%263 = or i32 %260, %262
%264 = shl i32 %234, 5
%265 = and i32 %264, 65011712
%266 = or i32 %263, %265
%267 = lshr i32 %234, 1
%268 = and i32 %267, 2080374784
%269 = or i32 %266, %268
%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 ], [ %226, %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 = shl i32 %285, 1
%288 = lshr i32 %282, 3
%289 = and i32 %288, 31
%290 = lshr i32 %282, 9
%291 = and i32 %290, 992
%292 = or i32 %289, %291
%293 = lshr i32 %282, 15
%294 = and i32 %293, 31744
%295 = or i32 %292, %294
%296 = shl i32 %286, 12
%297 = and i32 %296, 2031616
%298 = shl i32 %286, 6
%299 = and i32 %298, 65011712
%300 = and i32 %286, 2080374784
%301 = or i32 %295, %300
%302 = or i32 %301, %297
%303 = or i32 %302, %299
%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, 9
%308 = and i32 %307, 992
%309 = or i32 %306, %308
%310 = lshr i32 %285, 15
%311 = and i32 %310, 31744
%312 = or i32 %309, %311
%313 = shl i32 %285, 13
%314 = and i32 %313, 2031616
%315 = or i32 %312, %314
%316 = shl i32 %285, 7
%317 = and i32 %316, 65011712
%318 = or i32 %315, %317
%319 = and i32 %287, 2080374784
%320 = or i32 %318, %319
%321 = getelementptr inbounds i8, i8* %279, i64 4
%322 = bitcast i8* %321 to i32*
store i32 %320, i32* %322
%323 = bitcast i8* %278 to i32*
%324 = load i32, i32* %323
%325 = getelementptr inbounds i8, i8* %278, i64 4
%326 = bitcast i8* %325 to i32*
%327 = load i32, i32* %326
%328 = add i32 %324, %282
%329 = add i32 %324, %286
%330 = add i32 %329, %327
%331 = add i32 %327, %285
%332 = lshr i32 %328, 4
%333 = and i32 %332, 31
%334 = lshr i32 %328, 10
%335 = and i32 %334, 992
%336 = or i32 %333, %335
%337 = lshr i32 %328, 16
%338 = and i32 %337, 31744
%339 = or i32 %336, %338
%340 = shl i32 %330, 11
%341 = and i32 %340, 2031616
%342 = or i32 %339, %341
%343 = shl i32 %330, 5
%344 = and i32 %343, 65011712
%345 = or i32 %342, %344
%346 = lshr i32 %330, 1
%347 = and i32 %346, 2080374784
%348 = or i32 %345, %347
%349 = bitcast i8* %280 to i32*
store i32 %348, i32* %349
%350 = lshr i32 %331, 4
%351 = and i32 %350, 31
%352 = lshr i32 %331, 10
%353 = and i32 %352, 992
%354 = lshr i32 %331, 16
%355 = and i32 %354, 31744
%356 = shl i32 %331, 12
%357 = and i32 %356, 2031616
%358 = shl i32 %331, 6
%359 = and i32 %358, 65011712
%360 = and i32 %331, 2080374784
%361 = or i32 %353, %360
%362 = or i32 %361, %351
%363 = or i32 %362, %355
%364 = or i32 %363, %357
%365 = or i32 %364, %359
%366 = getelementptr inbounds i8, i8* %280, i64 4
%367 = bitcast i8* %366 to i32*
store i32 %365, i32* %367
ret void
}