#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 */
typedef int /*<<< orphan*/ uint8_t;
typedef int uint32_t;

/* Variables and functions */
void unpack_c(int current_history_size, int history_size, uint8_t *src,
              uint8_t *dst, uint8_t *start, int left) {
  int ofs = -1;
  int len;
  uint32_t bits = 0x80000000;
  uint32_t resbits;
  left--;
  history_size--;
  if (current_history_size) {
    current_history_size -= dst - start;
    goto nextblock;
  }
copyletter:
  *dst++ = *src++;
  left--;
nextblock:
  len = -1;
get_bit:
  if (left < 0)
    return;
  if (((bits = bits & 0x7fffffff
                   ? (resbits = bits, bits + bits)
                   : (src += 4, resbits = *((uint32_t *)(src - 4)),
                      (resbits << 1) + 1)),
       resbits >> 31) == 0)
    goto copyletter;
  if (len < 0) {
    len = 1;
    if (!((bits = bits & 0x7fffffff
                      ? (resbits = bits, bits + bits)
                      : (src += 4, resbits = *((uint32_t *)(src - 4)),
                         (resbits << 1) + 1)),
          resbits >> 31)) {
      goto uselastofs;
    }
  }
  len = 2;
  {
    int total = (dst - start + current_history_size);
    ofs = 0;
    long int res = 0;
    int x = 256;
    int top = 0;
    top = ((total <= 400000) ? 60 : 50);
    res = *src++;
    while (1) {
      x += x;
      if (x >= total + top)
        break;
      if (x & 0x002FFe00 * 2)
        top = ((9 * top) >> 3);
      if (res < top) {
        goto getcode_doneit;
      }
      ofs -= top;
      total += top;
      top += top;
      res += res + ((bits = bits & 0x7fffffff
                                ? (resbits = bits, bits + bits)
                                : (src += 4, resbits = *((uint32_t *)(src - 4)),
                                   (resbits << 1) + 1)),
                    resbits >> 31);
    }
    x -= total;
    if (res >= x) {
      res += res + ((bits = bits & 0x7fffffff
                                ? (resbits = bits, bits + bits)
                                : (src += 4, resbits = *((uint32_t *)(src - 4)),
                                   (resbits << 1) + 1)),
                    resbits >> 31);
      res -= x;
    }
  getcode_doneit:
    ofs += res;
  };
  ofs++;
  if (ofs >= 5400)
    len++;
  if (ofs >= 0x060000)
    len++;
  ofs = -ofs;
uselastofs : {
  long int res = 0;
  if (((bits = bits & 0x7fffffff
                   ? (resbits = bits, bits + bits)
                   : (src += 4, resbits = *((uint32_t *)(src - 4)),
                      (resbits << 1) + 1)),
       resbits >> 31) == 0) {
    len += ((bits = bits & 0x7fffffff
                        ? (resbits = bits, bits + bits)
                        : (src += 4, resbits = *((uint32_t *)(src - 4)),
                           (resbits << 1) + 1)),
            resbits >> 31);
    goto getlen_0bit;
  }
  len += 2;
  while (1) {
    res += res + ((bits = bits & 0x7fffffff
                              ? (resbits = bits, bits + bits)
                              : (src += 4, resbits = *((uint32_t *)(src - 4)),
                                 (resbits << 1) + 1)),
                  resbits >> 31);
    if (((bits = bits & 0x7fffffff
                     ? (resbits = bits, bits + bits)
                     : (src += 4, resbits = *((uint32_t *)(src - 4)),
                        (resbits << 1) + 1)),
         resbits >> 31) == 0)
      break;
    res++;
  }
  len += res;
getlen_0bit:;
};
  left -= len;
  int ptr = dst - start + ofs;
  do {
    *dst = start[ptr & (history_size)];
    ptr++;
    dst++;
  } while (--len);
  goto get_bit;
}


