void MC_avg_xy_16_c(unsigned char *dest, const unsigned char *ref,
                    const int stride, int height) {
  do {
    dest[0] = (((((ref[0] + ref[0 + 1] + (ref + stride)[0] +
                   (ref + stride)[0 + 1] + 2) >>
                  2)) +
                dest[0] + 1) >>
               1);
    dest[1] = (((((ref[1] + ref[1 + 1] + (ref + stride)[1] +
                   (ref + stride)[1 + 1] + 2) >>
                  2)) +
                dest[1] + 1) >>
               1);
    dest[2] = (((((ref[2] + ref[2 + 1] + (ref + stride)[2] +
                   (ref + stride)[2 + 1] + 2) >>
                  2)) +
                dest[2] + 1) >>
               1);
    dest[3] = (((((ref[3] + ref[3 + 1] + (ref + stride)[3] +
                   (ref + stride)[3 + 1] + 2) >>
                  2)) +
                dest[3] + 1) >>
               1);
    dest[4] = (((((ref[4] + ref[4 + 1] + (ref + stride)[4] +
                   (ref + stride)[4 + 1] + 2) >>
                  2)) +
                dest[4] + 1) >>
               1);
    dest[5] = (((((ref[5] + ref[5 + 1] + (ref + stride)[5] +
                   (ref + stride)[5 + 1] + 2) >>
                  2)) +
                dest[5] + 1) >>
               1);
    dest[6] = (((((ref[6] + ref[6 + 1] + (ref + stride)[6] +
                   (ref + stride)[6 + 1] + 2) >>
                  2)) +
                dest[6] + 1) >>
               1);
    dest[7] = (((((ref[7] + ref[7 + 1] + (ref + stride)[7] +
                   (ref + stride)[7 + 1] + 2) >>
                  2)) +
                dest[7] + 1) >>
               1);
    dest[8] = (((((ref[8] + ref[8 + 1] + (ref + stride)[8] +
                   (ref + stride)[8 + 1] + 2) >>
                  2)) +
                dest[8] + 1) >>
               1);
    dest[9] = (((((ref[9] + ref[9 + 1] + (ref + stride)[9] +
                   (ref + stride)[9 + 1] + 2) >>
                  2)) +
                dest[9] + 1) >>
               1);
    dest[10] = (((((ref[10] + ref[10 + 1] + (ref + stride)[10] +
                    (ref + stride)[10 + 1] + 2) >>
                   2)) +
                 dest[10] + 1) >>
                1);
    dest[11] = (((((ref[11] + ref[11 + 1] + (ref + stride)[11] +
                    (ref + stride)[11 + 1] + 2) >>
                   2)) +
                 dest[11] + 1) >>
                1);
    dest[12] = (((((ref[12] + ref[12 + 1] + (ref + stride)[12] +
                    (ref + stride)[12 + 1] + 2) >>
                   2)) +
                 dest[12] + 1) >>
                1);
    dest[13] = (((((ref[13] + ref[13 + 1] + (ref + stride)[13] +
                    (ref + stride)[13 + 1] + 2) >>
                   2)) +
                 dest[13] + 1) >>
                1);
    dest[14] = (((((ref[14] + ref[14 + 1] + (ref + stride)[14] +
                    (ref + stride)[14 + 1] + 2) >>
                   2)) +
                 dest[14] + 1) >>
                1);
    dest[15] = (((((ref[15] + ref[15 + 1] + (ref + stride)[15] +
                    (ref + stride)[15 + 1] + 2) >>
                   2)) +
                 dest[15] + 1) >>
                1);
    ref += stride;
    dest += stride;
  } while (--height);
}


