void interpRGB32(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 + 0x00400801;
    y = b;
    z = b + e + 0x00400801;
    *(unsigned int *)(dst1 + 0) = ((w & 0x000000ff) >> 0) |
                                  ((w & 0x0007f800) >> 3) |
                                  ((w & 0x3fc00000) >> 6);
    *(unsigned int *)(dst1 + 4) = ((x & 0x000001fe) >> 1) |
                                  ((x & 0x000ff000) >> 4) |
                                  ((x & 0x7f800000) >> 7);
    *(unsigned int *)(dst1 + 8) = ((y & 0x000000ff) >> 0) |
                                  ((y & 0x0007f800) >> 3) |
                                  ((y & 0x3fc00000) >> 6);
    *(unsigned int *)(dst1 + 12) = ((z & 0x000001fe) >> 1) |
                                   ((z & 0x000ff000) >> 4) |
                                   ((z & 0x7f800000) >> 7);
    c = *(unsigned int *)(src2 + 0);
    d = *(unsigned int *)(src2 + 4);
    f = *(unsigned int *)(src2 + 8);
    w = a + c + 0x00400801;
    x = a + b + c + d + (0x00400801 << 1);
    y = b + d + 0x00400801;
    z = b + e + d + f + (0x00400801 << 1);
    *(unsigned int *)(dst2 + 0) = ((w & 0x000001fe) >> 1) |
                                  ((w & 0x000ff000) >> 4) |
                                  ((w & 0x7f800000) >> 7);
    *(unsigned int *)(dst2 + 4) = ((x & 0x000003fc) >> 2) |
                                  ((x & 0x001fe000) >> 5) |
                                  ((x & 0xff000000) >> 8);
    *(unsigned int *)(dst2 + 8) = ((y & 0x000001fe) >> 1) |
                                  ((y & 0x000ff000) >> 4) |
                                  ((y & 0x7f800000) >> 7);
    *(unsigned int *)(dst2 + 12) = ((z & 0x000003fc) >> 2) |
                                   ((z & 0x001fe000) >> 5) |
                                   ((z & 0xff000000) >> 8);
    src1 += 8;
    src2 += 8;
    dst1 += 16;
    dst2 += 16;
  }
  a = *(unsigned int *)(src1 + 0);
  b = *(unsigned int *)(src1 + 4);
  e = b;
  w = a;
  x = a + b + 0x00400801;
  y = b;
  z = b + e + 0x00400801;
  *(unsigned int *)(dst1 + 0) = ((w & 0x000000ff) >> 0) |
                                ((w & 0x0007f800) >> 3) |
                                ((w & 0x3fc00000) >> 6);
  *(unsigned int *)(dst1 + 4) = ((x & 0x000001fe) >> 1) |
                                ((x & 0x000ff000) >> 4) |
                                ((x & 0x7f800000) >> 7);
  *(unsigned int *)(dst1 + 8) = ((y & 0x000000ff) >> 0) |
                                ((y & 0x0007f800) >> 3) |
                                ((y & 0x3fc00000) >> 6);
  *(unsigned int *)(dst1 + 12) = ((z & 0x000001fe) >> 1) |
                                 ((z & 0x000ff000) >> 4) |
                                 ((z & 0x7f800000) >> 7);
  c = *(unsigned int *)(src2 + 0);
  d = *(unsigned int *)(src2 + 4);
  f = d;
  w = a + c + 0x00400801;
  x = a + b + c + d + (0x00400801 << 1);
  y = b + d + 0x00400801;
  z = b + e + d + f + (0x00400801 << 1);
  *(unsigned int *)(dst2 + 0) = ((w & 0x000001fe) >> 1) |
                                ((w & 0x000ff000) >> 4) |
                                ((w & 0x7f800000) >> 7);
  *(unsigned int *)(dst2 + 4) = ((x & 0x000003fc) >> 2) |
                                ((x & 0x001fe000) >> 5) |
                                ((x & 0xff000000) >> 8);
  *(unsigned int *)(dst2 + 8) = ((y & 0x000001fe) >> 1) |
                                ((y & 0x000ff000) >> 4) |
                                ((y & 0x7f800000) >> 7);
  *(unsigned int *)(dst2 + 12) = ((z & 0x000003fc) >> 2) |
                                 ((z & 0x001fe000) >> 5) |
                                 ((z & 0xff000000) >> 8);
}


