int dist2(blk1, blk2, lx, hx, hy, h)
unsigned char *blk1, *blk2;
int lx, hx, hy, h;
{
  unsigned char *p1, *p1a, *p2;
  int i, j;
  int s, v;
  s = 0;
  p1 = blk1;
  p2 = blk2;
  if (!hx && !hy)
    for (j = 0; j < h; j++) {
      for (i = 0; i < 16; i++) {
        v = p1[i] - p2[i];
        s += v * v;
      }
      p1 += lx;
      p2 += lx;
    }
  else if (hx && !hy)
    for (j = 0; j < h; j++) {
      for (i = 0; i < 16; i++) {
        v = ((unsigned int)(p1[i] + p1[i + 1] + 1) >> 1) - p2[i];
        s += v * v;
      }
      p1 += lx;
      p2 += lx;
    }
  else if (!hx && hy) {
    p1a = p1 + lx;
    for (j = 0; j < h; j++) {
      for (i = 0; i < 16; i++) {
        v = ((unsigned int)(p1[i] + p1a[i] + 1) >> 1) - p2[i];
        s += v * v;
      }
      p1 = p1a;
      p1a += lx;
      p2 += lx;
    }
  } else {
    p1a = p1 + lx;
    for (j = 0; j < h; j++) {
      for (i = 0; i < 16; i++) {
        v = ((unsigned int)(p1[i] + p1[i + 1] + p1a[i] + p1a[i + 1] + 2) >> 2) -
            p2[i];
        s += v * v;
      }
      p1 = p1a;
      p1a += lx;
      p2 += lx;
    }
  }
  return s;
}


