#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int *malloc(int);
int *__imlib_CalcApoints(int s, int d, int b1, int b2, int up) {
  int *p, i, j = 0, rv = 0;
  if (d < 0) {
    rv = 1;
    d = -d;
  }
  p = malloc(d * sizeof(int));
  if (d < (b1 + b2)) {
    if (d < b1) {
      b1 = d;
      b2 = 0;
    } else
      b2 = d - b1;
  }
  if (up) {
    int val, inc;
    for (i = 0; i < b1; i++)
      p[j++] = 0;
    if (d > (b1 + b2)) {
      int ss, dd;
      ss = s - b1 - b2;
      dd = d - b1 - b2;
      val = 0;
      inc = (ss << 16) / dd;
      for (i = 0; i < dd; i++) {
        p[j++] = (val >> 8) - ((val >> 8) & 0xffffff00);
        if (((val >> 16) + b1) >= (s - 1))
          p[j - 1] = 0;
        val += inc;
      }
    }
    for (i = 0; i < b2; i++)
      p[j++] = 0;
  } else {
    int val, inc;
    for (i = 0; i < b1; i++)
      p[j++] = (1 << (16 + 14)) + (1 << 14);
    if (d > (b1 + b2)) {
      int ss, dd, ap, Cp;
      ss = s - b1 - b2;
      dd = d - b1 - b2;
      val = 0;
      inc = (ss << 16) / dd;
      Cp = ((dd << 14) / ss) + 1;
      for (i = 0; i < dd; i++) {
        ap = ((0x100 - ((val >> 8) & 0xff)) * Cp) >> 8;
        p[j] = ap | (Cp << 16);
        j++;
        val += inc;
      }
    }
    for (i = 0; i < b2; i++)
      p[j++] = (1 << (16 + 14)) + (1 << 14);
  }
  if (rv) {
    for (i = d / 2; --i >= 0;) {
      int tmp = p[i];
      p[i] = p[d - i - 1];
      p[d - i - 1] = tmp;
    }
  }
  return p;
}


