int emboss_convolution(image, out_image, type, rows, cols, bitsperpixel)
short **image, **out_image;
int type;
long rows, cols, bitsperpixel;
{
  int a, b, i, is_present, j, sum;
  short mask[3][3], max, min;
  min = 0;
  max = 255;
  if (bitsperpixel == 4)
    max = 16;
  for (i = 0; i < rows; i++)
    for (j = 0; j < cols; j++)
      out_image[i][j] = image[i][j];
  copy_array(type, mask);
  for (i = 1; i < rows - 1; i++) {
    for (j = 1; j < cols - 1; j++) {
      sum = 0;
      for (a = -1; a < 2; a++) {
        for (b = -1; b < 2; b++) {
          sum = sum + image[i + a][j + b] * mask[a + 1][b + 1];
        }
      }
      if (sum > max)
        sum = max;
      if (sum < 0)
        sum = 0;
      out_image[i][j] = sum;
      if (type >= 7 && type <= 13)
        out_image[i][j] = out_image[i][j] / 3;
    }
  }
  return (1);
}


x86 assembly (clang, -O0):
<emboss_convolution>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movw   $0x0,-0x64(%rbp)
movw   $0xff,-0x62(%rbp)
cmpq   $0x4,-0x30(%rbp)
jne    114c <emboss_convolution+0x3c>
movw   $0x10,-0x62(%rbp)
movl   $0x0,-0x3c(%rbp)
movslq -0x3c(%rbp),%rax
cmp    -0x20(%rbp),%rax
jge    11bf <emboss_convolution+0xaf>
movl   $0x0,-0x44(%rbp)
movslq -0x44(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    11ac <emboss_convolution+0x9c>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,2),%dx
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x44(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1168 <emboss_convolution+0x58>
jmp    11b1 <emboss_convolution+0xa1>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1153 <emboss_convolution+0x43>
mov    -0x14(%rbp),%edi
lea    -0x60(%rbp),%rsi
mov    $0x0,%al
call   1030 <copy_array@plt>
movl   $0x1,-0x3c(%rbp)
movslq -0x3c(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jge    1347 <emboss_convolution+0x237>
movl   $0x1,-0x44(%rbp)
movslq -0x44(%rbp),%rax
mov    -0x28(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jge    1334 <emboss_convolution+0x224>
movl   $0x0,-0x48(%rbp)
movl   $0xffffffff,-0x34(%rbp)
cmpl   $0x2,-0x34(%rbp)
jge    1299 <emboss_convolution+0x189>
movl   $0xffffffff,-0x38(%rbp)
cmpl   $0x2,-0x38(%rbp)
jge    1286 <emboss_convolution+0x176>
mov    -0x48(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    -0x3c(%rbp),%edx
add    -0x34(%rbp),%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x44(%rbp),%edx
add    -0x38(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
mov    -0x34(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rsi
lea    -0x60(%rbp),%rdx
imul   $0x6,%rsi,%rsi
add    %rsi,%rdx
mov    -0x38(%rbp),%esi
add    $0x1,%esi
movslq %esi,%rsi
movswl (%rdx,%rsi,2),%edx
imul   %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1224 <emboss_convolution+0x114>
jmp    128b <emboss_convolution+0x17b>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1213 <emboss_convolution+0x103>
mov    -0x48(%rbp),%eax
movswl -0x62(%rbp),%ecx
cmp    %ecx,%eax
jle    12af <emboss_convolution+0x19f>
movswl -0x62(%rbp),%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x48(%rbp)
jge    12c0 <emboss_convolution+0x1b0>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x44(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
cmpl   $0x7,-0x14(%rbp)
jl     1321 <emboss_convolution+0x211>
cmpl   $0xd,-0x14(%rbp)
jg     1321 <emboss_convolution+0x211>
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x44(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x44(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    1326 <emboss_convolution+0x216>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    11f0 <emboss_convolution+0xe0>
jmp    1339 <emboss_convolution+0x229>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11d4 <emboss_convolution+0xc4>
mov    $0x1,%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<emboss_convolution>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x118,%rsp
mov    %edx,%r15d
mov    %rsi,0x58(%rsp)
mov    %rdi,0x50(%rsp)
mov    %rcx,0x28(%rsp)
test   %rcx,%rcx
jle    19f1 <emboss_convolution+0x8e1>
mov    %r8,%r12
mov    %r9,0x30(%rsp)
add    $0xfffffffffffffff0,%r8
mov    %r8,%r10
shr    $0x4,%r10
add    $0x1,%r10
mov    %r12,%r11
and    $0xfffffffffffffff0,%r11
mov    %r10d,%r9d
and    $0x3,%r9d
and    $0xfffffffffffffffc,%r10
mov    %r12d,%r13d
and    $0x3,%r13d
mov    %r9,%r14
shl    $0x5,%r14
xor    %eax,%eax
jmp    118f <emboss_convolution+0x7f>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rax
cmp    0x28(%rsp),%rax
je     1301 <emboss_convolution+0x1f1>
test   %r12,%r12
jle    1180 <emboss_convolution+0x70>
mov    0x50(%rsp),%rcx
mov    (%rcx,%rax,8),%rcx
mov    0x58(%rsp),%rdx
mov    (%rdx,%rax,8),%rdx
cmp    $0x10,%r12
jb     11be <emboss_convolution+0xae>
lea    (%rcx,%r12,2),%rdi
cmp    %rdi,%rdx
jae    1234 <emboss_convolution+0x124>
lea    (%rdx,%r12,2),%rdi
cmp    %rdi,%rcx
jae    1234 <emboss_convolution+0x124>
xor    %ebx,%ebx
mov    %rbx,%rbp
not    %rbp
add    %r12,%rbp
test   %r13,%r13
je     11f2 <emboss_convolution+0xe2>
mov    %r13,%rdi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzwl (%rcx,%rbx,2),%esi
mov    %si,(%rdx,%rbx,2)
add    $0x1,%rbx
add    $0xffffffffffffffff,%rdi
jne    11e0 <emboss_convolution+0xd0>
cmp    $0x3,%rbp
jb     1180 <emboss_convolution+0x70>
nopl   0x0(%rax,%rax,1)
movzwl (%rcx,%rbx,2),%esi
mov    %si,(%rdx,%rbx,2)
movzwl 0x2(%rcx,%rbx,2),%esi
mov    %si,0x2(%rdx,%rbx,2)
movzwl 0x4(%rcx,%rbx,2),%esi
mov    %si,0x4(%rdx,%rbx,2)
movzwl 0x6(%rcx,%rbx,2),%esi
mov    %si,0x6(%rdx,%rbx,2)
add    $0x4,%rbx
cmp    %rbx,%r12
jne    1200 <emboss_convolution+0xf0>
jmp    1180 <emboss_convolution+0x70>
cmp    $0x30,%r8
jae    123e <emboss_convolution+0x12e>
xor    %ebx,%ebx
jmp    12ac <emboss_convolution+0x19c>
mov    %r10,%rbp
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups (%rcx,%rbx,2),%xmm0
movups 0x10(%rcx,%rbx,2),%xmm1
movups %xmm0,(%rdx,%rbx,2)
movups %xmm1,0x10(%rdx,%rbx,2)
movups 0x20(%rcx,%rbx,2),%xmm0
movups 0x30(%rcx,%rbx,2),%xmm1
movups %xmm0,0x20(%rdx,%rbx,2)
movups %xmm1,0x30(%rdx,%rbx,2)
movups 0x40(%rcx,%rbx,2),%xmm0
movups 0x50(%rcx,%rbx,2),%xmm1
movups %xmm0,0x40(%rdx,%rbx,2)
movups %xmm1,0x50(%rdx,%rbx,2)
movdqu 0x60(%rcx,%rbx,2),%xmm0
movdqu 0x70(%rcx,%rbx,2),%xmm1
movdqu %xmm0,0x60(%rdx,%rbx,2)
movdqu %xmm1,0x70(%rdx,%rbx,2)
add    $0x40,%rbx
add    $0xfffffffffffffffc,%rbp
jne    1250 <emboss_convolution+0x140>
test   %r9,%r9
je     12f0 <emboss_convolution+0x1e0>
lea    (%rdx,%rbx,2),%rbp
add    $0x10,%rbp
lea    (%rcx,%rbx,2),%rdi
add    $0x10,%rdi
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqu -0x10(%rdi,%rbx,1),%xmm0
movdqu (%rdi,%rbx,1),%xmm1
movdqu %xmm0,-0x10(%rbp,%rbx,1)
movdqu %xmm1,0x0(%rbp,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r14
jne    12d0 <emboss_convolution+0x1c0>
mov    %r11,%rbx
cmp    %r12,%r11
je     1180 <emboss_convolution+0x70>
jmp    11c0 <emboss_convolution+0xb0>
mov    %rsp,%rsi
mov    %r15d,%edi
xor    %eax,%eax
call   1030 <copy_array@plt>
cmpq   $0x3,0x28(%rsp)
jl     19fe <emboss_convolution+0x8ee>
addq   $0xffffffffffffffff,0x28(%rsp)
lea    -0x1(%r12),%r14
cmpq   $0x4,0x30(%rsp)
mov    $0x10,%eax
mov    $0xff,%r11d
cmove  %eax,%r11d
add    $0xfffffff9,%r15d
xor    %eax,%eax
cmp    $0x7,%r15d
setae  %al
lea    -0x2(%r12),%r13
mov    %r13,%rcx
and    $0xfffffffffffffff8,%rcx
mov    %rcx,0x78(%rsp)
add    $0x1,%rcx
mov    %rcx,0x70(%rsp)
movd   %r11d,%xmm0
pshufd $0x0,%xmm0,%xmm8
movd   %eax,%xmm1
pshuflw $0x0,%xmm1,%xmm1
pshufd $0x0,%xmm1,%xmm14
mov    $0x1,%edi
movdqa 0xc78(%rip),%xmm5
movdqa 0xc80(%rip),%xmm0
movdqa 0xc87(%rip),%xmm12
psllw  $0xf,%xmm14
psraw  $0xf,%xmm14
mov    %r14,0x20(%rsp)
mov    %r13,0x18(%rsp)
jmp    13d3 <emboss_convolution+0x2c3>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x48(%rsp),%rax
mov    %rax,%rdi
cmp    0x28(%rsp),%rax
je     19fe <emboss_convolution+0x8ee>
cmp    $0x2,%r12
jle    18e0 <emboss_convolution+0x7d0>
lea    0x1(%rdi),%rcx
mov    0x58(%rsp),%rax
mov    (%rax,%rdi,8),%r10
mov    0x50(%rsp),%rax
mov    -0x8(%rax,%rdi,8),%rsi
mov    (%rax,%rdi,8),%rdx
mov    0x8(%rax,%rdi,8),%r8
mov    $0x1,%ebx
cmp    $0x8,%r13
mov    %rcx,0x48(%rsp)
jb     1900 <emboss_convolution+0x7f0>
lea    0x2(%r10),%rdi
lea    (%r10,%r14,2),%rbp
lea    (%rsi,%r12,2),%rax
lea    (%rdx,%r12,2),%r14
lea    (%r8,%r12,2),%r13
cmp    %rax,%rdi
setb   0x30(%rsp)
cmp    %rbp,%rsi
setb   %r9b
lea    0x12(%rsp),%rax
cmp    %rax,%rdi
setb   %cl
mov    %rsp,%rax
cmp    %rbp,%rax
setb   0x60(%rsp)
cmp    %r14,%rdi
setb   %al
cmp    %rbp,%rdx
setb   %r14b
cmp    %r13,%rdi
setb   %dil
cmp    %rbp,%r8
setb   %r13b
test   %r9b,0x30(%rsp)
jne    18ec <emboss_convolution+0x7dc>
and    0x60(%rsp),%cl
jne    18ec <emboss_convolution+0x7dc>
and    %r14b,%al
jne    18ec <emboss_convolution+0x7dc>
and    %r13b,%dil
mov    0x20(%rsp),%r14
mov    0x18(%rsp),%r13
jne    1900 <emboss_convolution+0x7f0>
movd   0x4(%rsp),%xmm3
pshuflw $0x0,%xmm3,%xmm3
pshufd $0x0,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0x30(%rsp)
pshufd $0x64,%xmm3,%xmm3
pshufhw $0xe8,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0x60(%rsp)
movzwl 0x6(%rsp),%eax
movd   %eax,%xmm3
pshuflw $0x0,%xmm3,%xmm3
pshufd $0x0,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0x100(%rsp)
pshufd $0x64,%xmm3,%xmm3
pshufhw $0xe8,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0xf0(%rsp)
movd   0x8(%rsp),%xmm3
pshuflw $0x0,%xmm3,%xmm3
pshufd $0x0,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0xe0(%rsp)
pshufd $0x64,%xmm3,%xmm3
pshufhw $0xe8,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0xd0(%rsp)
movzwl 0xa(%rsp),%eax
movd   %eax,%xmm3
pshuflw $0x0,%xmm3,%xmm3
pshufd $0x0,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0xc0(%rsp)
pshufd $0x64,%xmm3,%xmm3
pshufhw $0xe8,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0xb0(%rsp)
movd   0xc(%rsp),%xmm3
pshuflw $0x0,%xmm3,%xmm3
pshufd $0x0,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0xa0(%rsp)
pshufd $0x64,%xmm3,%xmm3
pshufhw $0xe8,%xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0x90(%rsp)
movzwl 0xe(%rsp),%eax
movd   %eax,%xmm6
pshuflw $0x0,%xmm6,%xmm6
pshufd $0x0,%xmm6,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,0x80(%rsp)
pshufd $0x64,%xmm6,%xmm6
pshufhw $0xe8,%xmm6,%xmm9
psrad  $0x10,%xmm9
movd   0x10(%rsp),%xmm6
pshuflw $0x0,%xmm6,%xmm6
pshufd $0x0,%xmm6,%xmm10
psrad  $0x10,%xmm10
pshufd $0x64,%xmm6,%xmm6
pshufhw $0xe8,%xmm6,%xmm11
psrad  $0x10,%xmm11
xor    %r9d,%r9d
mov    0x78(%rsp),%rax
cs nopw 0x0(%rax,%rax,1)
pshuflw $0x0,(%rsp),%xmm6
pshufd $0x0,%xmm6,%xmm6
movdqu (%rsi,%r9,2),%xmm7
movdqu 0x2(%rsi,%r9,2),%xmm2
movdqu 0x4(%rsi,%r9,2),%xmm1
movdqa %xmm6,%xmm4
pmulhw %xmm7,%xmm4
pmullw %xmm7,%xmm6
movdqa %xmm6,%xmm7
punpcklwd %xmm4,%xmm7
punpckhwd %xmm4,%xmm6
movdqu 0x2(%rsp),%xmm4
pshuflw $0x0,%xmm4,%xmm4
movdqa %xmm12,%xmm3
pshufd $0x0,%xmm4,%xmm12
movdqa %xmm12,%xmm4
pmulhw %xmm2,%xmm4
pmullw %xmm2,%xmm12
movdqa %xmm12,%xmm13
punpcklwd %xmm4,%xmm13
paddd  %xmm7,%xmm13
punpckhwd %xmm4,%xmm12
paddd  %xmm6,%xmm12
movdqa 0x30(%rsp),%xmm2
packssdw 0x60(%rsp),%xmm2
movdqa %xmm2,%xmm4
pmulhw %xmm1,%xmm4
pmullw %xmm1,%xmm2
movdqa %xmm2,%xmm1
punpckhwd %xmm4,%xmm1
punpcklwd %xmm4,%xmm2
movdqa 0x100(%rsp),%xmm4
packssdw 0xf0(%rsp),%xmm4
movdqu (%rdx,%r9,2),%xmm6
movdqa %xmm4,%xmm7
pmulhw %xmm6,%xmm7
pmullw %xmm6,%xmm4
movdqa %xmm4,%xmm6
punpcklwd %xmm7,%xmm6
paddd  %xmm2,%xmm6
movdqu 0x2(%rdx,%r9,2),%xmm2
punpckhwd %xmm7,%xmm4
paddd  %xmm1,%xmm4
movdqa 0xe0(%rsp),%xmm1
packssdw 0xd0(%rsp),%xmm1
movdqa %xmm1,%xmm7
pmulhw %xmm2,%xmm7
pmullw %xmm2,%xmm1
movdqa %xmm1,%xmm2
punpckhwd %xmm7,%xmm2
paddd  %xmm4,%xmm2
movdqu 0x4(%rdx,%r9,2),%xmm4
punpcklwd %xmm7,%xmm1
paddd  %xmm6,%xmm1
movdqa 0xc0(%rsp),%xmm7
packssdw 0xb0(%rsp),%xmm7
movdqa %xmm7,%xmm6
pmulhw %xmm4,%xmm6
pmullw %xmm4,%xmm7
movdqa %xmm7,%xmm15
punpcklwd %xmm6,%xmm15
paddd  %xmm1,%xmm15
paddd  %xmm13,%xmm15
punpckhwd %xmm6,%xmm7
paddd  %xmm2,%xmm7
paddd  %xmm12,%xmm7
movdqa %xmm3,%xmm12
movdqa 0xa0(%rsp),%xmm1
packssdw 0x90(%rsp),%xmm1
movdqu (%r8,%r9,2),%xmm2
movdqu 0x2(%r8,%r9,2),%xmm4
movdqa %xmm1,%xmm6
pmulhw %xmm2,%xmm6
pmullw %xmm2,%xmm1
movdqa %xmm1,%xmm2
punpckhwd %xmm6,%xmm2
punpcklwd %xmm6,%xmm1
movdqa %xmm5,%xmm3
movdqa 0x80(%rsp),%xmm5
packssdw %xmm9,%xmm5
movdqa %xmm5,%xmm6
pmulhw %xmm4,%xmm6
pmullw %xmm4,%xmm5
movdqa %xmm5,%xmm4
punpcklwd %xmm6,%xmm4
paddd  %xmm1,%xmm4
movdqu 0x4(%r8,%r9,2),%xmm1
punpckhwd %xmm6,%xmm5
paddd  %xmm2,%xmm5
movdqa %xmm10,%xmm6
packssdw %xmm11,%xmm6
movdqa %xmm6,%xmm2
pmulhw %xmm1,%xmm2
pmullw %xmm1,%xmm6
movdqa %xmm6,%xmm1
punpckhwd %xmm2,%xmm1
paddd  %xmm5,%xmm1
movdqa %xmm3,%xmm5
paddd  %xmm7,%xmm1
punpcklwd %xmm2,%xmm6
paddd  %xmm4,%xmm6
pxor   %xmm4,%xmm4
paddd  %xmm15,%xmm6
movdqa %xmm8,%xmm2
pcmpgtd %xmm1,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm8,%xmm2
por    %xmm1,%xmm2
movdqa %xmm8,%xmm1
pcmpgtd %xmm6,%xmm1
pand   %xmm1,%xmm6
pandn  %xmm8,%xmm1
por    %xmm6,%xmm1
movdqa %xmm1,%xmm7
pcmpgtd %xmm4,%xmm7
pand   %xmm1,%xmm7
movdqa %xmm2,%xmm1
pcmpgtd %xmm4,%xmm1
pand   %xmm2,%xmm1
movdqa %xmm1,%xmm2
pslld  $0x10,%xmm2
psrad  $0x10,%xmm2
movdqa %xmm7,%xmm6
pslld  $0x10,%xmm6
psrad  $0x10,%xmm6
packssdw %xmm2,%xmm6
pand   %xmm3,%xmm1
pand   %xmm3,%xmm7
packuswb %xmm1,%xmm7
packuswb %xmm7,%xmm7
punpcklbw %xmm4,%xmm7
pmullw %xmm0,%xmm7
psrlw  $0x8,%xmm7
packuswb %xmm7,%xmm7
psrlw  $0x1,%xmm7
pand   %xmm12,%xmm7
punpcklbw %xmm4,%xmm7
movdqa %xmm14,%xmm1
pandn  %xmm7,%xmm1
pand   %xmm14,%xmm6
por    %xmm6,%xmm1
movdqu %xmm1,0x2(%r10,%r9,2)
add    $0x8,%r9
cmp    %r9,%rax
jne    1610 <emboss_convolution+0x500>
mov    0x70(%rsp),%rbx
cmp    %rax,%r13
je     13c0 <emboss_convolution+0x2b0>
jmp    1900 <emboss_convolution+0x7f0>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rdi
mov    %rdi,%rax
jmp    13c5 <emboss_convolution+0x2b5>
mov    0x20(%rsp),%r14
mov    0x18(%rsp),%r13
cs nopw 0x0(%rax,%rax,1)
lea    (%r10,%rbx,2),%r9
lea    (%r8,%rbx,2),%rdi
lea    (%rdx,%rbx,2),%rdx
lea    (%rsi,%rbx,2),%rsi
mov    %r14,%r8
sub    %rbx,%r8
xor    %ebx,%ebx
jmp    1932 <emboss_convolution+0x822>
nopw   0x0(%rax,%rax,1)
mov    %ax,(%r9,%rbx,2)
add    $0x1,%rbx
cmp    %rbx,%r8
je     13c0 <emboss_convolution+0x2b0>
movswl -0x2(%rsi,%rbx,2),%eax
movswl (%rsp),%ecx
imul   %eax,%ecx
movswl (%rsi,%rbx,2),%eax
movswl 0x2(%rsp),%ebp
imul   %eax,%ebp
add    %ecx,%ebp
movswl 0x2(%rsi,%rbx,2),%eax
movswl 0x4(%rsp),%ecx
imul   %eax,%ecx
add    %ebp,%ecx
movswl -0x2(%rdx,%rbx,2),%eax
movswl 0x6(%rsp),%ebp
imul   %eax,%ebp
add    %ecx,%ebp
movswl (%rdx,%rbx,2),%eax
movswl 0x8(%rsp),%ecx
imul   %eax,%ecx
add    %ebp,%ecx
movswl 0x2(%rdx,%rbx,2),%eax
movswl 0xa(%rsp),%ebp
imul   %eax,%ebp
add    %ecx,%ebp
movswl -0x2(%rdi,%rbx,2),%eax
movswl 0xc(%rsp),%ecx
imul   %eax,%ecx
add    %ebp,%ecx
movswl (%rdi,%rbx,2),%eax
movswl 0xe(%rsp),%ebp
imul   %eax,%ebp
add    %ecx,%ebp
movswl 0x2(%rdi,%rbx,2),%eax
movswl 0x10(%rsp),%ecx
imul   %eax,%ecx
add    %ebp,%ecx
mov    %r11d,%eax
cmp    %r11d,%ecx
jg     19d0 <emboss_convolution+0x8c0>
mov    %ecx,%eax
test   %eax,%eax
js     19d4 <emboss_convolution+0x8c4>
cmp    $0x6,%r15d
ja     1920 <emboss_convolution+0x810>
jmp    19e0 <emboss_convolution+0x8d0>
nopl   (%rax)
test   %eax,%eax
jns    19c1 <emboss_convolution+0x8b1>
xor    %eax,%eax
cmp    $0x6,%r15d
ja     1920 <emboss_convolution+0x810>
movzbl %al,%eax
imul   $0xab,%eax,%eax
shr    $0x9,%eax
jmp    1920 <emboss_convolution+0x810>
mov    %rsp,%rsi
mov    %r15d,%edi
xor    %eax,%eax
call   1030 <copy_array@plt>
mov    $0x1,%eax
add    $0x118,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @emboss_convolution(i16** %0, i16** %1, i32 %2, i64 %3, i64 %4, i64 %5) {
%7 = alloca i16**
%8 = alloca i16**
%9 = alloca i32
%10 = alloca i64
%11 = alloca i64
%12 = alloca i64
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca [3 x [3 x i16]]
%20 = alloca i16
%21 = alloca i16
store i16** %0, i16*** %7
store i16** %1, i16*** %8
store i32 %2, i32* %9
store i64 %3, i64* %10
store i64 %4, i64* %11
store i64 %5, i64* %12
store i16 0, i16* %21
store i16 255, i16* %20
%22 = load i64, i64* %12
%23 = icmp eq i64 %22, 4
br i1 %23, label %24, label %25
24: ; preds = %6
store i16 16, i16* %20
br label %25
25: ; preds = %24, %6
store i32 0, i32* %15
br label %26
26: ; preds = %59, %25
%27 = load i32, i32* %15
%28 = sext i32 %27 to i64
%29 = load i64, i64* %10
%30 = icmp slt i64 %28, %29
br i1 %30, label %31, label %62
31: ; preds = %26
store i32 0, i32* %17
br label %32
32: ; preds = %55, %31
%33 = load i32, i32* %17
%34 = sext i32 %33 to i64
%35 = load i64, i64* %11
%36 = icmp slt i64 %34, %35
br i1 %36, label %37, label %58
37: ; preds = %32
%38 = load i16**, i16*** %7
%39 = load i32, i32* %15
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds i16*, i16** %38, i64 %40
%42 = load i16*, i16** %41
%43 = load i32, i32* %17
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i16, i16* %42, i64 %44
%46 = load i16, i16* %45
%47 = load i16**, i16*** %8
%48 = load i32, i32* %15
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds i16*, i16** %47, i64 %49
%51 = load i16*, i16** %50
%52 = load i32, i32* %17
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i16, i16* %51, i64 %53
store i16 %46, i16* %54
br label %55
55: ; preds = %37
%56 = load i32, i32* %17
%57 = add nsw i32 %56, 1
store i32 %57, i32* %17
br label %32
58: ; preds = %32
br label %59
59: ; preds = %58
%60 = load i32, i32* %15
%61 = add nsw i32 %60, 1
store i32 %61, i32* %15
br label %26
62: ; preds = %26
%63 = load i32, i32* %9
%64 = getelementptr inbounds [3 x [3 x i16]], [3 x [3 x i16]]* %19, i64 0, i64 0
%65 = call i32 (i32, [3 x i16]*, ...) bitcast (i32 (...)* @copy_array to i32 (i32, [3 x i16]*, ...)*)(i32 %63, [3 x i16]* %64)
store i32 1, i32* %15
br label %66
66: ; preds = %176, %62
%67 = load i32, i32* %15
%68 = sext i32 %67 to i64
%69 = load i64, i64* %10
%70 = sub nsw i64 %69, 1
%71 = icmp slt i64 %68, %70
br i1 %71, label %72, label %179
72: ; preds = %66
store i32 1, i32* %17
br label %73
73: ; preds = %172, %72
%74 = load i32, i32* %17
%75 = sext i32 %74 to i64
%76 = load i64, i64* %11
%77 = sub nsw i64 %76, 1
%78 = icmp slt i64 %75, %77
br i1 %78, label %79, label %175
79: ; preds = %73
store i32 0, i32* %18
store i32 -1, i32* %13
br label %80
80: ; preds = %119, %79
%81 = load i32, i32* %13
%82 = icmp slt i32 %81, 2
br i1 %82, label %83, label %122
83: ; preds = %80
store i32 -1, i32* %14
br label %84
84: ; preds = %115, %83
%85 = load i32, i32* %14
%86 = icmp slt i32 %85, 2
br i1 %86, label %87, label %118
87: ; preds = %84
%88 = load i32, i32* %18
%89 = load i16**, i16*** %7
%90 = load i32, i32* %15
%91 = load i32, i32* %13
%92 = add nsw i32 %90, %91
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i16*, i16** %89, i64 %93
%95 = load i16*, i16** %94
%96 = load i32, i32* %17
%97 = load i32, i32* %14
%98 = add nsw i32 %96, %97
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i16, i16* %95, i64 %99
%101 = load i16, i16* %100
%102 = sext i16 %101 to i32
%103 = load i32, i32* %13
%104 = add nsw i32 %103, 1
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [3 x [3 x i16]], [3 x [3 x i16]]* %19, i64 0, i64 %105
%107 = load i32, i32* %14
%108 = add nsw i32 %107, 1
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds [3 x i16], [3 x i16]* %106, i64 0, i64 %109
%111 = load i16, i16* %110
%112 = sext i16 %111 to i32
%113 = mul nsw i32 %102, %112
%114 = add nsw i32 %88, %113
store i32 %114, i32* %18
br label %115
115: ; preds = %87
%116 = load i32, i32* %14
%117 = add nsw i32 %116, 1
store i32 %117, i32* %14
br label %84
118: ; preds = %84
br label %119
119: ; preds = %118
%120 = load i32, i32* %13
%121 = add nsw i32 %120, 1
store i32 %121, i32* %13
br label %80
122: ; preds = %80
%123 = load i32, i32* %18
%124 = load i16, i16* %20
%125 = sext i16 %124 to i32
%126 = icmp sgt i32 %123, %125
br i1 %126, label %127, label %130
127: ; preds = %122
%128 = load i16, i16* %20
%129 = sext i16 %128 to i32
store i32 %129, i32* %18
br label %130
130: ; preds = %127, %122
%131 = load i32, i32* %18
%132 = icmp slt i32 %131, 0
br i1 %132, label %133, label %134
133: ; preds = %130
store i32 0, i32* %18
br label %134
134: ; preds = %133, %130
%135 = load i32, i32* %18
%136 = trunc i32 %135 to i16
%137 = load i16**, i16*** %8
%138 = load i32, i32* %15
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds i16*, i16** %137, i64 %139
%141 = load i16*, i16** %140
%142 = load i32, i32* %17
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds i16, i16* %141, i64 %143
store i16 %136, i16* %144
%145 = load i32, i32* %9
%146 = icmp sge i32 %145, 7
br i1 %146, label %147, label %171
147: ; preds = %134
%148 = load i32, i32* %9
%149 = icmp sle i32 %148, 13
br i1 %149, label %150, label %171
150: ; preds = %147
%151 = load i16**, i16*** %8
%152 = load i32, i32* %15
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds i16*, i16** %151, i64 %153
%155 = load i16*, i16** %154
%156 = load i32, i32* %17
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds i16, i16* %155, i64 %157
%159 = load i16, i16* %158
%160 = sext i16 %159 to i32
%161 = sdiv i32 %160, 3
%162 = trunc i32 %161 to i16
%163 = load i16**, i16*** %8
%164 = load i32, i32* %15
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds i16*, i16** %163, i64 %165
%167 = load i16*, i16** %166
%168 = load i32, i32* %17
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i16, i16* %167, i64 %169
store i16 %162, i16* %170
br label %171
171: ; preds = %150, %147, %134
br label %172
172: ; preds = %171
%173 = load i32, i32* %17
%174 = add nsw i32 %173, 1
store i32 %174, i32* %17
br label %73
175: ; preds = %73
br label %176
176: ; preds = %175
%177 = load i32, i32* %15
%178 = add nsw i32 %177, 1
store i32 %178, i32* %15
br label %66
179: ; preds = %66
ret i32 1
}

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