x86 assembly (clang, -O0):
<MC_avg_xy_16_c>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x1(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x2(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x1(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x2(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x2(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x3(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x2(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x3(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x4(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x4(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x4(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x5(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x5(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x5(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x6(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x5(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x6(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x7(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x6(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x7(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x6(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x7(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x8(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x7(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x8(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x7(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x7(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x8(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x9(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x8(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x9(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x8(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x8(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x9(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0xa(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x9(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xa(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x9(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x9(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xa(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0xb(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xa(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xb(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0xa(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0xa(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xb(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0xc(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xb(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xc(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0xb(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0xb(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xc(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0xd(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xc(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xd(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0xc(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0xc(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xd(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0xe(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xd(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xe(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0xd(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0xd(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xe(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0xf(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xe(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xf(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0xe(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0xe(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xf(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x10(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0xf(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x10(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0xf(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0xf(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
cmp    $0x0,%eax
jne    1112 <MC_avg_xy_16_c+0x12>
pop    %rbp
ret

x86 assembly (clang, -O2):
<MC_avg_xy_16_c>:
movslq %edx,%r9
add    $0x10,%rsi
add    $0xf,%rdi
nopl   0x0(%rax,%rax,1)
movzbl -0x10(%rsi),%r8d
movzbl -0xf(%rsi),%edx
add    %r8d,%edx
movzbl -0x10(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0xf(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0xf(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xf(%rdi)
movzbl -0xf(%rsi),%eax
movzbl -0xe(%rsi),%edx
add    %eax,%edx
movzbl -0xf(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0xe(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0xe(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xe(%rdi)
movzbl -0xe(%rsi),%eax
movzbl -0xd(%rsi),%edx
add    %eax,%edx
movzbl -0xe(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0xd(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0xd(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xd(%rdi)
movzbl -0xd(%rsi),%eax
movzbl -0xc(%rsi),%edx
add    %eax,%edx
movzbl -0xd(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0xc(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0xc(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xc(%rdi)
movzbl -0xc(%rsi),%eax
movzbl -0xb(%rsi),%edx
add    %eax,%edx
movzbl -0xc(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0xb(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0xb(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xb(%rdi)
movzbl -0xb(%rsi),%eax
movzbl -0xa(%rsi),%edx
add    %eax,%edx
movzbl -0xb(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0xa(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0xa(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xa(%rdi)
movzbl -0xa(%rsi),%eax
movzbl -0x9(%rsi),%edx
add    %eax,%edx
movzbl -0xa(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x9(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x9(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x9(%rdi)
movzbl -0x9(%rsi),%eax
movzbl -0x8(%rsi),%edx
add    %eax,%edx
movzbl -0x9(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x8(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x8(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x8(%rdi)
movzbl -0x8(%rsi),%eax
movzbl -0x7(%rsi),%edx
add    %eax,%edx
movzbl -0x8(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x7(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x7(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x7(%rdi)
movzbl -0x7(%rsi),%eax
movzbl -0x6(%rsi),%edx
add    %eax,%edx
movzbl -0x7(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x6(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x6(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x6(%rdi)
movzbl -0x6(%rsi),%eax
movzbl -0x5(%rsi),%edx
add    %eax,%edx
movzbl -0x6(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x5(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x5(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x5(%rdi)
movzbl -0x5(%rsi),%eax
movzbl -0x4(%rsi),%edx
add    %eax,%edx
movzbl -0x5(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x4(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x4(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x4(%rdi)
movzbl -0x4(%rsi),%eax
movzbl -0x3(%rsi),%edx
add    %eax,%edx
movzbl -0x4(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x3(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x3(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x3(%rdi)
movzbl -0x3(%rsi),%eax
movzbl -0x2(%rsi),%edx
add    %eax,%edx
movzbl -0x3(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x2(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x2(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x2(%rdi)
movzbl -0x2(%rsi),%eax
movzbl -0x1(%rsi),%edx
add    %eax,%edx
movzbl -0x2(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x1(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x1(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x1(%rdi)
movzbl -0x1(%rsi),%eax
movzbl (%rsi),%edx
add    %eax,%edx
movzbl -0x1(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl (%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl (%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
add    %r9,%rsi
shr    %eax
mov    %al,(%rdi)
add    %r9,%rdi
add    $0xffffffff,%ecx
jne    1110 <MC_avg_xy_16_c+0x10>
ret

LLVM IR (-O0):
define void @MC_avg_xy_16_c(i8* %0, i8* %1, i32 %2, i32 %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i32
store i8* %0, i8** %5
store i8* %1, i8** %6
store i32 %2, i32* %7
store i32 %3, i32* %8
br label %9
9: ; preds = %610, %4
%10 = load i8*, i8** %6
%11 = getelementptr inbounds i8, i8* %10, i64 0
%12 = load i8, i8* %11
%13 = zext i8 %12 to i32
%14 = load i8*, i8** %6
%15 = getelementptr inbounds i8, i8* %14, i64 1
%16 = load i8, i8* %15
%17 = zext i8 %16 to i32
%18 = add nsw i32 %13, %17
%19 = load i8*, i8** %6
%20 = load i32, i32* %7
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i8, i8* %19, i64 %21
%23 = getelementptr inbounds i8, i8* %22, i64 0
%24 = load i8, i8* %23
%25 = zext i8 %24 to i32
%26 = add nsw i32 %18, %25
%27 = load i8*, i8** %6
%28 = load i32, i32* %7
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i8, i8* %27, i64 %29
%31 = getelementptr inbounds i8, i8* %30, i64 1
%32 = load i8, i8* %31
%33 = zext i8 %32 to i32
%34 = add nsw i32 %26, %33
%35 = add nsw i32 %34, 2
%36 = ashr i32 %35, 2
%37 = load i8*, i8** %5
%38 = getelementptr inbounds i8, i8* %37, i64 0
%39 = load i8, i8* %38
%40 = zext i8 %39 to i32
%41 = add nsw i32 %36, %40
%42 = add nsw i32 %41, 1
%43 = ashr i32 %42, 1
%44 = trunc i32 %43 to i8
%45 = load i8*, i8** %5
%46 = getelementptr inbounds i8, i8* %45, i64 0
store i8 %44, i8* %46
%47 = load i8*, i8** %6
%48 = getelementptr inbounds i8, i8* %47, i64 1
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = load i8*, i8** %6
%52 = getelementptr inbounds i8, i8* %51, i64 2
%53 = load i8, i8* %52
%54 = zext i8 %53 to i32
%55 = add nsw i32 %50, %54
%56 = load i8*, i8** %6
%57 = load i32, i32* %7
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i8, i8* %56, i64 %58
%60 = getelementptr inbounds i8, i8* %59, i64 1
%61 = load i8, i8* %60
%62 = zext i8 %61 to i32
%63 = add nsw i32 %55, %62
%64 = load i8*, i8** %6
%65 = load i32, i32* %7
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %64, i64 %66
%68 = getelementptr inbounds i8, i8* %67, i64 2
%69 = load i8, i8* %68
%70 = zext i8 %69 to i32
%71 = add nsw i32 %63, %70
%72 = add nsw i32 %71, 2
%73 = ashr i32 %72, 2
%74 = load i8*, i8** %5
%75 = getelementptr inbounds i8, i8* %74, i64 1
%76 = load i8, i8* %75
%77 = zext i8 %76 to i32
%78 = add nsw i32 %73, %77
%79 = add nsw i32 %78, 1
%80 = ashr i32 %79, 1
%81 = trunc i32 %80 to i8
%82 = load i8*, i8** %5
%83 = getelementptr inbounds i8, i8* %82, i64 1
store i8 %81, i8* %83
%84 = load i8*, i8** %6
%85 = getelementptr inbounds i8, i8* %84, i64 2
%86 = load i8, i8* %85
%87 = zext i8 %86 to i32
%88 = load i8*, i8** %6
%89 = getelementptr inbounds i8, i8* %88, i64 3
%90 = load i8, i8* %89
%91 = zext i8 %90 to i32
%92 = add nsw i32 %87, %91
%93 = load i8*, i8** %6
%94 = load i32, i32* %7
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds i8, i8* %93, i64 %95
%97 = getelementptr inbounds i8, i8* %96, i64 2
%98 = load i8, i8* %97
%99 = zext i8 %98 to i32
%100 = add nsw i32 %92, %99
%101 = load i8*, i8** %6
%102 = load i32, i32* %7
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i8, i8* %101, i64 %103
%105 = getelementptr inbounds i8, i8* %104, i64 3
%106 = load i8, i8* %105
%107 = zext i8 %106 to i32
%108 = add nsw i32 %100, %107
%109 = add nsw i32 %108, 2
%110 = ashr i32 %109, 2
%111 = load i8*, i8** %5
%112 = getelementptr inbounds i8, i8* %111, i64 2
%113 = load i8, i8* %112
%114 = zext i8 %113 to i32
%115 = add nsw i32 %110, %114
%116 = add nsw i32 %115, 1
%117 = ashr i32 %116, 1
%118 = trunc i32 %117 to i8
%119 = load i8*, i8** %5
%120 = getelementptr inbounds i8, i8* %119, i64 2
store i8 %118, i8* %120
%121 = load i8*, i8** %6
%122 = getelementptr inbounds i8, i8* %121, i64 3
%123 = load i8, i8* %122
%124 = zext i8 %123 to i32
%125 = load i8*, i8** %6
%126 = getelementptr inbounds i8, i8* %125, i64 4
%127 = load i8, i8* %126
%128 = zext i8 %127 to i32
%129 = add nsw i32 %124, %128
%130 = load i8*, i8** %6
%131 = load i32, i32* %7
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds i8, i8* %130, i64 %132
%134 = getelementptr inbounds i8, i8* %133, i64 3
%135 = load i8, i8* %134
%136 = zext i8 %135 to i32
%137 = add nsw i32 %129, %136
%138 = load i8*, i8** %6
%139 = load i32, i32* %7
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds i8, i8* %138, i64 %140
%142 = getelementptr inbounds i8, i8* %141, i64 4
%143 = load i8, i8* %142
%144 = zext i8 %143 to i32
%145 = add nsw i32 %137, %144
%146 = add nsw i32 %145, 2
%147 = ashr i32 %146, 2
%148 = load i8*, i8** %5
%149 = getelementptr inbounds i8, i8* %148, i64 3
%150 = load i8, i8* %149
%151 = zext i8 %150 to i32
%152 = add nsw i32 %147, %151
%153 = add nsw i32 %152, 1
%154 = ashr i32 %153, 1
%155 = trunc i32 %154 to i8
%156 = load i8*, i8** %5
%157 = getelementptr inbounds i8, i8* %156, i64 3
store i8 %155, i8* %157
%158 = load i8*, i8** %6
%159 = getelementptr inbounds i8, i8* %158, i64 4
%160 = load i8, i8* %159
%161 = zext i8 %160 to i32
%162 = load i8*, i8** %6
%163 = getelementptr inbounds i8, i8* %162, i64 5
%164 = load i8, i8* %163
%165 = zext i8 %164 to i32
%166 = add nsw i32 %161, %165
%167 = load i8*, i8** %6
%168 = load i32, i32* %7
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i8, i8* %167, i64 %169
%171 = getelementptr inbounds i8, i8* %170, i64 4
%172 = load i8, i8* %171
%173 = zext i8 %172 to i32
%174 = add nsw i32 %166, %173
%175 = load i8*, i8** %6
%176 = load i32, i32* %7
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i8, i8* %175, i64 %177
%179 = getelementptr inbounds i8, i8* %178, i64 5
%180 = load i8, i8* %179
%181 = zext i8 %180 to i32
%182 = add nsw i32 %174, %181
%183 = add nsw i32 %182, 2
%184 = ashr i32 %183, 2
%185 = load i8*, i8** %5
%186 = getelementptr inbounds i8, i8* %185, i64 4
%187 = load i8, i8* %186
%188 = zext i8 %187 to i32
%189 = add nsw i32 %184, %188
%190 = add nsw i32 %189, 1
%191 = ashr i32 %190, 1
%192 = trunc i32 %191 to i8
%193 = load i8*, i8** %5
%194 = getelementptr inbounds i8, i8* %193, i64 4
store i8 %192, i8* %194
%195 = load i8*, i8** %6
%196 = getelementptr inbounds i8, i8* %195, i64 5
%197 = load i8, i8* %196
%198 = zext i8 %197 to i32
%199 = load i8*, i8** %6
%200 = getelementptr inbounds i8, i8* %199, i64 6
%201 = load i8, i8* %200
%202 = zext i8 %201 to i32
%203 = add nsw i32 %198, %202
%204 = load i8*, i8** %6
%205 = load i32, i32* %7
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds i8, i8* %204, i64 %206
%208 = getelementptr inbounds i8, i8* %207, i64 5
%209 = load i8, i8* %208
%210 = zext i8 %209 to i32
%211 = add nsw i32 %203, %210
%212 = load i8*, i8** %6
%213 = load i32, i32* %7
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds i8, i8* %212, i64 %214
%216 = getelementptr inbounds i8, i8* %215, i64 6
%217 = load i8, i8* %216
%218 = zext i8 %217 to i32
%219 = add nsw i32 %211, %218
%220 = add nsw i32 %219, 2
%221 = ashr i32 %220, 2
%222 = load i8*, i8** %5
%223 = getelementptr inbounds i8, i8* %222, i64 5
%224 = load i8, i8* %223
%225 = zext i8 %224 to i32
%226 = add nsw i32 %221, %225
%227 = add nsw i32 %226, 1
%228 = ashr i32 %227, 1
%229 = trunc i32 %228 to i8
%230 = load i8*, i8** %5
%231 = getelementptr inbounds i8, i8* %230, i64 5
store i8 %229, i8* %231
%232 = load i8*, i8** %6
%233 = getelementptr inbounds i8, i8* %232, i64 6
%234 = load i8, i8* %233
%235 = zext i8 %234 to i32
%236 = load i8*, i8** %6
%237 = getelementptr inbounds i8, i8* %236, i64 7
%238 = load i8, i8* %237
%239 = zext i8 %238 to i32
%240 = add nsw i32 %235, %239
%241 = load i8*, i8** %6
%242 = load i32, i32* %7
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds i8, i8* %241, i64 %243
%245 = getelementptr inbounds i8, i8* %244, i64 6
%246 = load i8, i8* %245
%247 = zext i8 %246 to i32
%248 = add nsw i32 %240, %247
%249 = load i8*, i8** %6
%250 = load i32, i32* %7
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds i8, i8* %249, i64 %251
%253 = getelementptr inbounds i8, i8* %252, i64 7
%254 = load i8, i8* %253
%255 = zext i8 %254 to i32
%256 = add nsw i32 %248, %255
%257 = add nsw i32 %256, 2
%258 = ashr i32 %257, 2
%259 = load i8*, i8** %5
%260 = getelementptr inbounds i8, i8* %259, i64 6
%261 = load i8, i8* %260
%262 = zext i8 %261 to i32
%263 = add nsw i32 %258, %262
%264 = add nsw i32 %263, 1
%265 = ashr i32 %264, 1
%266 = trunc i32 %265 to i8
%267 = load i8*, i8** %5
%268 = getelementptr inbounds i8, i8* %267, i64 6
store i8 %266, i8* %268
%269 = load i8*, i8** %6
%270 = getelementptr inbounds i8, i8* %269, i64 7
%271 = load i8, i8* %270
%272 = zext i8 %271 to i32
%273 = load i8*, i8** %6
%274 = getelementptr inbounds i8, i8* %273, i64 8
%275 = load i8, i8* %274
%276 = zext i8 %275 to i32
%277 = add nsw i32 %272, %276
%278 = load i8*, i8** %6
%279 = load i32, i32* %7
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds i8, i8* %278, i64 %280
%282 = getelementptr inbounds i8, i8* %281, i64 7
%283 = load i8, i8* %282
%284 = zext i8 %283 to i32
%285 = add nsw i32 %277, %284
%286 = load i8*, i8** %6
%287 = load i32, i32* %7
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds i8, i8* %286, i64 %288
%290 = getelementptr inbounds i8, i8* %289, i64 8
%291 = load i8, i8* %290
%292 = zext i8 %291 to i32
%293 = add nsw i32 %285, %292
%294 = add nsw i32 %293, 2
%295 = ashr i32 %294, 2
%296 = load i8*, i8** %5
%297 = getelementptr inbounds i8, i8* %296, i64 7
%298 = load i8, i8* %297
%299 = zext i8 %298 to i32
%300 = add nsw i32 %295, %299
%301 = add nsw i32 %300, 1
%302 = ashr i32 %301, 1
%303 = trunc i32 %302 to i8
%304 = load i8*, i8** %5
%305 = getelementptr inbounds i8, i8* %304, i64 7
store i8 %303, i8* %305
%306 = load i8*, i8** %6
%307 = getelementptr inbounds i8, i8* %306, i64 8
%308 = load i8, i8* %307
%309 = zext i8 %308 to i32
%310 = load i8*, i8** %6
%311 = getelementptr inbounds i8, i8* %310, i64 9
%312 = load i8, i8* %311
%313 = zext i8 %312 to i32
%314 = add nsw i32 %309, %313
%315 = load i8*, i8** %6
%316 = load i32, i32* %7
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds i8, i8* %315, i64 %317
%319 = getelementptr inbounds i8, i8* %318, i64 8
%320 = load i8, i8* %319
%321 = zext i8 %320 to i32
%322 = add nsw i32 %314, %321
%323 = load i8*, i8** %6
%324 = load i32, i32* %7
%325 = sext i32 %324 to i64
%326 = getelementptr inbounds i8, i8* %323, i64 %325
%327 = getelementptr inbounds i8, i8* %326, i64 9
%328 = load i8, i8* %327
%329 = zext i8 %328 to i32
%330 = add nsw i32 %322, %329
%331 = add nsw i32 %330, 2
%332 = ashr i32 %331, 2
%333 = load i8*, i8** %5
%334 = getelementptr inbounds i8, i8* %333, i64 8
%335 = load i8, i8* %334
%336 = zext i8 %335 to i32
%337 = add nsw i32 %332, %336
%338 = add nsw i32 %337, 1
%339 = ashr i32 %338, 1
%340 = trunc i32 %339 to i8
%341 = load i8*, i8** %5
%342 = getelementptr inbounds i8, i8* %341, i64 8
store i8 %340, i8* %342
%343 = load i8*, i8** %6
%344 = getelementptr inbounds i8, i8* %343, i64 9
%345 = load i8, i8* %344
%346 = zext i8 %345 to i32
%347 = load i8*, i8** %6
%348 = getelementptr inbounds i8, i8* %347, i64 10
%349 = load i8, i8* %348
%350 = zext i8 %349 to i32
%351 = add nsw i32 %346, %350
%352 = load i8*, i8** %6
%353 = load i32, i32* %7
%354 = sext i32 %353 to i64
%355 = getelementptr inbounds i8, i8* %352, i64 %354
%356 = getelementptr inbounds i8, i8* %355, i64 9
%357 = load i8, i8* %356
%358 = zext i8 %357 to i32
%359 = add nsw i32 %351, %358
%360 = load i8*, i8** %6
%361 = load i32, i32* %7
%362 = sext i32 %361 to i64
%363 = getelementptr inbounds i8, i8* %360, i64 %362
%364 = getelementptr inbounds i8, i8* %363, i64 10
%365 = load i8, i8* %364
%366 = zext i8 %365 to i32
%367 = add nsw i32 %359, %366
%368 = add nsw i32 %367, 2
%369 = ashr i32 %368, 2
%370 = load i8*, i8** %5
%371 = getelementptr inbounds i8, i8* %370, i64 9
%372 = load i8, i8* %371
%373 = zext i8 %372 to i32
%374 = add nsw i32 %369, %373
%375 = add nsw i32 %374, 1
%376 = ashr i32 %375, 1
%377 = trunc i32 %376 to i8
%378 = load i8*, i8** %5
%379 = getelementptr inbounds i8, i8* %378, i64 9
store i8 %377, i8* %379
%380 = load i8*, i8** %6
%381 = getelementptr inbounds i8, i8* %380, i64 10
%382 = load i8, i8* %381
%383 = zext i8 %382 to i32
%384 = load i8*, i8** %6
%385 = getelementptr inbounds i8, i8* %384, i64 11
%386 = load i8, i8* %385
%387 = zext i8 %386 to i32
%388 = add nsw i32 %383, %387
%389 = load i8*, i8** %6
%390 = load i32, i32* %7
%391 = sext i32 %390 to i64
%392 = getelementptr inbounds i8, i8* %389, i64 %391
%393 = getelementptr inbounds i8, i8* %392, i64 10
%394 = load i8, i8* %393
%395 = zext i8 %394 to i32
%396 = add nsw i32 %388, %395
%397 = load i8*, i8** %6
%398 = load i32, i32* %7
%399 = sext i32 %398 to i64
%400 = getelementptr inbounds i8, i8* %397, i64 %399
%401 = getelementptr inbounds i8, i8* %400, i64 11
%402 = load i8, i8* %401
%403 = zext i8 %402 to i32
%404 = add nsw i32 %396, %403
%405 = add nsw i32 %404, 2
%406 = ashr i32 %405, 2
%407 = load i8*, i8** %5
%408 = getelementptr inbounds i8, i8* %407, i64 10
%409 = load i8, i8* %408
%410 = zext i8 %409 to i32
%411 = add nsw i32 %406, %410
%412 = add nsw i32 %411, 1
%413 = ashr i32 %412, 1
%414 = trunc i32 %413 to i8
%415 = load i8*, i8** %5
%416 = getelementptr inbounds i8, i8* %415, i64 10
store i8 %414, i8* %416
%417 = load i8*, i8** %6
%418 = getelementptr inbounds i8, i8* %417, i64 11
%419 = load i8, i8* %418
%420 = zext i8 %419 to i32
%421 = load i8*, i8** %6
%422 = getelementptr inbounds i8, i8* %421, i64 12
%423 = load i8, i8* %422
%424 = zext i8 %423 to i32
%425 = add nsw i32 %420, %424
%426 = load i8*, i8** %6
%427 = load i32, i32* %7
%428 = sext i32 %427 to i64
%429 = getelementptr inbounds i8, i8* %426, i64 %428
%430 = getelementptr inbounds i8, i8* %429, i64 11
%431 = load i8, i8* %430
%432 = zext i8 %431 to i32
%433 = add nsw i32 %425, %432
%434 = load i8*, i8** %6
%435 = load i32, i32* %7
%436 = sext i32 %435 to i64
%437 = getelementptr inbounds i8, i8* %434, i64 %436
%438 = getelementptr inbounds i8, i8* %437, i64 12
%439 = load i8, i8* %438
%440 = zext i8 %439 to i32
%441 = add nsw i32 %433, %440
%442 = add nsw i32 %441, 2
%443 = ashr i32 %442, 2
%444 = load i8*, i8** %5
%445 = getelementptr inbounds i8, i8* %444, i64 11
%446 = load i8, i8* %445
%447 = zext i8 %446 to i32
%448 = add nsw i32 %443, %447
%449 = add nsw i32 %448, 1
%450 = ashr i32 %449, 1
%451 = trunc i32 %450 to i8
%452 = load i8*, i8** %5
%453 = getelementptr inbounds i8, i8* %452, i64 11
store i8 %451, i8* %453
%454 = load i8*, i8** %6
%455 = getelementptr inbounds i8, i8* %454, i64 12
%456 = load i8, i8* %455
%457 = zext i8 %456 to i32
%458 = load i8*, i8** %6
%459 = getelementptr inbounds i8, i8* %458, i64 13
%460 = load i8, i8* %459
%461 = zext i8 %460 to i32
%462 = add nsw i32 %457, %461
%463 = load i8*, i8** %6
%464 = load i32, i32* %7
%465 = sext i32 %464 to i64
%466 = getelementptr inbounds i8, i8* %463, i64 %465
%467 = getelementptr inbounds i8, i8* %466, i64 12
%468 = load i8, i8* %467
%469 = zext i8 %468 to i32
%470 = add nsw i32 %462, %469
%471 = load i8*, i8** %6
%472 = load i32, i32* %7
%473 = sext i32 %472 to i64
%474 = getelementptr inbounds i8, i8* %471, i64 %473
%475 = getelementptr inbounds i8, i8* %474, i64 13
%476 = load i8, i8* %475
%477 = zext i8 %476 to i32
%478 = add nsw i32 %470, %477
%479 = add nsw i32 %478, 2
%480 = ashr i32 %479, 2
%481 = load i8*, i8** %5
%482 = getelementptr inbounds i8, i8* %481, i64 12
%483 = load i8, i8* %482
%484 = zext i8 %483 to i32
%485 = add nsw i32 %480, %484
%486 = add nsw i32 %485, 1
%487 = ashr i32 %486, 1
%488 = trunc i32 %487 to i8
%489 = load i8*, i8** %5
%490 = getelementptr inbounds i8, i8* %489, i64 12
store i8 %488, i8* %490
%491 = load i8*, i8** %6
%492 = getelementptr inbounds i8, i8* %491, i64 13
%493 = load i8, i8* %492
%494 = zext i8 %493 to i32
%495 = load i8*, i8** %6
%496 = getelementptr inbounds i8, i8* %495, i64 14
%497 = load i8, i8* %496
%498 = zext i8 %497 to i32
%499 = add nsw i32 %494, %498
%500 = load i8*, i8** %6
%501 = load i32, i32* %7
%502 = sext i32 %501 to i64
%503 = getelementptr inbounds i8, i8* %500, i64 %502
%504 = getelementptr inbounds i8, i8* %503, i64 13
%505 = load i8, i8* %504
%506 = zext i8 %505 to i32
%507 = add nsw i32 %499, %506
%508 = load i8*, i8** %6
%509 = load i32, i32* %7
%510 = sext i32 %509 to i64
%511 = getelementptr inbounds i8, i8* %508, i64 %510
%512 = getelementptr inbounds i8, i8* %511, i64 14
%513 = load i8, i8* %512
%514 = zext i8 %513 to i32
%515 = add nsw i32 %507, %514
%516 = add nsw i32 %515, 2
%517 = ashr i32 %516, 2
%518 = load i8*, i8** %5
%519 = getelementptr inbounds i8, i8* %518, i64 13
%520 = load i8, i8* %519
%521 = zext i8 %520 to i32
%522 = add nsw i32 %517, %521
%523 = add nsw i32 %522, 1
%524 = ashr i32 %523, 1
%525 = trunc i32 %524 to i8
%526 = load i8*, i8** %5
%527 = getelementptr inbounds i8, i8* %526, i64 13
store i8 %525, i8* %527
%528 = load i8*, i8** %6
%529 = getelementptr inbounds i8, i8* %528, i64 14
%530 = load i8, i8* %529
%531 = zext i8 %530 to i32
%532 = load i8*, i8** %6
%533 = getelementptr inbounds i8, i8* %532, i64 15
%534 = load i8, i8* %533
%535 = zext i8 %534 to i32
%536 = add nsw i32 %531, %535
%537 = load i8*, i8** %6
%538 = load i32, i32* %7
%539 = sext i32 %538 to i64
%540 = getelementptr inbounds i8, i8* %537, i64 %539
%541 = getelementptr inbounds i8, i8* %540, i64 14
%542 = load i8, i8* %541
%543 = zext i8 %542 to i32
%544 = add nsw i32 %536, %543
%545 = load i8*, i8** %6
%546 = load i32, i32* %7
%547 = sext i32 %546 to i64
%548 = getelementptr inbounds i8, i8* %545, i64 %547
%549 = getelementptr inbounds i8, i8* %548, i64 15
%550 = load i8, i8* %549
%551 = zext i8 %550 to i32
%552 = add nsw i32 %544, %551
%553 = add nsw i32 %552, 2
%554 = ashr i32 %553, 2
%555 = load i8*, i8** %5
%556 = getelementptr inbounds i8, i8* %555, i64 14
%557 = load i8, i8* %556
%558 = zext i8 %557 to i32
%559 = add nsw i32 %554, %558
%560 = add nsw i32 %559, 1
%561 = ashr i32 %560, 1
%562 = trunc i32 %561 to i8
%563 = load i8*, i8** %5
%564 = getelementptr inbounds i8, i8* %563, i64 14
store i8 %562, i8* %564
%565 = load i8*, i8** %6
%566 = getelementptr inbounds i8, i8* %565, i64 15
%567 = load i8, i8* %566
%568 = zext i8 %567 to i32
%569 = load i8*, i8** %6
%570 = getelementptr inbounds i8, i8* %569, i64 16
%571 = load i8, i8* %570
%572 = zext i8 %571 to i32
%573 = add nsw i32 %568, %572
%574 = load i8*, i8** %6
%575 = load i32, i32* %7
%576 = sext i32 %575 to i64
%577 = getelementptr inbounds i8, i8* %574, i64 %576
%578 = getelementptr inbounds i8, i8* %577, i64 15
%579 = load i8, i8* %578
%580 = zext i8 %579 to i32
%581 = add nsw i32 %573, %580
%582 = load i8*, i8** %6
%583 = load i32, i32* %7
%584 = sext i32 %583 to i64
%585 = getelementptr inbounds i8, i8* %582, i64 %584
%586 = getelementptr inbounds i8, i8* %585, i64 16
%587 = load i8, i8* %586
%588 = zext i8 %587 to i32
%589 = add nsw i32 %581, %588
%590 = add nsw i32 %589, 2
%591 = ashr i32 %590, 2
%592 = load i8*, i8** %5
%593 = getelementptr inbounds i8, i8* %592, i64 15
%594 = load i8, i8* %593
%595 = zext i8 %594 to i32
%596 = add nsw i32 %591, %595
%597 = add nsw i32 %596, 1
%598 = ashr i32 %597, 1
%599 = trunc i32 %598 to i8
%600 = load i8*, i8** %5
%601 = getelementptr inbounds i8, i8* %600, i64 15
store i8 %599, i8* %601
%602 = load i32, i32* %7
%603 = load i8*, i8** %6
%604 = sext i32 %602 to i64
%605 = getelementptr inbounds i8, i8* %603, i64 %604
store i8* %605, i8** %6
%606 = load i32, i32* %7
%607 = load i8*, i8** %5
%608 = sext i32 %606 to i64
%609 = getelementptr inbounds i8, i8* %607, i64 %608
store i8* %609, i8** %5
br label %610
610: ; preds = %9
%611 = load i32, i32* %8
%612 = add nsw i32 %611, -1
store i32 %612, i32* %8
%613 = icmp ne i32 %612, 0
br i1 %613, label %9, label %614
614: ; preds = %610
ret void
}

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