x86 assembly (clang, -O0):
<__imlib_CalcApoints>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpl   $0x0,-0x8(%rbp)
jge    114f <__imlib_CalcApoints+0x3f>
movl   $0x1,-0x2c(%rbp)
xor    %eax,%eax
sub    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
movslq -0x8(%rbp),%rax
shl    $0x2,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
cmp    %ecx,%eax
jge    119f <__imlib_CalcApoints+0x8f>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1191 <__imlib_CalcApoints+0x81>
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
jmp    119a <__imlib_CalcApoints+0x8a>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
jmp    119f <__imlib_CalcApoints+0x8f>
cmpl   $0x0,-0x14(%rbp)
je     12e1 <__imlib_CalcApoints+0x1d1>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11e3 <__imlib_CalcApoints+0xd3>
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11b0 <__imlib_CalcApoints+0xa0>
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
cmp    %ecx,%eax
jle    12a2 <__imlib_CalcApoints+0x192>
mov    -0x4(%rbp),%eax
sub    -0xc(%rbp),%eax
sub    -0x10(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
sub    -0x10(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x38(%rbp),%eax
shl    $0x10,%eax
cltd
idivl  -0x3c(%rbp)
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    129d <__imlib_CalcApoints+0x18d>
mov    -0x30(%rbp),%edx
sar    $0x8,%edx
mov    -0x30(%rbp),%eax
sar    $0x8,%eax
and    $0xffffff00,%eax
sub    %eax,%edx
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x28(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
sar    $0x10,%eax
add    -0xc(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jl     1286 <__imlib_CalcApoints+0x176>
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1227 <__imlib_CalcApoints+0x117>
jmp    12a2 <__imlib_CalcApoints+0x192>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    12dc <__imlib_CalcApoints+0x1cc>
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12a9 <__imlib_CalcApoints+0x199>
jmp    1412 <__imlib_CalcApoints+0x302>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    131b <__imlib_CalcApoints+0x20b>
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movl   $0x40004000,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12e8 <__imlib_CalcApoints+0x1d8>
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
cmp    %ecx,%eax
jle    13d3 <__imlib_CalcApoints+0x2c3>
mov    -0x4(%rbp),%eax
sub    -0xc(%rbp),%eax
sub    -0x10(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
sub    -0x10(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x48(%rbp),%eax
shl    $0x10,%eax
cltd
idivl  -0x4c(%rbp)
mov    %eax,-0x44(%rbp)
mov    -0x4c(%rbp),%eax
shl    $0xe,%eax
cltd
idivl  -0x48(%rbp)
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jge    13ce <__imlib_CalcApoints+0x2be>
mov    -0x40(%rbp),%ecx
sar    $0x8,%ecx
and    $0xff,%ecx
mov    $0x100,%eax
sub    %ecx,%eax
imul   -0x54(%rbp),%eax
sar    $0x8,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%edx
mov    -0x54(%rbp),%eax
shl    $0x10,%eax
or     %eax,%edx
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x44(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    136f <__imlib_CalcApoints+0x25f>
jmp    13d3 <__imlib_CalcApoints+0x2c3>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    140d <__imlib_CalcApoints+0x2fd>
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movl   $0x40004000,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    13da <__imlib_CalcApoints+0x2ca>
jmp    1412 <__imlib_CalcApoints+0x302>
cmpl   $0x0,-0x2c(%rbp)
je     1488 <__imlib_CalcApoints+0x378>
mov    -0x8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
cmp    $0x0,%eax
jl     1483 <__imlib_CalcApoints+0x373>
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x58(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x8(%rbp),%ecx
sub    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x58(%rbp),%edx
mov    -0x20(%rbp),%rax
mov    -0x8(%rbp),%ecx
sub    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    142a <__imlib_CalcApoints+0x31a>
jmp    1488 <__imlib_CalcApoints+0x378>
mov    -0x20(%rbp),%rax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<__imlib_CalcApoints>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r8d,%r12d
mov    %edi,0x4(%rsp)
mov    %esi,%ebp
neg    %ebp
mov    %esi,(%rsp)
cmovs  %esi,%ebp
lea    (%rcx,%rdx,1),%eax
xor    %r14d,%r14d
mov    %ebp,%r13d
sub    %edx,%r13d
cmovl  %r14d,%r13d
cmp    %eax,%ebp
cmovge %ecx,%r13d
mov    %edx,%r15d
cmovl  %ebp,%r15d
cmp    %edx,%ebp
cmovge %edx,%r15d
lea    0x0(,%rbp,4),%edi
call   1040 <malloc@plt>
mov    %rax,%rbx
test   %r12d,%r12d
je     11df <__imlib_CalcApoints+0xbf>
test   %r15d,%r15d
jle    118c <__imlib_CalcApoints+0x6c>
mov    %r15d,%edx
shl    $0x2,%rdx
mov    %rbx,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
mov    %r15d,%r14d
lea    (%r15,%r13,1),%r8d
mov    %ebp,%ecx
sub    %r8d,%ecx
mov    0x4(%rsp),%r12d
jle    1344 <__imlib_CalcApoints+0x224>
mov    %r12d,%eax
sub    %r8d,%eax
shl    $0x10,%eax
cltd
idiv   %ecx
test   %ecx,%ecx
jle    1344 <__imlib_CalcApoints+0x224>
mov    %eax,%r11d
add    $0xffffffff,%r12d
mov    %r14d,%ecx
mov    %r13d,%r10d
not    %r10d
add    %ebp,%r10d
sub    %r15d,%r10d
xor    %r9d,%r9d
cmp    $0x7,%r10d
jae    1226 <__imlib_CalcApoints+0x106>
mov    %rcx,%r14
xor    %edi,%edi
xor    %eax,%eax
jmp    1311 <__imlib_CalcApoints+0x1f1>
test   %r15d,%r15d
jle    11f4 <__imlib_CalcApoints+0xd4>
mov    %r15d,%eax
cmp    $0x8,%r15d
jae    11fc <__imlib_CalcApoints+0xdc>
xor    %ecx,%ecx
jmp    1440 <__imlib_CalcApoints+0x320>
xor    %r12d,%r12d
jmp    1453 <__imlib_CalcApoints+0x333>
mov    %eax,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x3,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x38,%rdi
jae    136b <__imlib_CalcApoints+0x24b>
xor    %edi,%edi
jmp    1405 <__imlib_CalcApoints+0x2e5>
add    $0x1,%r10
mov    %r10,%rdi
and    $0xfffffffffffffff8,%rdi
lea    (%rdi,%rcx,1),%r14
mov    %r11d,%eax
imul   %edi,%eax
movd   %r11d,%xmm0
pshufd $0x0,%xmm0,%xmm9
movdqa 0xdb2(%rip),%xmm1
pmuludq %xmm9,%xmm1
pshufd $0xe8,%xmm1,%xmm1
movdqa 0xdb0(%rip),%xmm2
pmuludq %xmm9,%xmm2
pshufd $0xe8,%xmm2,%xmm5
punpckldq %xmm1,%xmm5
pslld  $0x2,%xmm9
movd   %r15d,%xmm1
pshufd $0x0,%xmm1,%xmm1
movd   %r12d,%xmm2
pshufd $0x0,%xmm2,%xmm0
lea    (%rbx,%rcx,4),%rcx
add    $0x10,%rcx
xor    %esi,%esi
movdqa 0xd85(%rip),%xmm8
movdqa %xmm5,%xmm4
nop
paddd  %xmm9,%xmm4
movdqa %xmm5,%xmm6
psrld  $0x8,%xmm6
movdqa %xmm4,%xmm7
psrld  $0x8,%xmm7
psrad  $0x10,%xmm5
movdqa %xmm4,%xmm3
psrad  $0x10,%xmm3
paddd  %xmm1,%xmm5
paddd  %xmm1,%xmm3
movdqa %xmm0,%xmm2
pcmpgtd %xmm5,%xmm2
pand   %xmm6,%xmm2
movdqa %xmm0,%xmm5
pcmpgtd %xmm3,%xmm5
pand   %xmm7,%xmm5
pand   %xmm8,%xmm2
pand   %xmm8,%xmm5
movdqu %xmm2,-0x10(%rcx,%rsi,4)
movdqu %xmm5,(%rcx,%rsi,4)
add    $0x8,%rsi
paddd  %xmm9,%xmm4
movdqa %xmm4,%xmm5
cmp    %rsi,%rdi
jne    12a0 <__imlib_CalcApoints+0x180>
cmp    %rdi,%r10
je     1344 <__imlib_CalcApoints+0x224>
mov    %ebp,%ecx
sub    %edi,%ecx
sub    %r8d,%ecx
mov    %r14,%rsi
nopl   0x0(%rax,%rax,1)
movzbl %ah,%edi
mov    %eax,%edx
sar    $0x10,%edx
add    %r15d,%edx
cmp    %r12d,%edx
cmovge %r9d,%edi
lea    0x1(%rsi),%r14
mov    %edi,(%rbx,%rsi,4)
add    %r11d,%eax
mov    %r14,%rsi
add    $0xffffffff,%ecx
jne    1320 <__imlib_CalcApoints+0x200>
mov    (%rsp),%r15d
test   %r13d,%r13d
jle    1720 <__imlib_CalcApoints+0x600>
movslq %r14d,%rax
lea    (%rbx,%rax,4),%rdi
mov    %r13d,%edx
shl    $0x2,%rdx
xor    %esi,%esi
call   1030 <memset@plt>
jmp    1720 <__imlib_CalcApoints+0x600>
and    $0xfffffffffffffff8,%rsi
xor    %edi,%edi
movdqa 0xcb7(%rip),%xmm0
nopl   0x0(%rax)
movdqu %xmm0,(%rbx,%rdi,4)
movdqu %xmm0,0x10(%rbx,%rdi,4)
movdqu %xmm0,0x20(%rbx,%rdi,4)
movdqu %xmm0,0x30(%rbx,%rdi,4)
movdqu %xmm0,0x40(%rbx,%rdi,4)
movdqu %xmm0,0x50(%rbx,%rdi,4)
movdqu %xmm0,0x60(%rbx,%rdi,4)
movdqu %xmm0,0x70(%rbx,%rdi,4)
movdqu %xmm0,0x80(%rbx,%rdi,4)
movdqu %xmm0,0x90(%rbx,%rdi,4)
movdqu %xmm0,0xa0(%rbx,%rdi,4)
movdqu %xmm0,0xb0(%rbx,%rdi,4)
movdqu %xmm0,0xc0(%rbx,%rdi,4)
movdqu %xmm0,0xd0(%rbx,%rdi,4)
movdqu %xmm0,0xe0(%rbx,%rdi,4)
movdqu %xmm0,0xf0(%rbx,%rdi,4)
add    $0x40,%rdi
add    $0xfffffffffffffff8,%rsi
jne    1380 <__imlib_CalcApoints+0x260>
test   %rdx,%rdx
je     1434 <__imlib_CalcApoints+0x314>
lea    (%rbx,%rdi,4),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
movdqa 0xc10(%rip),%xmm0
movdqu %xmm0,-0x10(%rsi,%rdi,1)
movdqu %xmm0,(%rsi,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    1420 <__imlib_CalcApoints+0x300>
mov    %r15d,%r12d
cmp    %rax,%rcx
je     1453 <__imlib_CalcApoints+0x333>
nopl   0x0(%rax)
movl   $0x40004000,(%rbx,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1440 <__imlib_CalcApoints+0x320>
mov    %r15d,%r12d
lea    (%r15,%r13,1),%r8d
mov    %ebp,%ecx
sub    %r8d,%ecx
jle    14ac <__imlib_CalcApoints+0x38c>
mov    0x4(%rsp),%esi
sub    %r8d,%esi
mov    %esi,%eax
shl    $0x10,%eax
cltd
idiv   %ecx
mov    %eax,%r9d
mov    %ecx,%eax
shl    $0xe,%eax
cltd
idiv   %esi
test   %ecx,%ecx
jle    14ac <__imlib_CalcApoints+0x38c>
add    $0x1,%eax
mov    %eax,%r11d
shl    $0x10,%r11d
mov    %r12d,%edx
mov    %r13d,%r10d
not    %r10d
add    %ebp,%r10d
sub    %r15d,%r10d
xor    %r14d,%r14d
cmp    $0x7,%r10d
jae    14b5 <__imlib_CalcApoints+0x395>
mov    %rdx,%r12
xor    %ecx,%ecx
mov    (%rsp),%r15d
jmp    15df <__imlib_CalcApoints+0x4bf>
mov    (%rsp),%r15d
jmp    1613 <__imlib_CalcApoints+0x4f3>
add    $0x1,%r10
mov    %r10,%r14
and    $0xfffffffffffffff8,%r14
lea    (%r14,%rdx,1),%r12
mov    %r9d,%ecx
imul   %r14d,%ecx
movd   %r9d,%xmm0
pshufd $0x0,%xmm0,%xmm0
movdqa 0xb23(%rip),%xmm1
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
movdqa 0xb22(%rip),%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm7
punpckldq %xmm1,%xmm7
pslld  $0x2,%xmm0
movd   %eax,%xmm1
pshufd $0x0,%xmm1,%xmm1
movd   %r11d,%xmm2
pshufd $0x0,%xmm2,%xmm2
lea    (%rbx,%rdx,4),%rdx
add    $0x10,%rdx
xor    %edi,%edi
movdqa 0xafa(%rip),%xmm8
movdqa 0xb11(%rip),%xmm9
pshufd $0xf5,%xmm1,%xmm5
movdqa %xmm7,%xmm3
nopl   0x0(%rax,%rax,1)
paddd  %xmm0,%xmm3
psrld  $0x8,%xmm7
movdqa %xmm3,%xmm6
psrld  $0x8,%xmm6
pand   %xmm8,%xmm7
pand   %xmm8,%xmm6
movdqa %xmm9,%xmm4
psubd  %xmm7,%xmm4
movdqa %xmm9,%xmm7
psubd  %xmm6,%xmm7
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm1,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm5,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm4
pshufd $0xf5,%xmm7,%xmm6
pmuludq %xmm1,%xmm7
pshufd $0xe8,%xmm7,%xmm7
pmuludq %xmm5,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm7
psrad  $0x8,%xmm4
psrad  $0x8,%xmm7
por    %xmm2,%xmm4
por    %xmm2,%xmm7
movdqu %xmm4,-0x10(%rdx,%rdi,4)
movdqu %xmm7,(%rdx,%rdi,4)
add    $0x8,%rdi
paddd  %xmm0,%xmm3
movdqa %xmm3,%xmm7
cmp    %rdi,%r14
jne    1540 <__imlib_CalcApoints+0x420>
cmp    %r14,%r10
mov    (%rsp),%r15d
je     1613 <__imlib_CalcApoints+0x4f3>
mov    %ebp,%edx
sub    %r14d,%edx
sub    %r8d,%edx
nopw   0x0(%rax,%rax,1)
movzbl %ch,%edi
mov    $0x100,%esi
sub    %edi,%esi
imul   %eax,%esi
sar    $0x8,%esi
or     %r11d,%esi
mov    %esi,(%rbx,%r12,4)
add    $0x1,%r12
add    %r9d,%ecx
add    $0xffffffff,%edx
jne    15f0 <__imlib_CalcApoints+0x4d0>
test   %r13d,%r13d
jle    1720 <__imlib_CalcApoints+0x600>
movslq %r12d,%r8
lea    -0x1(%r13),%r9d
xor    %ecx,%ecx
cmp    $0x7,%r9d
jb     16fc <__imlib_CalcApoints+0x5dc>
add    $0x1,%r9
mov    %r9,%rcx
and    $0xfffffffffffffff8,%rcx
lea    -0x8(%rcx),%rax
mov    %rax,%rdi
shr    $0x3,%rdi
add    $0x1,%rdi
mov    %edi,%esi
and    $0x3,%esi
cmp    $0x18,%rax
jae    1658 <__imlib_CalcApoints+0x538>
xor    %eax,%eax
jmp    16b9 <__imlib_CalcApoints+0x599>
movabs $0x3ffffffffffffff8,%rax
ff ff 3f
or     $0x4,%rax
and    %rax,%rdi
lea    (%rbx,%r8,4),%rdx
add    $0x70,%rdx
xor    %eax,%eax
movdqa 0x9b5(%rip),%xmm0
nopl   0x0(%rax,%rax,1)
movdqu %xmm0,-0x70(%rdx,%rax,4)
movdqu %xmm0,-0x60(%rdx,%rax,4)
movdqu %xmm0,-0x50(%rdx,%rax,4)
movdqu %xmm0,-0x40(%rdx,%rax,4)
movdqu %xmm0,-0x30(%rdx,%rax,4)
movdqu %xmm0,-0x20(%rdx,%rax,4)
movdqu %xmm0,-0x10(%rdx,%rax,4)
movdqu %xmm0,(%rdx,%rax,4)
add    $0x20,%rax
add    $0xfffffffffffffffc,%rdi
jne    1680 <__imlib_CalcApoints+0x560>
test   %rsi,%rsi
je     16f4 <__imlib_CalcApoints+0x5d4>
add    %r8,%rax
lea    (%rbx,%rax,4),%rax
add    $0x10,%rax
shl    $0x5,%rsi
xor    %edx,%edx
movdqa 0x959(%rip),%xmm0
nopw   0x0(%rax,%rax,1)
movdqu %xmm0,-0x10(%rax,%rdx,1)
movdqu %xmm0,(%rax,%rdx,1)
add    $0x20,%rdx
cmp    %rdx,%rsi
jne    16e0 <__imlib_CalcApoints+0x5c0>
cmp    %rcx,%r9
je     1720 <__imlib_CalcApoints+0x600>
add    %rcx,%r8
lea    (%rbx,%r8,4),%rax
sub    %ecx,%r13d
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
movl   $0x40004000,(%rax,%rcx,4)
add    $0x1,%rcx
cmp    %ecx,%r13d
jne    1710 <__imlib_CalcApoints+0x5f0>
test   %r15d,%r15d
jns    175f <__imlib_CalcApoints+0x63f>
cmp    $0x2,%ebp
jb     175f <__imlib_CalcApoints+0x63f>
mov    %ebp,%ecx
shr    %ecx
lea    0x1(%rcx),%rax
sub    %ecx,%ebp
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    -0x2(%rax),%ecx
mov    (%rbx,%rcx,4),%edx
movslq %ebp,%rbp
mov    (%rbx,%rbp,4),%esi
mov    %esi,(%rbx,%rcx,4)
mov    %edx,(%rbx,%rbp,4)
add    $0xffffffffffffffff,%rax
add    $0x1,%ebp
cmp    $0x1,%rax
ja     1740 <__imlib_CalcApoints+0x620>
mov    %rbx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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