x86 assembly (clang, -O0):
<unpack_c>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0xffffffff,-0x28(%rbp)
movl   $0x80000000,-0x30(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x0,-0x4(%rbp)
je     1166 <unpack_c+0x66>
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rax
sub    %rax,%rcx
sar    $0x2,%rcx
movslq -0x4(%rbp),%rax
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1196 <unpack_c+0x96>
jmp    116b <unpack_c+0x6b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%ecx
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x18(%rbp)
mov    %ecx,(%rax)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
movl   $0xffffffff,-0x2c(%rbp)
cmpl   $0x0,-0x24(%rbp)
jge    11ad <unpack_c+0xad>
add    $0x18,%rsp
pop    %rbp
ret
mov    -0x30(%rbp),%eax
and    $0x7fffffff,%eax
cmp    $0x0,%eax
je     11d2 <unpack_c+0xd2>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x58(%rbp)
jmp    11f4 <unpack_c+0xf4>
mov    -0x10(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x10(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
sar    $0x1f,%eax
cmp    $0x0,%eax
jne    120e <unpack_c+0x10e>
jmp    116b <unpack_c+0x6b>
cmpl   $0x0,-0x2c(%rbp)
jge    1285 <unpack_c+0x185>
movl   $0x1,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
and    $0x7fffffff,%eax
cmp    $0x0,%eax
je     1244 <unpack_c+0x144>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x5c(%rbp)
jmp    1266 <unpack_c+0x166>
mov    -0x10(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x10(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
sar    $0x1f,%eax
cmp    $0x0,%eax
jne    1280 <unpack_c+0x180>
jmp    14b8 <unpack_c+0x3b8>
jmp    1285 <unpack_c+0x185>
movl   $0x2,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
sar    $0x2,%rax
movslq -0x4(%rbp),%rcx
add    %rcx,%rax
mov    %eax,-0x38(%rbp)
movl   $0x0,-0x28(%rbp)
movq   $0x0,-0x40(%rbp)
movl   $0x100,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x38(%rbp),%edx
mov    $0x32,%eax
mov    $0x3c,%ecx
cmp    $0x61a80,%edx
cmovle %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x10(%rbp)
movslq (%rax),%rax
mov    %rax,-0x40(%rbp)
mov    -0x44(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    -0x38(%rbp),%ecx
add    -0x48(%rbp),%ecx
cmp    %ecx,%eax
jl     1310 <unpack_c+0x210>
jmp    13d0 <unpack_c+0x2d0>
mov    -0x44(%rbp),%eax
and    $0x5ffc00,%eax
cmp    $0x0,%eax
je     132b <unpack_c+0x22b>
imul   $0x9,-0x48(%rbp),%eax
sar    $0x3,%eax
mov    %eax,-0x48(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x48(%rbp),%rcx
cmp    %rcx,%rax
jge    1341 <unpack_c+0x241>
jmp    146d <unpack_c+0x36d>
mov    -0x48(%rbp),%ecx
mov    -0x28(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x48(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x48(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x30(%rbp),%eax
and    $0x7fffffff,%eax
cmp    $0x0,%eax
je     138b <unpack_c+0x28b>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x6c(%rbp)
jmp    13ad <unpack_c+0x2ad>
mov    -0x10(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x10(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x68(%rbp),%rax
mov    -0x6c(%rbp),%ecx
mov    %ecx,-0x30(%rbp)
mov    -0x34(%rbp),%ecx
sar    $0x1f,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
add    -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
jmp    12f1 <unpack_c+0x1f1>
mov    -0x38(%rbp),%ecx
mov    -0x44(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
cmp    %rcx,%rax
jl     1468 <unpack_c+0x368>
mov    -0x40(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x30(%rbp),%eax
and    $0x7fffffff,%eax
cmp    $0x0,%eax
je     1419 <unpack_c+0x319>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x7c(%rbp)
jmp    143b <unpack_c+0x33b>
mov    -0x10(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x10(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x78(%rbp),%rax
mov    -0x7c(%rbp),%ecx
mov    %ecx,-0x30(%rbp)
mov    -0x34(%rbp),%ecx
sar    $0x1f,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
add    -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
movslq -0x44(%rbp),%rcx
mov    -0x40(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x40(%rbp)
jmp    146d <unpack_c+0x36d>
mov    -0x40(%rbp),%rcx
movslq -0x28(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x1518,-0x28(%rbp)
jl     149a <unpack_c+0x39a>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x60000,-0x28(%rbp)
jl     14b0 <unpack_c+0x3b0>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
xor    %eax,%eax
sub    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
movq   $0x0,-0x50(%rbp)
mov    -0x30(%rbp),%eax
and    $0x7fffffff,%eax
cmp    $0x0,%eax
je     14e5 <unpack_c+0x3e5>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x80(%rbp)
jmp    1507 <unpack_c+0x407>
mov    -0x10(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x10(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
mov    -0x80(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
sar    $0x1f,%eax
cmp    $0x0,%eax
jne    1583 <unpack_c+0x483>
mov    -0x30(%rbp),%eax
and    $0x7fffffff,%eax
cmp    $0x0,%eax
je     1544 <unpack_c+0x444>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x84(%rbp)
jmp    1569 <unpack_c+0x469>
mov    -0x10(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x10(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
sar    $0x1f,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    1691 <unpack_c+0x591>
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x30(%rbp),%eax
and    $0x7fffffff,%eax
cmp    $0x0,%eax
je     15bf <unpack_c+0x4bf>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x94(%rbp)
jmp    15e4 <unpack_c+0x4e4>
mov    -0x10(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x10(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
mov    -0x90(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %ecx,-0x30(%rbp)
mov    -0x34(%rbp),%ecx
sar    $0x1f,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x30(%rbp),%eax
and    $0x7fffffff,%eax
cmp    $0x0,%eax
je     1630 <unpack_c+0x530>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x98(%rbp)
jmp    1655 <unpack_c+0x555>
mov    -0x10(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x10(%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
mov    -0x98(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
sar    $0x1f,%eax
cmp    $0x0,%eax
jne    1672 <unpack_c+0x572>
jmp    1683 <unpack_c+0x583>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    158c <unpack_c+0x48c>
mov    -0x50(%rbp),%rcx
movslq -0x2c(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x24(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
sar    $0x2,%rax
movslq -0x28(%rbp),%rcx
add    %rcx,%rax
mov    %eax,-0x54(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x54(%rbp),%ecx
and    -0x8(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x18(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x18(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmp    $0x0,%eax
jne    16b5 <unpack_c+0x5b5>
jmp    119d <unpack_c+0x9d>

x86 assembly (clang, -O2):
<unpack_c>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
add    $0xffffffff,%r9d
add    $0xffffffff,%esi
mov    $0x80000000,%r12d
mov    $0xffffffff,%r11d
xor    %r10d,%r10d
test   %edi,%edi
je     1141 <unpack_c+0x41>
mov    %rcx,%rax
sub    %r8,%rax
shr    $0x2,%rax
sub    %eax,%edi
mov    $0x80000000,%r13d
mov    $0xffffffff,%r11d
mov    %edi,%r10d
jmp    1154 <unpack_c+0x54>
mov    (%rdx),%eax
add    $0x4,%rdx
mov    %eax,(%rcx)
add    $0x4,%rcx
add    $0xffffffff,%r9d
mov    %r12d,%r13d
test   %r9d,%r9d
js     1497 <unpack_c+0x397>
mov    $0x1,%bpl
jmp    117b <unpack_c+0x7b>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %ebp,%ebp
sub    %r12d,%r9d
js     1497 <unpack_c+0x397>
test   $0x7fffffff,%r13d
je     1190 <unpack_c+0x90>
lea    0x0(%r13,%r13,1),%r12d
test   %r13d,%r13d
js     11a1 <unpack_c+0xa1>
jmp    1141 <unpack_c+0x41>
mov    (%rdx),%r13d
add    $0x10,%rdx
lea    0x1(%r13,%r13,1),%r12d
test   %r13d,%r13d
jns    1141 <unpack_c+0x41>
test   $0x1,%bpl
je     1210 <unpack_c+0x110>
test   $0x7fffffff,%r12d
je     11b6 <unpack_c+0xb6>
lea    (%r12,%r12,1),%ebp
jmp    11c4 <unpack_c+0xc4>
mov    (%rdx),%r12d
add    $0x10,%rdx
lea    (%r12,%r12,1),%ebp
add    $0x1,%ebp
mov    $0x1,%r15d
test   %r12d,%r12d
mov    %ebp,%r12d
js     1210 <unpack_c+0x110>
test   $0x7fffffff,%ebp
je     135e <unpack_c+0x25e>
lea    0x0(%rbp,%rbp,1),%r13d
test   %ebp,%ebp
js     1371 <unpack_c+0x271>
test   $0x7fffffff,%r13d
je     12f0 <unpack_c+0x1f0>
lea    0x0(%r13,%r13,1),%eax
jmp    12fc <unpack_c+0x1fc>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %rcx,%r13
sub    %r8,%r13
shr    $0x2,%r13
add    %r10d,%r13d
cmp    $0x61a81,%r13d
mov    $0x32,%ebp
mov    $0x3c,%eax
cmovl  %eax,%ebp
movslq (%rdx),%r11
add    $0x4,%rdx
lea    0x0(%rbp,%r13,1),%eax
mov    $0x200,%edi
xor    %r15d,%r15d
cmp    $0x201,%eax
jl     12c0 <unpack_c+0x1c0>
xor    %r15d,%r15d
mov    $0x100,%eax
mov    $0x200,%edi
jmp    1289 <unpack_c+0x189>
nopl   0x0(%rax,%rax,1)
mov    (%rdx),%r12d
add    $0x10,%rdx
lea    (%r12,%r12,1),%ebx
add    $0x1,%ebx
sar    $0x1f,%r12d
movslq %r12d,%rdi
lea    (%rdi,%r11,2),%r11
lea    (%rax,%rax,1),%edi
lea    0x0(%rbp,%r13,1),%r14d
mov    %ebx,%r12d
cmp    %r14d,%edi
jge    12c3 <unpack_c+0x1c3>
mov    %ebp,%ebx
lea    (%rbx,%rbx,8),%ebp
sar    $0x3,%ebp
test   $0x2ffe00,%eax
mov    %edi,%eax
cmove  %ebx,%ebp
movslq %ebp,%rdi
cmp    %rdi,%r11
jl     1328 <unpack_c+0x228>
sub    %ebp,%r15d
add    %ebp,%r13d
add    %ebp,%ebp
test   $0x7fffffff,%r12d
je     1260 <unpack_c+0x160>
lea    (%r12,%r12,1),%ebx
jmp    126e <unpack_c+0x16e>
xchg   %ax,%ax
mov    %r12d,%ebx
sub    %r13d,%edi
movslq %edi,%rax
cmp    %rax,%r11
jge    12e0 <unpack_c+0x1e0>
mov    %ebx,%r12d
jmp    1328 <unpack_c+0x228>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
test   $0x7fffffff,%ebx
je     130e <unpack_c+0x20e>
lea    (%rbx,%rbx,1),%r12d
jmp    131c <unpack_c+0x21c>
xchg   %ax,%ax
mov    (%rdx),%r13d
add    $0x10,%rdx
lea    0x1(%r13,%r13,1),%eax
sar    $0x1f,%r13d
add    %r15d,%r13d
mov    %r13d,%r12d
mov    %eax,%r13d
jmp    13e8 <unpack_c+0x2e8>
mov    (%rdx),%ebx
add    $0x10,%rdx
lea    (%rbx,%rbx,1),%r12d
add    $0x1,%r12d
sar    $0x1f,%ebx
add    %r11,%r11
sub    %rax,%r11
add    %rbx,%r11
add    %r15d,%r11d
xor    %eax,%eax
cmp    $0x1517,%r11d
setge  %al
xor    %edi,%edi
cmp    $0x5ffff,%r11d
setge  %dil
lea    (%rax,%rdi,1),%r15d
add    $0x2,%r15d
not    %r11d
mov    %r12d,%ebp
test   $0x7fffffff,%ebp
jne    11de <unpack_c+0xde>
mov    (%rdx),%ebp
add    $0x10,%rdx
lea    0x1(%rbp,%rbp,1),%r13d
test   %ebp,%ebp
jns    11eb <unpack_c+0xeb>
xor    %ebp,%ebp
jmp    1396 <unpack_c+0x296>
cs nopw 0x0(%rax,%rax,1)
nop
mov    (%rdx),%ebx
add    $0x10,%rdx
lea    (%rbx,%rbx,1),%r13d
add    $0x1,%r13d
lea    0x1(%rdi),%rbp
test   %ebx,%ebx
jns    13e0 <unpack_c+0x2e0>
test   $0x7fffffff,%r13d
je     13b0 <unpack_c+0x2b0>
lea    0x0(%r13,%r13,1),%ebx
jmp    13bc <unpack_c+0x2bc>
cs nopw 0x0(%rax,%rax,1)
mov    (%rdx),%r13d
add    $0x10,%rdx
lea    0x1(%r13,%r13,1),%ebx
sar    $0x1f,%r13d
lea    0x0(,%rbp,2),%rdi
add    %r13,%rdi
test   $0x7fffffff,%ebx
je     1380 <unpack_c+0x280>
lea    (%rbx,%rbx,1),%r13d
jmp    138e <unpack_c+0x28e>
nopl   0x0(%rax)
lea    (%r15,%rdi,1),%r12d
add    $0x2,%r12d
mov    %rcx,%rbx
sub    %r8,%rbx
shr    $0x2,%rbx
add    %r11d,%ebx
lea    -0x1(%r12),%r15d
test   $0x3,%r12b
je     1440 <unpack_c+0x340>
mov    %ebx,%r14d
mov    %r12d,%eax
and    $0x3,%eax
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
lea    (%r14,%rdi,1),%ebp
and    %esi,%ebp
movslq %ebp,%rbp
mov    (%r8,%rbp,4),%ebp
mov    %ebp,(%rcx)
add    $0x4,%rcx
add    $0x1,%rdi
cmp    %edi,%eax
jne    1410 <unpack_c+0x310>
mov    %r12d,%ebp
sub    %edi,%ebp
add    %edi,%ebx
cmp    $0x3,%r15d
jae    1450 <unpack_c+0x350>
jmp    1170 <unpack_c+0x70>
nopl   (%rax)
mov    %r12d,%ebp
cmp    $0x3,%r15d
jb     1170 <unpack_c+0x70>
nopl   (%rax)
mov    %ebx,%eax
and    %esi,%eax
cltq
mov    (%r8,%rax,4),%eax
mov    %eax,(%rcx)
lea    0x1(%rbx),%eax
and    %esi,%eax
cltq
mov    (%r8,%rax,4),%eax
mov    %eax,0x4(%rcx)
lea    0x2(%rbx),%eax
and    %esi,%eax
cltq
mov    (%r8,%rax,4),%eax
mov    %eax,0x8(%rcx)
lea    0x3(%rbx),%eax
and    %esi,%eax
cltq
mov    (%r8,%rax,4),%eax
mov    %eax,0xc(%rcx)
add    $0x10,%rcx
add    $0x4,%ebx
add    $0xfffffffc,%ebp
jne    1450 <unpack_c+0x350>
jmp    1170 <unpack_c+0x70>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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