x86 assembly (clang, -O0):
<interpRGB32>:
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     1374 <interpRGB32+0x274>
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
add    $0x400801,%eax
mov    %eax,-0x44(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
add    $0x400801,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x40(%rbp),%ecx
and    $0xff,%ecx
shr    $0x0,%ecx
mov    -0x40(%rbp),%eax
and    $0x7f800,%eax
shr    $0x3,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x3fc00000,%eax
shr    $0x6,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x44(%rbp),%ecx
and    $0x1fe,%ecx
shr    $0x1,%ecx
mov    -0x44(%rbp),%eax
and    $0xff000,%eax
shr    $0x4,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x7f800000,%eax
shr    $0x7,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x48(%rbp),%ecx
and    $0xff,%ecx
shr    $0x0,%ecx
mov    -0x48(%rbp),%eax
and    $0x7f800,%eax
shr    $0x3,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3fc00000,%eax
shr    $0x6,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x4c(%rbp),%ecx
and    $0x1fe,%ecx
shr    $0x1,%ecx
mov    -0x4c(%rbp),%eax
and    $0xff000,%eax
shr    $0x4,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7f800000,%eax
shr    $0x7,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0xc(%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
add    $0x400801,%eax
mov    %eax,-0x40(%rbp)
mov    -0x28(%rbp),%eax
add    -0x2c(%rbp),%eax
add    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
add    $0x801002,%eax
mov    %eax,-0x44(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x34(%rbp),%eax
add    $0x400801,%eax
mov    %eax,-0x48(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
add    -0x34(%rbp),%eax
add    -0x3c(%rbp),%eax
add    $0x801002,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x40(%rbp),%ecx
and    $0x1fe,%ecx
shr    $0x1,%ecx
mov    -0x40(%rbp),%eax
and    $0xff000,%eax
shr    $0x4,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x7f800000,%eax
shr    $0x7,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x44(%rbp),%ecx
and    $0x3fc,%ecx
shr    $0x2,%ecx
mov    -0x44(%rbp),%eax
and    $0x1fe000,%eax
shr    $0x5,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xff000000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x48(%rbp),%ecx
and    $0x1fe,%ecx
shr    $0x1,%ecx
mov    -0x48(%rbp),%eax
and    $0xff000,%eax
shr    $0x4,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7f800000,%eax
shr    $0x7,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x4c(%rbp),%ecx
and    $0x3fc,%ecx
shr    $0x2,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1fe000,%eax
shr    $0x5,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xff000000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0xc(%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    $0x10,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x20(%rbp)
jmp    1121 <interpRGB32+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
add    $0x400801,%eax
mov    %eax,-0x44(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
add    $0x400801,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x40(%rbp),%ecx
and    $0xff,%ecx
shr    $0x0,%ecx
mov    -0x40(%rbp),%eax
and    $0x7f800,%eax
shr    $0x3,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x3fc00000,%eax
shr    $0x6,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x44(%rbp),%ecx
and    $0x1fe,%ecx
shr    $0x1,%ecx
mov    -0x44(%rbp),%eax
and    $0xff000,%eax
shr    $0x4,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0x7f800000,%eax
shr    $0x7,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x48(%rbp),%ecx
and    $0xff,%ecx
shr    $0x0,%ecx
mov    -0x48(%rbp),%eax
and    $0x7f800,%eax
shr    $0x3,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x3fc00000,%eax
shr    $0x6,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x4c(%rbp),%ecx
and    $0x1fe,%ecx
shr    $0x1,%ecx
mov    -0x4c(%rbp),%eax
and    $0xff000,%eax
shr    $0x4,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0x7f800000,%eax
shr    $0x7,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0xc(%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
add    $0x400801,%eax
mov    %eax,-0x40(%rbp)
mov    -0x28(%rbp),%eax
add    -0x2c(%rbp),%eax
add    -0x30(%rbp),%eax
add    -0x34(%rbp),%eax
add    $0x801002,%eax
mov    %eax,-0x44(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x34(%rbp),%eax
add    $0x400801,%eax
mov    %eax,-0x48(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
add    -0x34(%rbp),%eax
add    -0x3c(%rbp),%eax
add    $0x801002,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x40(%rbp),%ecx
and    $0x1fe,%ecx
shr    $0x1,%ecx
mov    -0x40(%rbp),%eax
and    $0xff000,%eax
shr    $0x4,%eax
or     %eax,%ecx
mov    -0x40(%rbp),%eax
and    $0x7f800000,%eax
shr    $0x7,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x44(%rbp),%ecx
and    $0x3fc,%ecx
shr    $0x2,%ecx
mov    -0x44(%rbp),%eax
and    $0x1fe000,%eax
shr    $0x5,%eax
or     %eax,%ecx
mov    -0x44(%rbp),%eax
and    $0xff000000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x48(%rbp),%ecx
and    $0x1fe,%ecx
shr    $0x1,%ecx
mov    -0x48(%rbp),%eax
and    $0xff000,%eax
shr    $0x4,%eax
or     %eax,%ecx
mov    -0x48(%rbp),%eax
and    $0x7f800000,%eax
shr    $0x7,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x4c(%rbp),%ecx
and    $0x3fc,%ecx
shr    $0x2,%ecx
mov    -0x4c(%rbp),%eax
and    $0x1fe000,%eax
shr    $0x5,%eax
or     %eax,%ecx
mov    -0x4c(%rbp),%eax
and    $0xff000000,%eax
shr    $0x8,%eax
or     %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0xc(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<interpRGB32>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sar    %r8d
mov    %r8d,%eax
add    $0xffffffff,%eax
je     169d <interpRGB32+0x59d>
add    $0xfffffffe,%r8d
cmp    $0x4,%r8d
jb     14e1 <interpRGB32+0x3e1>
mov    %eax,-0xc(%rsp)
mov    %r8,%rax
shl    $0x4,%rax
lea    (%rcx,%rax,1),%rbp
add    $0x10,%rbp
cmp    %rdx,%rbp
seta   -0x8(%rsp)
add    %rdx,%rax
add    $0x10,%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,-0x8(%rsp)
jne    14dd <interpRGB32+0x3dd>
and    %r11b,%r13b
jne    14dd <interpRGB32+0x3dd>
and    %r14b,%r12b
jne    14dd <interpRGB32+0x3dd>
and    %al,%r9b
jne    14dd <interpRGB32+0x3dd>
and    %bpl,%r10b
jne    14dd <interpRGB32+0x3dd>
add    $0x1,%r8
mov    %r8d,%eax
and    $0x3,%eax
test   %rax,%rax
mov    $0x4,%ebp
cmovne %rax,%rbp
sub    %rbp,%r8
mov    -0xc(%rsp),%eax
sub    %r8d,%eax
mov    %r8,%r9
shl    $0x4,%r9
lea    (%rcx,%r9,1),%r10
add    %rdx,%r9
lea    (%rsi,%r8,8),%r11
lea    (%rdi,%r8,8),%r14
xor    %ebx,%ebx
movdqa 0xdf9(%rip),%xmm9
movdqa 0xe00(%rip),%xmm10
movdqa 0xe07(%rip),%xmm11
movdqa 0xe0e(%rip),%xmm12
movdqa 0xe15(%rip),%xmm8
nopl   0x0(%rax,%rax,1)
movups (%rdi,%rbx,1),%xmm5
movups 0x4(%rdi,%rbx,1),%xmm14
movups 0x10(%rdi,%rbx,1),%xmm0
shufps $0x88,%xmm0,%xmm5
movups 0x14(%rdi,%rbx,1),%xmm0
movaps %xmm14,%xmm2
shufps $0x88,%xmm0,%xmm2
shufps $0xdd,%xmm0,%xmm14
movaps %xmm2,%xmm13
paddd  %xmm5,%xmm13
movdqa %xmm13,%xmm3
paddd  %xmm9,%xmm3
paddd  %xmm2,%xmm14
movdqa %xmm14,%xmm7
paddd  %xmm9,%xmm7
movdqa %xmm5,%xmm1
pand   %xmm10,%xmm1
movdqa %xmm5,%xmm6
psrld  $0x3,%xmm6
pand   %xmm11,%xmm6
por    %xmm1,%xmm6
movdqa %xmm5,%xmm1
psrld  $0x6,%xmm1
pand   %xmm12,%xmm1
por    %xmm6,%xmm1
movdqa %xmm3,%xmm6
psrld  $0x1,%xmm6
pand   %xmm10,%xmm6
movdqa %xmm3,%xmm0
psrld  $0x4,%xmm0
pand   %xmm11,%xmm0
por    %xmm6,%xmm0
psrld  $0x7,%xmm3
pand   %xmm12,%xmm3
por    %xmm0,%xmm3
movdqa %xmm2,%xmm0
pand   %xmm10,%xmm0
movdqa %xmm2,%xmm4
psrld  $0x3,%xmm4
pand   %xmm11,%xmm4
por    %xmm0,%xmm4
movdqa %xmm2,%xmm6
psrld  $0x6,%xmm6
pand   %xmm12,%xmm6
por    %xmm4,%xmm6
movdqa %xmm7,%xmm0
psrld  $0x1,%xmm0
pand   %xmm10,%xmm0
movdqa %xmm7,%xmm4
psrld  $0x4,%xmm4
pand   %xmm11,%xmm4
por    %xmm0,%xmm4
psrld  $0x7,%xmm7
pand   %xmm12,%xmm7
por    %xmm4,%xmm7
movdqa %xmm6,%xmm0
punpckhdq %xmm7,%xmm0
movdqa %xmm1,%xmm4
punpckhdq %xmm3,%xmm4
movdqa %xmm4,%xmm15
punpcklqdq %xmm0,%xmm15
punpckldq %xmm7,%xmm6
punpckldq %xmm3,%xmm1
movdqa %xmm1,%xmm3
punpckhqdq %xmm6,%xmm3
punpcklqdq %xmm6,%xmm1
punpckhqdq %xmm0,%xmm4
movdqu %xmm4,0x30(%rdx,%rbx,2)
movdqu %xmm1,(%rdx,%rbx,2)
movdqu %xmm3,0x10(%rdx,%rbx,2)
movdqu %xmm15,0x20(%rdx,%rbx,2)
movups (%rsi,%rbx,1),%xmm0
movups 0x4(%rsi,%rbx,1),%xmm1
movups 0x10(%rsi,%rbx,1),%xmm3
shufps $0x88,%xmm3,%xmm0
movups 0x14(%rsi,%rbx,1),%xmm3
movaps %xmm1,%xmm4
shufps $0x88,%xmm3,%xmm4
shufps $0xdd,%xmm3,%xmm1
paddd  %xmm0,%xmm5
paddd  %xmm9,%xmm5
paddd  %xmm4,%xmm2
paddd  %xmm8,%xmm4
paddd  %xmm13,%xmm0
paddd  %xmm4,%xmm0
paddd  %xmm9,%xmm2
paddd  %xmm14,%xmm1
paddd  %xmm4,%xmm1
movdqa %xmm5,%xmm3
psrld  $0x1,%xmm3
pand   %xmm10,%xmm3
movdqa %xmm5,%xmm4
psrld  $0x4,%xmm4
pand   %xmm11,%xmm4
por    %xmm3,%xmm4
psrld  $0x7,%xmm5
pand   %xmm12,%xmm5
por    %xmm4,%xmm5
movdqa %xmm0,%xmm3
psrld  $0x2,%xmm3
pand   %xmm10,%xmm3
movdqa %xmm0,%xmm4
psrld  $0x5,%xmm4
pand   %xmm11,%xmm4
por    %xmm3,%xmm4
psrld  $0x8,%xmm0
pand   %xmm12,%xmm0
por    %xmm4,%xmm0
movdqa %xmm2,%xmm3
psrld  $0x1,%xmm3
pand   %xmm10,%xmm3
movdqa %xmm2,%xmm4
psrld  $0x4,%xmm4
pand   %xmm11,%xmm4
por    %xmm3,%xmm4
psrld  $0x7,%xmm2
pand   %xmm12,%xmm2
por    %xmm4,%xmm2
movdqa %xmm1,%xmm3
psrld  $0x2,%xmm3
pand   %xmm10,%xmm3
movdqa %xmm1,%xmm4
psrld  $0x5,%xmm4
pand   %xmm11,%xmm4
por    %xmm3,%xmm4
psrld  $0x8,%xmm1
pand   %xmm12,%xmm1
por    %xmm4,%xmm1
movdqa %xmm2,%xmm3
punpckldq %xmm1,%xmm3
movdqa %xmm5,%xmm4
punpckldq %xmm0,%xmm4
movdqa %xmm4,%xmm6
punpckhqdq %xmm3,%xmm6
punpcklqdq %xmm3,%xmm4
punpckhdq %xmm1,%xmm2
punpckhdq %xmm0,%xmm5
movdqa %xmm5,%xmm0
punpckhqdq %xmm2,%xmm0
punpcklqdq %xmm2,%xmm5
movdqu %xmm5,0x20(%rcx,%rbx,2)
movdqu %xmm0,0x30(%rcx,%rbx,2)
movdqu %xmm4,(%rcx,%rbx,2)
movdqu %xmm6,0x10(%rcx,%rbx,2)
add    $0x20,%rbx
add    $0xfffffffffffffffc,%r8
jne    1230 <interpRGB32+0x130>
mov    %r10,%rcx
mov    %r9,%rdx
mov    %r11,%rsi
mov    %r14,%rdi
jmp    14e1 <interpRGB32+0x3e1>
mov    -0xc(%rsp),%eax
mov    %eax,%eax
mov    %rax,-0x8(%rsp)
xor    %r9d,%r9d
xor    %r10d,%r10d
xchg   %ax,%ax
mov    (%rdi,%r10,8),%r15d
mov    0x4(%rdi,%r10,8),%r13d
mov    0x8(%rdi,%r10,8),%r14d
lea    (%r15,%r13,1),%r11d
lea    (%r15,%r13,1),%ebx
add    $0x400801,%ebx
lea    (%r14,%r13,1),%r8d
add    $0x400801,%r8d
add    %r13d,%r14d
movzbl %r15b,%r12d
mov    %r15d,%eax
shr    $0x3,%eax
and    $0xff00,%eax
or     %r12d,%eax
mov    %r15d,%ebp
shr    $0x6,%ebp
and    $0xff0000,%ebp
or     %eax,%ebp
mov    %ebp,(%rdx)
mov    %ebx,%eax
shr    %eax
movzbl %al,%eax
mov    %ebx,%ebp
shr    $0x4,%ebp
and    $0xff00,%ebp
or     %eax,%ebp
shr    $0x7,%ebx
and    $0xff0000,%ebx
or     %ebp,%ebx
mov    %ebx,0x4(%rdx)
movzbl %r13b,%eax
mov    %r13d,%ebx
shr    $0x3,%ebx
and    $0xff00,%ebx
or     %eax,%ebx
mov    %r13d,%eax
shr    $0x6,%eax
and    $0xff0000,%eax
or     %ebx,%eax
mov    %eax,0x8(%rdx)
mov    %r8d,%eax
shr    %eax
movzbl %al,%eax
mov    %r8d,%ebx
shr    $0x4,%ebx
and    $0xff00,%ebx
or     %eax,%ebx
shr    $0x7,%r8d
and    $0xff0000,%r8d
or     %ebx,%r8d
mov    %r8d,0xc(%rdx)
mov    (%rsi,%r10,8),%r8d
mov    0x4(%rsi,%r10,8),%ebp
lea    (%r15,%r8,1),%ebx
add    $0x400801,%ebx
lea    (%r11,%rbp,1),%r15d
add    $0x801002,%r15d
add    %r8d,%r15d
lea    0x400801(%r13,%rbp,1),%r8d
lea    (%r14,%rbp,1),%r11d
add    $0x801002,%r11d
add    0x8(%rsi,%r10,8),%r11d
mov    %ebx,%ebp
shr    %ebp
movzbl %bpl,%ebp
mov    %ebx,%eax
shr    $0x4,%eax
and    $0xff00,%eax
or     %ebp,%eax
shr    $0x7,%ebx
and    $0xff0000,%ebx
or     %eax,%ebx
mov    %ebx,(%rcx)
mov    %r15d,%eax
shr    $0x2,%eax
movzbl %al,%eax
mov    %r15d,%ebx
shr    $0x5,%ebx
and    $0xff00,%ebx
or     %eax,%ebx
shr    $0x8,%r15d
and    $0xff0000,%r15d
or     %ebx,%r15d
mov    %r15d,0x4(%rcx)
mov    %r8d,%eax
shr    %eax
movzbl %al,%eax
mov    %r8d,%ebx
shr    $0x4,%ebx
and    $0xff00,%ebx
or     %eax,%ebx
shr    $0x7,%r8d
and    $0xff0000,%r8d
or     %ebx,%r8d
mov    %r8d,0x8(%rcx)
mov    %r11d,%eax
shr    $0x2,%eax
movzbl %al,%eax
mov    %r11d,%ebp
shr    $0x5,%ebp
and    $0xff00,%ebp
or     %eax,%ebp
shr    $0x8,%r11d
and    $0xff0000,%r11d
or     %ebp,%r11d
mov    %r11d,0xc(%rcx)
add    $0x10,%rdx
add    $0x10,%rcx
add    $0x1,%r10
add    $0xfffffffffffffff8,%r9
cmp    %r10d,-0x8(%rsp)
jne    14f0 <interpRGB32+0x3f0>
sub    %r9,%rsi
sub    %r9,%rdi
mov    (%rdi),%r10d
mov    0x4(%rdi),%r11d
lea    (%r11,%r10,1),%r8d
lea    (%r11,%r10,1),%ebp
add    $0x400801,%ebp
lea    (%r11,%r11,1),%r14d
add    $0x400801,%r14d
movzbl %r10b,%r9d
mov    %r10d,%ebx
shr    $0x3,%ebx
and    $0xff00,%ebx
or     %r9d,%ebx
mov    %r10d,%eax
shr    $0x6,%eax
and    $0xff0000,%eax
or     %ebx,%eax
mov    %eax,(%rdx)
mov    %ebp,%eax
shr    %eax
movzbl %al,%eax
mov    %ebp,%edi
shr    $0x4,%edi
and    $0xff00,%edi
or     %eax,%edi
shr    $0x7,%ebp
and    $0xff0000,%ebp
or     %edi,%ebp
mov    %ebp,0x4(%rdx)
movzbl %r11b,%eax
mov    %r11d,%edi
shr    $0x3,%edi
and    $0xff00,%edi
or     %eax,%edi
mov    %r11d,%eax
shr    $0x6,%eax
and    $0xff0000,%eax
or     %edi,%eax
mov    %eax,0x8(%rdx)
mov    %r14d,%eax
shr    %eax
movzbl %al,%eax
mov    %r14d,%edi
shr    $0x4,%edi
and    $0xff00,%edi
or     %eax,%edi
shr    $0x7,%r14d
and    $0xff0000,%r14d
or     %edi,%r14d
mov    %r14d,0xc(%rdx)
mov    (%rsi),%eax
mov    0x4(%rsi),%edi
lea    (%r10,%rax,1),%ebx
add    $0x400801,%ebx
add    %eax,%r8d
lea    (%rdi,%r8,1),%eax
add    $0x801002,%eax
lea    (%rdi,%r11,1),%edx
add    $0x400801,%edx
add    %r11d,%edi
lea    (%rdi,%rdi,1),%r8d
add    $0x801002,%r8d
mov    %ebx,%edi
shr    %edi
movzbl %dil,%edi
mov    %ebx,%ebp
shr    $0x4,%ebp
and    $0xff00,%ebp
or     %edi,%ebp
shr    $0x7,%ebx
and    $0xff0000,%ebx
or     %ebp,%ebx
mov    %ebx,(%rcx)
mov    %eax,%edi
shr    $0x2,%edi
movzbl %dil,%edi
mov    %eax,%esi
shr    $0x5,%esi
and    $0xff00,%esi
or     %edi,%esi
shr    $0x8,%eax
and    $0xff0000,%eax
or     %esi,%eax
mov    %eax,0x4(%rcx)
mov    %edx,%eax
shr    %eax
movzbl %al,%eax
mov    %edx,%esi
shr    $0x4,%esi
and    $0xff00,%esi
or     %eax,%esi
shr    $0x7,%edx
and    $0xff0000,%edx
or     %esi,%edx
mov    %edx,0x8(%rcx)
mov    %r8d,%eax
shr    $0x2,%eax
movzbl %al,%eax
mov    %r8d,%edx
shr    $0x5,%edx
and    $0xff00,%edx
or     %eax,%edx
shr    $0x8,%r8d
and    $0xff0000,%r8d
or     %edx,%r8d
mov    %r8d,0xc(%rcx)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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