x86 assembly (clang, -O0):
<dist2>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9d,-0x20(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x18(%rbp)
jne    11d6 <dist2+0xd6>
cmpl   $0x0,-0x1c(%rbp)
jne    11d6 <dist2+0xd6>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    11d1 <dist2+0xd1>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    11a1 <dist2+0xa1>
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x38(%rbp),%rcx
movslq -0x3c(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
imul   -0x48(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    115f <dist2+0x5f>
mov    -0x14(%rbp),%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    114c <dist2+0x4c>
jmp    1450 <dist2+0x350>
cmpl   $0x0,-0x18(%rbp)
je     1294 <dist2+0x194>
cmpl   $0x0,-0x1c(%rbp)
jne    1294 <dist2+0x194>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    128f <dist2+0x18f>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    125f <dist2+0x15f>
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x28(%rbp),%rcx
mov    -0x3c(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    -0x38(%rbp),%rcx
movslq -0x3c(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
imul   -0x48(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1204 <dist2+0x104>
mov    -0x14(%rbp),%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    11f1 <dist2+0xf1>
jmp    144b <dist2+0x34b>
cmpl   $0x0,-0x18(%rbp)
jne    1364 <dist2+0x264>
cmpl   $0x0,-0x1c(%rbp)
je     1364 <dist2+0x264>
mov    -0x28(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    135f <dist2+0x25f>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    1327 <dist2+0x227>
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x30(%rbp),%rcx
movslq -0x3c(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    -0x38(%rbp),%rcx
movslq -0x3c(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
imul   -0x48(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    12d1 <dist2+0x1d1>
mov    -0x30(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    12be <dist2+0x1be>
jmp    1446 <dist2+0x346>
mov    -0x28(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1441 <dist2+0x341>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    1409 <dist2+0x309>
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x28(%rbp),%rcx
mov    -0x3c(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x30(%rbp),%rcx
movslq -0x3c(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x30(%rbp),%rcx
mov    -0x3c(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
shr    $0x2,%eax
mov    -0x38(%rbp),%rcx
movslq -0x3c(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
imul   -0x48(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    138d <dist2+0x28d>
mov    -0x30(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    137a <dist2+0x27a>
jmp    1446 <dist2+0x346>
jmp    144b <dist2+0x34b>
jmp    1450 <dist2+0x350>
mov    -0x44(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<dist2>:
mov    %r8d,%eax
or     %ecx,%eax
je     134e <dist2+0x24e>
test   %ecx,%ecx
je     1410 <dist2+0x310>
test   %r8d,%r8d
jne    1410 <dist2+0x310>
test   %r9d,%r9d
jle    195c <dist2+0x85c>
movslq %edx,%r8
xor    %edx,%edx
movaps 0xece(%rip),%xmm8
pxor   %xmm13,%xmm13
pcmpeqd %xmm9,%xmm9
xor    %eax,%eax
xchg   %ax,%ax
movzbl (%rdi,%rdx,1),%ecx
movd   %ecx,%xmm0
pslld  $0x18,%xmm0
movss  0x1(%rdi,%rdx,1),%xmm10
xorps  %xmm12,%xmm12
movss  %xmm0,%xmm12
movaps %xmm10,%xmm14
movaps %xmm10,%xmm3
movss  0x5(%rdi,%rdx,1),%xmm11
movaps %xmm11,%xmm15
movaps %xmm11,%xmm7
movss  0x9(%rdi,%rdx,1),%xmm1
movaps %xmm1,%xmm2
movaps %xmm1,%xmm4
movss  0xd(%rdi,%rdx,1),%xmm5
movaps %xmm5,%xmm6
andps  %xmm8,%xmm6
orps   %xmm1,%xmm6
andps  %xmm8,%xmm1
orps   %xmm11,%xmm1
andps  %xmm8,%xmm11
orps   %xmm10,%xmm11
andps  %xmm8,%xmm10
orps   %xmm10,%xmm12
psrld  $0x18,%xmm12
pslld  $0x8,%xmm14
por    %xmm12,%xmm14
punpcklbw %xmm13,%xmm14
punpcklwd %xmm13,%xmm14
punpcklbw %xmm13,%xmm3
punpcklwd %xmm13,%xmm3
paddd  %xmm14,%xmm3
psubd  %xmm9,%xmm3
psrld  $0x1,%xmm3
movd   (%rsi,%rdx,1),%xmm0
punpcklbw %xmm13,%xmm0
punpcklwd %xmm13,%xmm0
psubd  %xmm0,%xmm3
packssdw %xmm3,%xmm3
movdqa %xmm3,%xmm0
pmulhw %xmm3,%xmm0
pmullw %xmm3,%xmm3
punpcklwd %xmm0,%xmm3
psrld  $0x18,%xmm11
pslld  $0x8,%xmm15
por    %xmm11,%xmm15
punpcklbw %xmm13,%xmm15
punpcklwd %xmm13,%xmm15
punpcklbw %xmm13,%xmm7
punpcklwd %xmm13,%xmm7
paddd  %xmm15,%xmm7
psubd  %xmm9,%xmm7
psrld  $0x1,%xmm7
movd   0x4(%rsi,%rdx,1),%xmm0
punpcklbw %xmm13,%xmm0
punpcklwd %xmm13,%xmm0
psubd  %xmm0,%xmm7
packssdw %xmm7,%xmm7
movdqa %xmm7,%xmm0
pmulhw %xmm7,%xmm0
pmullw %xmm7,%xmm7
punpcklwd %xmm0,%xmm7
movd   %eax,%xmm0
paddd  %xmm0,%xmm7
paddd  %xmm3,%xmm7
psrld  $0x18,%xmm1
pslld  $0x8,%xmm2
por    %xmm1,%xmm2
punpcklbw %xmm13,%xmm2
punpcklwd %xmm13,%xmm2
punpcklbw %xmm13,%xmm4
punpcklwd %xmm13,%xmm4
paddd  %xmm2,%xmm4
psubd  %xmm9,%xmm4
psrld  $0x1,%xmm4
movd   0x8(%rsi,%rdx,1),%xmm0
punpcklbw %xmm13,%xmm0
punpcklwd %xmm13,%xmm0
psubd  %xmm0,%xmm4
packssdw %xmm4,%xmm4
movdqa %xmm4,%xmm0
pmulhw %xmm4,%xmm0
pmullw %xmm4,%xmm4
punpcklwd %xmm0,%xmm4
psrld  $0x18,%xmm6
movaps %xmm5,%xmm0
pslld  $0x8,%xmm0
por    %xmm6,%xmm0
punpcklbw %xmm13,%xmm0
punpcklwd %xmm13,%xmm0
punpcklbw %xmm13,%xmm5
punpcklwd %xmm13,%xmm5
paddd  %xmm0,%xmm5
psubd  %xmm9,%xmm5
psrld  $0x1,%xmm5
movd   0xc(%rsi,%rdx,1),%xmm0
punpcklbw %xmm13,%xmm0
punpcklwd %xmm13,%xmm0
psubd  %xmm0,%xmm5
packssdw %xmm5,%xmm5
movdqa %xmm5,%xmm0
pmulhw %xmm5,%xmm0
pmullw %xmm5,%xmm5
punpcklwd %xmm0,%xmm5
paddd  %xmm4,%xmm5
paddd  %xmm7,%xmm5
pshufd $0xee,%xmm5,%xmm0
paddd  %xmm5,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
add    %r8,%rdx
add    $0xffffffff,%r9d
jne    1140 <dist2+0x40>
jmp    195b <dist2+0x85b>
test   %r9d,%r9d
jle    195c <dist2+0x85c>
movslq %edx,%r8
xor    %edx,%edx
pxor   %xmm0,%xmm0
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqu (%rdi,%rdx,1),%xmm2
movdqa %xmm2,%xmm4
punpckhbw %xmm0,%xmm4
movdqa %xmm4,%xmm1
punpcklwd %xmm0,%xmm1
punpckhwd %xmm0,%xmm4
punpcklbw %xmm0,%xmm2
movdqa %xmm2,%xmm3
punpcklwd %xmm0,%xmm3
punpckhwd %xmm0,%xmm2
movdqu (%rsi,%rdx,1),%xmm5
movdqa %xmm5,%xmm6
punpckhbw %xmm0,%xmm6
movdqa %xmm6,%xmm7
punpcklwd %xmm0,%xmm7
psubd  %xmm7,%xmm1
punpckhwd %xmm0,%xmm6
psubd  %xmm6,%xmm4
packssdw %xmm4,%xmm1
punpcklbw %xmm0,%xmm5
movdqa %xmm5,%xmm4
punpcklwd %xmm0,%xmm4
psubd  %xmm4,%xmm3
punpckhwd %xmm0,%xmm5
psubd  %xmm5,%xmm2
packssdw %xmm2,%xmm3
pmaddwd %xmm1,%xmm1
pmaddwd %xmm3,%xmm3
paddd  %xmm1,%xmm3
pshufd $0xee,%xmm3,%xmm1
paddd  %xmm3,%xmm1
pshufd $0x55,%xmm1,%xmm2
paddd  %xmm1,%xmm2
movd   %xmm2,%ecx
add    %ecx,%eax
add    %r8,%rdx
add    $0xffffffff,%r9d
jne    1370 <dist2+0x270>
jmp    195b <dist2+0x85b>
movslq %edx,%r10
test   %ecx,%ecx
jne    15b5 <dist2+0x4b5>
test   %r8d,%r8d
je     15b5 <dist2+0x4b5>
test   %r9d,%r9d
jle    195c <dist2+0x85c>
lea    (%rdi,%r10,1),%rcx
xor    %eax,%eax
mov    $0xc,%edx
pxor   %xmm0,%xmm0
pcmpeqd %xmm1,%xmm1
movd   %eax,%xmm3
movd   -0xc(%rdi,%rdx,1),%xmm4
punpcklbw %xmm0,%xmm4
punpcklwd %xmm0,%xmm4
movd   -0xc(%rcx,%rdx,1),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
paddd  %xmm4,%xmm2
psubd  %xmm1,%xmm2
psrld  $0x1,%xmm2
movd   -0xc(%rsi,%rdx,1),%xmm4
punpcklbw %xmm0,%xmm4
punpcklwd %xmm0,%xmm4
psubd  %xmm4,%xmm2
packssdw %xmm2,%xmm2
movdqa %xmm2,%xmm4
pmulhw %xmm2,%xmm4
pmullw %xmm2,%xmm2
punpcklwd %xmm4,%xmm2
paddd  %xmm3,%xmm2
movd   -0x8(%rdi,%rdx,1),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
movd   -0x8(%rcx,%rdx,1),%xmm4
punpcklbw %xmm0,%xmm4
punpcklwd %xmm0,%xmm4
paddd  %xmm3,%xmm4
psubd  %xmm1,%xmm4
psrld  $0x1,%xmm4
movd   -0x8(%rsi,%rdx,1),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
psubd  %xmm3,%xmm4
packssdw %xmm4,%xmm4
movdqa %xmm4,%xmm3
pmulhw %xmm4,%xmm3
pmullw %xmm4,%xmm4
punpcklwd %xmm3,%xmm4
movd   -0x4(%rdi,%rdx,1),%xmm5
punpcklbw %xmm0,%xmm5
punpcklwd %xmm0,%xmm5
movd   -0x4(%rcx,%rdx,1),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm5,%xmm3
psubd  %xmm1,%xmm3
psrld  $0x1,%xmm3
movd   -0x4(%rsi,%rdx,1),%xmm5
punpcklbw %xmm0,%xmm5
punpcklwd %xmm0,%xmm5
psubd  %xmm5,%xmm3
packssdw %xmm3,%xmm3
movdqa %xmm3,%xmm5
pmulhw %xmm3,%xmm5
pmullw %xmm3,%xmm3
punpcklwd %xmm5,%xmm3
paddd  %xmm4,%xmm3
paddd  %xmm2,%xmm3
movd   (%rdi,%rdx,1),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   (%rcx,%rdx,1),%xmm4
punpcklbw %xmm0,%xmm4
punpcklwd %xmm0,%xmm4
paddd  %xmm2,%xmm4
psubd  %xmm1,%xmm4
psrld  $0x1,%xmm4
movd   (%rsi,%rdx,1),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
psubd  %xmm2,%xmm4
packssdw %xmm4,%xmm4
movdqa %xmm4,%xmm2
pmulhw %xmm4,%xmm2
pmullw %xmm4,%xmm4
punpcklwd %xmm2,%xmm4
paddd  %xmm3,%xmm4
pshufd $0xee,%xmm4,%xmm2
paddd  %xmm4,%xmm2
pshufd $0x55,%xmm2,%xmm3
paddd  %xmm2,%xmm3
movd   %xmm3,%eax
add    %r10,%rdx
add    $0xffffffff,%r9d
jne    1440 <dist2+0x340>
jmp    195b <dist2+0x85b>
test   %r9d,%r9d
jle    195c <dist2+0x85c>
mov    (%rdi),%cl
lea    (%rdi,%r10,1),%r11
xor    %edx,%edx
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movzbl %cl,%ecx
movd   %ecx,%xmm3
movzbl (%r11,%rdx,1),%r8d
pslld  $0x18,%xmm3
movd   %r8d,%xmm5
pslld  $0x18,%xmm5
movss  0x1(%rdi,%rdx,1),%xmm0
movaps %xmm0,%xmm2
movaps %xmm0,%xmm15
movss  0x5(%rdi,%rdx,1),%xmm7
movaps %xmm7,-0x38(%rsp)
movaps %xmm7,-0x18(%rsp)
movss  0x9(%rdi,%rdx,1),%xmm14
movaps %xmm14,%xmm11
movaps %xmm14,%xmm4
movaps 0x9e1(%rip),%xmm10
andps  %xmm10,%xmm4
orps   %xmm7,%xmm4
movaps %xmm4,-0x28(%rsp)
movaps %xmm7,%xmm13
andps  %xmm10,%xmm13
orps   %xmm0,%xmm13
andps  %xmm10,%xmm0
xorps  %xmm1,%xmm1
movss  %xmm3,%xmm1
orps   %xmm0,%xmm1
psrld  $0x18,%xmm1
pslld  $0x8,%xmm2
por    %xmm1,%xmm2
xorps  %xmm7,%xmm7
punpcklbw %xmm7,%xmm2
punpcklwd %xmm7,%xmm2
punpcklbw %xmm7,%xmm15
punpcklwd %xmm7,%xmm15
paddd  %xmm2,%xmm15
movss  0x1(%r11,%rdx,1),%xmm8
pxor   %xmm1,%xmm1
movss  %xmm5,%xmm1
movaps %xmm8,%xmm9
movaps %xmm8,%xmm2
movss  0x5(%r11,%rdx,1),%xmm5
movaps %xmm5,%xmm3
movaps %xmm5,%xmm0
movss  0x9(%r11,%rdx,1),%xmm6
movaps %xmm6,%xmm12
movaps %xmm6,-0x48(%rsp)
andps  %xmm10,%xmm12
orps   %xmm5,%xmm12
movaps %xmm5,%xmm4
andps  %xmm10,%xmm4
orps   %xmm8,%xmm4
andps  %xmm10,%xmm8
orps   %xmm8,%xmm1
psrld  $0x18,%xmm1
pslld  $0x8,%xmm9
por    %xmm1,%xmm9
movss  0xd(%rdi,%rdx,1),%xmm8
movaps %xmm8,%xmm5
andps  %xmm10,%xmm5
orps   %xmm14,%xmm5
punpcklbw %xmm7,%xmm9
punpcklwd %xmm7,%xmm9
paddd  %xmm15,%xmm9
movaps %xmm6,%xmm10
punpcklbw %xmm7,%xmm2
punpcklwd %xmm7,%xmm2
movdqa 0x90e(%rip),%xmm6
paddd  %xmm6,%xmm2
paddd  %xmm9,%xmm2
psrld  $0x2,%xmm2
movd   (%rsi,%rdx,1),%xmm6
punpcklbw %xmm7,%xmm6
punpcklwd %xmm7,%xmm6
psubd  %xmm6,%xmm2
pshufd $0xf5,%xmm2,%xmm6
pmuludq %xmm2,%xmm2
pshufd $0xe8,%xmm2,%xmm9
pmuludq %xmm6,%xmm6
pshufd $0xe8,%xmm6,%xmm2
punpckldq %xmm2,%xmm9
movd   %eax,%xmm2
paddd  %xmm2,%xmm9
psrld  $0x18,%xmm13
movdqa -0x38(%rsp),%xmm15
pslld  $0x8,%xmm15
por    %xmm13,%xmm15
movdqa %xmm15,%xmm13
movd   0xd(%r11,%rdx,1),%xmm2
movdqa %xmm2,%xmm1
pand   0x889(%rip),%xmm1
movdqa -0x48(%rsp),%xmm6
por    %xmm6,%xmm1
punpcklbw %xmm7,%xmm13
punpcklwd %xmm7,%xmm13
movdqa -0x18(%rsp),%xmm15
punpcklbw %xmm7,%xmm15
punpcklwd %xmm7,%xmm15
paddd  %xmm13,%xmm15
psrld  $0x18,%xmm4
pslld  $0x8,%xmm3
por    %xmm4,%xmm3
punpcklbw %xmm7,%xmm3
punpcklwd %xmm7,%xmm3
punpcklbw %xmm7,%xmm0
punpcklwd %xmm7,%xmm0
paddd  %xmm3,%xmm0
paddd  %xmm15,%xmm0
movdqa 0x840(%rip),%xmm4
paddd  %xmm4,%xmm0
psrld  $0x2,%xmm0
movd   0x4(%rsi,%rdx,1),%xmm3
punpcklbw %xmm7,%xmm3
punpcklwd %xmm7,%xmm3
psubd  %xmm3,%xmm0
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm0,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm3,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm0
movdqa -0x28(%rsp),%xmm3
psrld  $0x18,%xmm3
pslld  $0x8,%xmm11
por    %xmm3,%xmm11
punpcklbw %xmm7,%xmm11
punpcklwd %xmm7,%xmm11
punpcklbw %xmm7,%xmm14
punpcklwd %xmm7,%xmm14
paddd  %xmm11,%xmm14
psrld  $0x18,%xmm12
pslld  $0x8,%xmm10
por    %xmm12,%xmm10
punpcklbw %xmm7,%xmm10
punpcklwd %xmm7,%xmm10
punpcklbw %xmm7,%xmm6
punpcklwd %xmm7,%xmm6
paddd  %xmm10,%xmm6
paddd  %xmm14,%xmm6
paddd  %xmm4,%xmm6
movdqa %xmm4,%xmm10
psrld  $0x2,%xmm6
movd   0x8(%rsi,%rdx,1),%xmm3
punpcklbw %xmm7,%xmm3
punpcklwd %xmm7,%xmm3
psubd  %xmm3,%xmm6
pshufd $0xf5,%xmm6,%xmm3
pmuludq %xmm6,%xmm6
pshufd $0xe8,%xmm6,%xmm4
pmuludq %xmm3,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm4
paddd  %xmm0,%xmm4
paddd  %xmm9,%xmm4
psrld  $0x18,%xmm5
movaps %xmm8,%xmm0
pslld  $0x8,%xmm0
por    %xmm5,%xmm0
punpcklbw %xmm7,%xmm0
punpcklwd %xmm7,%xmm0
punpcklbw %xmm7,%xmm8
punpcklwd %xmm7,%xmm8
paddd  %xmm0,%xmm8
psrld  $0x18,%xmm1
movdqa %xmm2,%xmm0
pslld  $0x8,%xmm0
por    %xmm1,%xmm0
punpcklbw %xmm7,%xmm0
punpcklwd %xmm7,%xmm0
punpcklbw %xmm7,%xmm2
punpcklwd %xmm7,%xmm2
paddd  %xmm0,%xmm2
paddd  %xmm8,%xmm2
paddd  %xmm10,%xmm2
psrld  $0x2,%xmm2
movd   0xc(%rsi,%rdx,1),%xmm0
punpcklbw %xmm7,%xmm0
punpcklwd %xmm7,%xmm0
psubd  %xmm0,%xmm2
pshufd $0xf5,%xmm2,%xmm0
pmuludq %xmm2,%xmm2
pshufd $0xe8,%xmm2,%xmm1
pmuludq %xmm0,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm1
paddd  %xmm4,%xmm1
pshufd $0xee,%xmm1,%xmm0
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
add    %r10,%rdx
mov    %r8d,%ecx
add    $0xffffffff,%r9d
jne    15d0 <dist2+0x4d0>
ret
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @dist2(i8* %0, i8* %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i8*
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
store i8* %0, i8** %7
store i8* %1, i8** %8
store i32 %2, i32* %9
store i32 %3, i32* %10
store i32 %4, i32* %11
store i32 %5, i32* %12
store i32 0, i32* %18
%20 = load i8*, i8** %7
store i8* %20, i8** %13
%21 = load i8*, i8** %8
store i8* %21, i8** %15
%22 = load i32, i32* %10
%23 = icmp ne i32 %22, 0
br i1 %23, label %71, label %24
24: ; preds = %6
%25 = load i32, i32* %11
%26 = icmp ne i32 %25, 0
br i1 %26, label %71, label %27
27: ; preds = %24
store i32 0, i32* %17
br label %28
28: ; preds = %67, %27
%29 = load i32, i32* %17
%30 = load i32, i32* %12
%31 = icmp slt i32 %29, %30
br i1 %31, label %32, label %70
32: ; preds = %28
store i32 0, i32* %16
br label %33
33: ; preds = %55, %32
%34 = load i32, i32* %16
%35 = icmp slt i32 %34, 16
br i1 %35, label %36, label %58
36: ; preds = %33
%37 = load i8*, i8** %13
%38 = load i32, i32* %16
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds i8, i8* %37, i64 %39
%41 = load i8, i8* %40
%42 = zext i8 %41 to i32
%43 = load i8*, i8** %15
%44 = load i32, i32* %16
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i8, i8* %43, i64 %45
%47 = load i8, i8* %46
%48 = zext i8 %47 to i32
%49 = sub nsw i32 %42, %48
store i32 %49, i32* %19
%50 = load i32, i32* %19
%51 = load i32, i32* %19
%52 = mul nsw i32 %50, %51
%53 = load i32, i32* %18
%54 = add nsw i32 %53, %52
store i32 %54, i32* %18
br label %55
55: ; preds = %36
%56 = load i32, i32* %16
%57 = add nsw i32 %56, 1
store i32 %57, i32* %16
br label %33
58: ; preds = %33
%59 = load i32, i32* %9
%60 = load i8*, i8** %13
%61 = sext i32 %59 to i64
%62 = getelementptr inbounds i8, i8* %60, i64 %61
store i8* %62, i8** %13
%63 = load i32, i32* %9
%64 = load i8*, i8** %15
%65 = sext i32 %63 to i64
%66 = getelementptr inbounds i8, i8* %64, i64 %65
store i8* %66, i8** %15
br label %67
67: ; preds = %58
%68 = load i32, i32* %17
%69 = add nsw i32 %68, 1
store i32 %69, i32* %17
br label %28
70: ; preds = %28
br label %271
71: ; preds = %24, %6
%72 = load i32, i32* %10
%73 = icmp ne i32 %72, 0
br i1 %73, label %74, label %131
74: ; preds = %71
%75 = load i32, i32* %11
%76 = icmp ne i32 %75, 0
br i1 %76, label %131, label %77
77: ; preds = %74
store i32 0, i32* %17
br label %78
78: ; preds = %127, %77
%79 = load i32, i32* %17
%80 = load i32, i32* %12
%81 = icmp slt i32 %79, %80
br i1 %81, label %82, label %130
82: ; preds = %78
store i32 0, i32* %16
br label %83
83: ; preds = %115, %82
%84 = load i32, i32* %16
%85 = icmp slt i32 %84, 16
br i1 %85, label %86, label %118
86: ; preds = %83
%87 = load i8*, i8** %13
%88 = load i32, i32* %16
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds i8, i8* %87, i64 %89
%91 = load i8, i8* %90
%92 = zext i8 %91 to i32
%93 = load i8*, i8** %13
%94 = load i32, i32* %16
%95 = add nsw i32 %94, 1
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i8, i8* %93, i64 %96
%98 = load i8, i8* %97
%99 = zext i8 %98 to i32
%100 = add nsw i32 %92, %99
%101 = add nsw i32 %100, 1
%102 = lshr i32 %101, 1
%103 = load i8*, i8** %15
%104 = load i32, i32* %16
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds i8, i8* %103, i64 %105
%107 = load i8, i8* %106
%108 = zext i8 %107 to i32
%109 = sub i32 %102, %108
store i32 %109, i32* %19
%110 = load i32, i32* %19
%111 = load i32, i32* %19
%112 = mul nsw i32 %110, %111
%113 = load i32, i32* %18
%114 = add nsw i32 %113, %112
store i32 %114, i32* %18
br label %115
115: ; preds = %86
%116 = load i32, i32* %16
%117 = add nsw i32 %116, 1
store i32 %117, i32* %16
br label %83
118: ; preds = %83
%119 = load i32, i32* %9
%120 = load i8*, i8** %13
%121 = sext i32 %119 to i64
%122 = getelementptr inbounds i8, i8* %120, i64 %121
store i8* %122, i8** %13
%123 = load i32, i32* %9
%124 = load i8*, i8** %15
%125 = sext i32 %123 to i64
%126 = getelementptr inbounds i8, i8* %124, i64 %125
store i8* %126, i8** %15
br label %127
127: ; preds = %118
%128 = load i32, i32* %17
%129 = add nsw i32 %128, 1
store i32 %129, i32* %17
br label %78
130: ; preds = %78
br label %270
131: ; preds = %74, %71
%132 = load i32, i32* %10
%133 = icmp ne i32 %132, 0
br i1 %133, label %195, label %134
134: ; preds = %131
%135 = load i32, i32* %11
%136 = icmp ne i32 %135, 0
br i1 %136, label %137, label %195
137: ; preds = %134
%138 = load i8*, i8** %13
%139 = load i32, i32* %9
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds i8, i8* %138, i64 %140
store i8* %141, i8** %14
store i32 0, i32* %17
br label %142
142: ; preds = %191, %137
%143 = load i32, i32* %17
%144 = load i32, i32* %12
%145 = icmp slt i32 %143, %144
br i1 %145, label %146, label %194
146: ; preds = %142
store i32 0, i32* %16
br label %147
147: ; preds = %178, %146
%148 = load i32, i32* %16
%149 = icmp slt i32 %148, 16
br i1 %149, label %150, label %181
150: ; preds = %147
%151 = load i8*, i8** %13
%152 = load i32, i32* %16
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds i8, i8* %151, i64 %153
%155 = load i8, i8* %154
%156 = zext i8 %155 to i32
%157 = load i8*, i8** %14
%158 = load i32, i32* %16
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds i8, i8* %157, i64 %159
%161 = load i8, i8* %160
%162 = zext i8 %161 to i32
%163 = add nsw i32 %156, %162
%164 = add nsw i32 %163, 1
%165 = lshr i32 %164, 1
%166 = load i8*, i8** %15
%167 = load i32, i32* %16
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds i8, i8* %166, i64 %168
%170 = load i8, i8* %169
%171 = zext i8 %170 to i32
%172 = sub i32 %165, %171
store i32 %172, i32* %19
%173 = load i32, i32* %19
%174 = load i32, i32* %19
%175 = mul nsw i32 %173, %174
%176 = load i32, i32* %18
%177 = add nsw i32 %176, %175
store i32 %177, i32* %18
br label %178
178: ; preds = %150
%179 = load i32, i32* %16
%180 = add nsw i32 %179, 1
store i32 %180, i32* %16
br label %147
181: ; preds = %147
%182 = load i8*, i8** %14
store i8* %182, i8** %13
%183 = load i32, i32* %9
%184 = load i8*, i8** %14
%185 = sext i32 %183 to i64
%186 = getelementptr inbounds i8, i8* %184, i64 %185
store i8* %186, i8** %14
%187 = load i32, i32* %9
%188 = load i8*, i8** %15
%189 = sext i32 %187 to i64
%190 = getelementptr inbounds i8, i8* %188, i64 %189
store i8* %190, i8** %15
br label %191
191: ; preds = %181
%192 = load i32, i32* %17
%193 = add nsw i32 %192, 1
store i32 %193, i32* %17
br label %142
194: ; preds = %142
br label %269
195: ; preds = %134, %131
%196 = load i8*, i8** %13
%197 = load i32, i32* %9
%198 = sext i32 %197 to i64
%199 = getelementptr inbounds i8, i8* %196, i64 %198
store i8* %199, i8** %14
store i32 0, i32* %17
br label %200
200: ; preds = %265, %195
%201 = load i32, i32* %17
%202 = load i32, i32* %12
%203 = icmp slt i32 %201, %202
br i1 %203, label %204, label %268
204: ; preds = %200
store i32 0, i32* %16
br label %205
205: ; preds = %252, %204
%206 = load i32, i32* %16
%207 = icmp slt i32 %206, 16
br i1 %207, label %208, label %255
208: ; preds = %205
%209 = load i8*, i8** %13
%210 = load i32, i32* %16
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds i8, i8* %209, i64 %211
%213 = load i8, i8* %212
%214 = zext i8 %213 to i32
%215 = load i8*, i8** %13
%216 = load i32, i32* %16
%217 = add nsw i32 %216, 1
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds i8, i8* %215, i64 %218
%220 = load i8, i8* %219
%221 = zext i8 %220 to i32
%222 = add nsw i32 %214, %221
%223 = load i8*, i8** %14
%224 = load i32, i32* %16
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds i8, i8* %223, i64 %225
%227 = load i8, i8* %226
%228 = zext i8 %227 to i32
%229 = add nsw i32 %222, %228
%230 = load i8*, i8** %14
%231 = load i32, i32* %16
%232 = add nsw i32 %231, 1
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i8, i8* %230, i64 %233
%235 = load i8, i8* %234
%236 = zext i8 %235 to i32
%237 = add nsw i32 %229, %236
%238 = add nsw i32 %237, 2
%239 = lshr i32 %238, 2
%240 = load i8*, i8** %15
%241 = load i32, i32* %16
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds i8, i8* %240, i64 %242
%244 = load i8, i8* %243
%245 = zext i8 %244 to i32
%246 = sub i32 %239, %245
store i32 %246, i32* %19
%247 = load i32, i32* %19
%248 = load i32, i32* %19
%249 = mul nsw i32 %247, %248
%250 = load i32, i32* %18
%251 = add nsw i32 %250, %249
store i32 %251, i32* %18
br label %252
252: ; preds = %208
%253 = load i32, i32* %16
%254 = add nsw i32 %253, 1
store i32 %254, i32* %16
br label %205
255: ; preds = %205
%256 = load i8*, i8** %14
store i8* %256, i8** %13
%257 = load i32, i32* %9
%258 = load i8*, i8** %14
%259 = sext i32 %257 to i64
%260 = getelementptr inbounds i8, i8* %258, i64 %259
store i8* %260, i8** %14
%261 = load i32, i32* %9
%262 = load i8*, i8** %15
%263 = sext i32 %261 to i64
%264 = getelementptr inbounds i8, i8* %262, i64 %263
store i8* %264, i8** %15
br label %265
265: ; preds = %255
%266 = load i32, i32* %17
%267 = add nsw i32 %266, 1
store i32 %267, i32* %17
br label %200
268: ; preds = %200
br label %269
269: ; preds = %268, %194
br label %270
270: ; preds = %269, %130
br label %271
271: ; preds = %270, %70
%272 = load i32, i32* %18
ret i32 %272
}

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