void symmetric_mix(const short *src1, const short *src2, short *dst,
                   const unsigned n) {
  unsigned i, j;
  for (i = 0; i < n; i += 8)
    for (j = i; j < i + 8; ++j)
      dst[j] = (short)((((int)src1[j] + (int)src2[j]) > (0x7FFF))
                           ? (0x7FFF)
                           : ((((int)src1[j] + (int)src2[j]) < (-0x8000))
                                  ? (-0x8000)
                                  : ((int)src1[j] + (int)src2[j])));
}


x86 assembly (clang, -O0):
<symmetric_mix>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jae    11f0 <symmetric_mix+0xf0>
mov    -0x20(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x20(%rbp),%ecx
add    $0x8,%ecx
cmp    %ecx,%eax
jae    11dd <symmetric_mix+0xdd>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
movswl (%rax,%rcx,2),%eax
mov    -0x10(%rbp),%rcx
mov    -0x24(%rbp),%edx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
cmp    $0x7fff,%eax
jle    116d <symmetric_mix+0x6d>
mov    $0x7fff,%eax
mov    %eax,-0x28(%rbp)
jmp    11be <symmetric_mix+0xbe>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
movswl (%rax,%rcx,2),%eax
mov    -0x10(%rbp),%rcx
mov    -0x24(%rbp),%edx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
cmp    $0xffff8000,%eax
jge    119d <symmetric_mix+0x9d>
mov    $0xffff8000,%eax
mov    %eax,-0x2c(%rbp)
jmp    11b8 <symmetric_mix+0xb8>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
movswl (%rax,%rcx,2),%eax
mov    -0x10(%rbp),%rcx
mov    -0x24(%rbp),%edx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %dx,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    112c <symmetric_mix+0x2c>
jmp    11e2 <symmetric_mix+0xe2>
mov    -0x20(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x20(%rbp)
jmp    111a <symmetric_mix+0x1a>
pop    %rbp
ret

x86 assembly (clang, -O2):
<symmetric_mix>:
push   %rbp
push   %r14
push   %rbx
test   %ecx,%ecx
je     1aca <symmetric_mix+0x9ca>
mov    %ecx,%r10d
lea    -0x1(%r10),%r8
cmp    $0x38,%r8
jae    1120 <symmetric_mix+0x20>
xor    %ecx,%ecx
jmp    19a0 <symmetric_mix+0x8a0>
lea    0x7(%r10),%rax
and    $0xfffffffffffffff8,%rax
lea    (%rdx,%rax,2),%rcx
lea    (%rdi,%rax,2),%rbx
cmp    %rdx,%rbx
seta   %r11b
lea    (%rsi,%rax,2),%rax
cmp    %rdi,%rcx
seta   %bl
cmp    %rdx,%rax
seta   %al
cmp    %rsi,%rcx
seta   %r9b
xor    %ecx,%ecx
test   %bl,%r11b
jne    19a0 <symmetric_mix+0x8a0>
and    %r9b,%al
jne    19a0 <symmetric_mix+0x8a0>
shr    $0x3,%r8
add    $0x1,%r8
mov    %r8,%r9
and    $0xfffffffffffffff8,%r9
lea    0x0(,%r9,8),%rcx
lea    0x7e(%rsi),%r11
lea    0x7e(%rdi),%rax
xor    %ebx,%ebx
mov    %r9,%r14
cs nopw 0x0(%rax,%rax,1)
movzwl -0xe(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x1e(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x2e(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x3e(%rax,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x4e(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x5e(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x6e(%rax,%rbx,1),%ebp
movd   %ebp,%xmm3
movzwl -0x7e(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0xe(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x1e(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x2e(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x3e(%r11,%rbx,1),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x4e(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x5e(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x6e(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x7e(%r11,%rbx,1),%ebp
movd   %ebp,%xmm9
punpcklwd %xmm1,%xmm9
punpckldq %xmm2,%xmm9
punpcklqdq %xmm3,%xmm9
paddsw %xmm0,%xmm9
movzwl -0xc(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x1c(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x2c(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x3c(%rax,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x4c(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x5c(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x6c(%rax,%rbx,1),%ebp
movd   %ebp,%xmm3
movzwl -0x7c(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0xc(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x1c(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x2c(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x3c(%r11,%rbx,1),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x4c(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x5c(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x6c(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x7c(%r11,%rbx,1),%ebp
movd   %ebp,%xmm8
punpcklwd %xmm1,%xmm8
punpckldq %xmm2,%xmm8
punpcklqdq %xmm3,%xmm8
paddsw %xmm0,%xmm8
movzwl -0xa(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x1a(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x2a(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x3a(%rax,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x4a(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x5a(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x6a(%rax,%rbx,1),%ebp
movd   %ebp,%xmm3
movzwl -0x7a(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0xa(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x1a(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x2a(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x3a(%r11,%rbx,1),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x4a(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x5a(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x6a(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x7a(%r11,%rbx,1),%ebp
movd   %ebp,%xmm11
punpcklwd %xmm1,%xmm11
punpckldq %xmm2,%xmm11
punpcklqdq %xmm3,%xmm11
paddsw %xmm0,%xmm11
movzwl -0x8(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x18(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x28(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x38(%rax,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x48(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x58(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x68(%rax,%rbx,1),%ebp
movd   %ebp,%xmm3
movzwl -0x78(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x8(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x18(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x28(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x38(%r11,%rbx,1),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x48(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x58(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x68(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x78(%r11,%rbx,1),%ebp
movd   %ebp,%xmm10
punpcklwd %xmm1,%xmm10
punpckldq %xmm2,%xmm10
punpcklqdq %xmm3,%xmm10
paddsw %xmm0,%xmm10
movzwl -0x6(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x16(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x26(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x36(%rax,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x46(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x56(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x66(%rax,%rbx,1),%ebp
movd   %ebp,%xmm3
movzwl -0x76(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x6(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x16(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x26(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x36(%r11,%rbx,1),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x46(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x56(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x66(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x76(%r11,%rbx,1),%ebp
movd   %ebp,%xmm14
punpcklwd %xmm1,%xmm14
punpckldq %xmm2,%xmm14
punpcklqdq %xmm3,%xmm14
paddsw %xmm0,%xmm14
movzwl -0x4(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x14(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x24(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x34(%rax,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x44(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x54(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x64(%rax,%rbx,1),%ebp
movd   %ebp,%xmm3
movzwl -0x74(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x4(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x14(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x24(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x34(%r11,%rbx,1),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x44(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x54(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x64(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x74(%r11,%rbx,1),%ebp
movd   %ebp,%xmm12
punpcklwd %xmm1,%xmm12
punpckldq %xmm2,%xmm12
punpcklqdq %xmm3,%xmm12
paddsw %xmm0,%xmm12
movzwl -0x2(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x12(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x22(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x32(%rax,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x42(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x52(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x62(%rax,%rbx,1),%ebp
movd   %ebp,%xmm3
movzwl -0x72(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl -0x2(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x12(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x22(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x32(%r11,%rbx,1),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x42(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x52(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x62(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x72(%r11,%rbx,1),%ebp
movd   %ebp,%xmm4
punpcklwd %xmm1,%xmm4
punpckldq %xmm2,%xmm4
punpcklqdq %xmm3,%xmm4
paddsw %xmm0,%xmm4
movzwl (%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x10(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x20(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x30(%rax,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x40(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
movzwl -0x50(%rax,%rbx,1),%ebp
movd   %ebp,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x60(%rax,%rbx,1),%ebp
movd   %ebp,%xmm3
movzwl -0x70(%rax,%rbx,1),%ebp
movd   %ebp,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm1,%xmm0
punpcklqdq %xmm2,%xmm0
movzwl (%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x10(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x20(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x30(%r11,%rbx,1),%ebp
movd   %ebp,%xmm5
punpcklwd %xmm1,%xmm5
punpckldq %xmm2,%xmm5
movzwl -0x40(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x50(%r11,%rbx,1),%ebp
movd   %ebp,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x60(%r11,%rbx,1),%ebp
movd   %ebp,%xmm1
movzwl -0x70(%r11,%rbx,1),%ebp
movd   %ebp,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
punpcklqdq %xmm5,%xmm3
paddsw %xmm0,%xmm3
movdqa %xmm11,%xmm5
punpcklwd %xmm10,%xmm5
movdqa %xmm9,%xmm7
punpcklwd %xmm8,%xmm7
movdqa %xmm7,%xmm0
punpckldq %xmm5,%xmm0
movdqa %xmm4,%xmm6
punpcklwd %xmm3,%xmm6
pshufd $0x0,%xmm6,%xmm2
movdqa %xmm14,%xmm1
punpcklwd %xmm12,%xmm1
pshufd $0x0,%xmm1,%xmm13
punpckhdq %xmm2,%xmm13
movsd  %xmm0,%xmm13
movdqa %xmm1,%xmm0
punpckldq %xmm6,%xmm0
pshufd $0x55,%xmm5,%xmm2
pshufd $0x55,%xmm7,%xmm15
punpckldq %xmm2,%xmm15
shufps $0xe4,%xmm0,%xmm15
pshufd $0xaa,%xmm6,%xmm2
pshufd $0xaa,%xmm1,%xmm0
punpckhdq %xmm2,%xmm0
pshufd $0xff,%xmm7,%xmm2
punpckhdq %xmm5,%xmm7
movsd  %xmm7,%xmm0
punpckhdq %xmm6,%xmm1
pshufd $0xff,%xmm5,%xmm5
punpckldq %xmm5,%xmm2
shufps $0xe4,%xmm1,%xmm2
punpckhwd %xmm10,%xmm11
punpckhwd %xmm8,%xmm9
movdqa %xmm9,%xmm1
punpckldq %xmm11,%xmm1
punpckhwd %xmm3,%xmm4
pshufd $0x0,%xmm4,%xmm3
punpckhwd %xmm12,%xmm14
pshufd $0x0,%xmm14,%xmm5
punpckhdq %xmm3,%xmm5
movsd  %xmm1,%xmm5
movdqa %xmm14,%xmm1
punpckldq %xmm4,%xmm1
pshufd $0x55,%xmm11,%xmm3
pshufd $0x55,%xmm9,%xmm6
punpckldq %xmm3,%xmm6
shufps $0xe4,%xmm1,%xmm6
pshufd $0xaa,%xmm4,%xmm1
pshufd $0xaa,%xmm14,%xmm3
punpckhdq %xmm1,%xmm3
pshufd $0xff,%xmm9,%xmm1
punpckhdq %xmm11,%xmm9
movsd  %xmm9,%xmm3
punpckhdq %xmm4,%xmm14
pshufd $0xff,%xmm11,%xmm4
punpckldq %xmm4,%xmm1
shufps $0xe4,%xmm14,%xmm1
movups %xmm1,0x70(%rdx,%rbx,1)
movupd %xmm3,0x60(%rdx,%rbx,1)
movups %xmm6,0x50(%rdx,%rbx,1)
movupd %xmm5,0x40(%rdx,%rbx,1)
movups %xmm2,0x30(%rdx,%rbx,1)
movupd %xmm0,0x20(%rdx,%rbx,1)
movups %xmm15,0x10(%rdx,%rbx,1)
movupd %xmm13,(%rdx,%rbx,1)
sub    $0xffffffffffffff80,%rbx
add    $0xfffffffffffffff8,%r14
jne    1190 <symmetric_mix+0x90>
cmp    %r9,%r8
je     1aca <symmetric_mix+0x9ca>
nopl   0x0(%rax)
movzwl (%rdi,%rcx,2),%eax
movzwl (%rsi,%rcx,2),%ebp
lea    (%rax,%rbp,1),%ebx
movswl %bx,%ebx
sar    $0xf,%ebx
xor    $0xffff8000,%ebx
add    %bp,%ax
cmovo  %ebx,%eax
mov    %ax,(%rdx,%rcx,2)
movzwl 0x2(%rdi,%rcx,2),%eax
movzwl 0x2(%rsi,%rcx,2),%ebp
lea    (%rax,%rbp,1),%ebx
movswl %bx,%ebx
sar    $0xf,%ebx
xor    $0xffff8000,%ebx
add    %bp,%ax
cmovo  %ebx,%eax
mov    %ax,0x2(%rdx,%rcx,2)
movzwl 0x4(%rdi,%rcx,2),%eax
movzwl 0x4(%rsi,%rcx,2),%ebp
lea    (%rax,%rbp,1),%ebx
movswl %bx,%ebx
sar    $0xf,%ebx
xor    $0xffff8000,%ebx
add    %bp,%ax
cmovo  %ebx,%eax
mov    %ax,0x4(%rdx,%rcx,2)
movzwl 0x6(%rdi,%rcx,2),%eax
movzwl 0x6(%rsi,%rcx,2),%ebp
lea    (%rax,%rbp,1),%ebx
movswl %bx,%ebx
sar    $0xf,%ebx
xor    $0xffff8000,%ebx
add    %bp,%ax
cmovo  %ebx,%eax
mov    %ax,0x6(%rdx,%rcx,2)
movzwl 0x8(%rdi,%rcx,2),%eax
movzwl 0x8(%rsi,%rcx,2),%ebp
lea    (%rax,%rbp,1),%ebx
movswl %bx,%ebx
sar    $0xf,%ebx
xor    $0xffff8000,%ebx
add    %bp,%ax
cmovo  %ebx,%eax
mov    %ax,0x8(%rdx,%rcx,2)
movzwl 0xa(%rdi,%rcx,2),%eax
movzwl 0xa(%rsi,%rcx,2),%ebp
lea    (%rax,%rbp,1),%ebx
movswl %bx,%ebx
sar    $0xf,%ebx
xor    $0xffff8000,%ebx
add    %bp,%ax
cmovo  %ebx,%eax
mov    %ax,0xa(%rdx,%rcx,2)
movzwl 0xc(%rdi,%rcx,2),%eax
movzwl 0xc(%rsi,%rcx,2),%ebp
lea    (%rax,%rbp,1),%ebx
movswl %bx,%ebx
sar    $0xf,%ebx
xor    $0xffff8000,%ebx
add    %bp,%ax
cmovo  %ebx,%eax
mov    %ax,0xc(%rdx,%rcx,2)
movzwl 0xe(%rdi,%rcx,2),%eax
movzwl 0xe(%rsi,%rcx,2),%ebp
lea    (%rax,%rbp,1),%ebx
movswl %bx,%ebx
sar    $0xf,%ebx
xor    $0xffff8000,%ebx
add    %bp,%ax
cmovo  %ebx,%eax
mov    %ax,0xe(%rdx,%rcx,2)
add    $0x8,%rcx
cmp    %r10,%rcx
jb     19a0 <symmetric_mix+0x8a0>
pop    %rbx
pop    %r14
pop    %rbp
ret

LLVM IR (-O0):
define void @symmetric_mix(i16* %0, i16* %1, i16* %2, i32 %3) {
%5 = alloca i16*
%6 = alloca i16*
%7 = alloca i16*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i16* %0, i16** %5
store i16* %1, i16** %6
store i16* %2, i16** %7
store i32 %3, i32* %8
store i32 0, i32* %9
br label %11
11: ; preds = %81, %4
%12 = load i32, i32* %9
%13 = load i32, i32* %8
%14 = icmp ult i32 %12, %13
br i1 %14, label %15, label %84
15: ; preds = %11
%16 = load i32, i32* %9
store i32 %16, i32* %10
br label %17
17: ; preds = %77, %15
%18 = load i32, i32* %10
%19 = load i32, i32* %9
%20 = add i32 %19, 8
%21 = icmp ult i32 %18, %20
br i1 %21, label %22, label %80
22: ; preds = %17
%23 = load i16*, i16** %5
%24 = load i32, i32* %10
%25 = zext i32 %24 to i64
%26 = getelementptr inbounds i16, i16* %23, i64 %25
%27 = load i16, i16* %26
%28 = sext i16 %27 to i32
%29 = load i16*, i16** %6
%30 = load i32, i32* %10
%31 = zext i32 %30 to i64
%32 = getelementptr inbounds i16, i16* %29, i64 %31
%33 = load i16, i16* %32
%34 = sext i16 %33 to i32
%35 = add nsw i32 %28, %34
%36 = icmp sgt i32 %35, 32767
br i1 %36, label %37, label %38
37: ; preds = %22
br label %70
38: ; preds = %22
%39 = load i16*, i16** %5
%40 = load i32, i32* %10
%41 = zext i32 %40 to i64
%42 = getelementptr inbounds i16, i16* %39, i64 %41
%43 = load i16, i16* %42
%44 = sext i16 %43 to i32
%45 = load i16*, i16** %6
%46 = load i32, i32* %10
%47 = zext i32 %46 to i64
%48 = getelementptr inbounds i16, i16* %45, i64 %47
%49 = load i16, i16* %48
%50 = sext i16 %49 to i32
%51 = add nsw i32 %44, %50
%52 = icmp slt i32 %51, -32768
br i1 %52, label %53, label %54
53: ; preds = %38
br label %68
54: ; preds = %38
%55 = load i16*, i16** %5
%56 = load i32, i32* %10
%57 = zext i32 %56 to i64
%58 = getelementptr inbounds i16, i16* %55, i64 %57
%59 = load i16, i16* %58
%60 = sext i16 %59 to i32
%61 = load i16*, i16** %6
%62 = load i32, i32* %10
%63 = zext i32 %62 to i64
%64 = getelementptr inbounds i16, i16* %61, i64 %63
%65 = load i16, i16* %64
%66 = sext i16 %65 to i32
%67 = add nsw i32 %60, %66
br label %68
68: ; preds = %54, %53
%69 = phi i32 [ -32768, %53 ], [ %67, %54 ]
br label %70
70: ; preds = %68, %37
%71 = phi i32 [ 32767, %37 ], [ %69, %68 ]
%72 = trunc i32 %71 to i16
%73 = load i16*, i16** %7
%74 = load i32, i32* %10
%75 = zext i32 %74 to i64
%76 = getelementptr inbounds i16, i16* %73, i64 %75
store i16 %72, i16* %76
br label %77
77: ; preds = %70
%78 = load i32, i32* %10
%79 = add i32 %78, 1
store i32 %79, i32* %10
br label %17
80: ; preds = %17
br label %81
81: ; preds = %80
%82 = load i32, i32* %9
%83 = add i32 %82, 8
store i32 %83, i32* %9
br label %11
84: ; preds = %11
ret void
}

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