void qtree_copy(unsigned char a[], int nx, int ny, unsigned char b[], int n) {
  int i, j, k, nx2, ny2;
  int s00, s10;
  nx2 = (nx + 1) / 2;
  ny2 = (ny + 1) / 2;
  k = ny2 * (nx2 - 1) + ny2 - 1;
  for (i = nx2 - 1; i >= 0; i--) {
    s00 = 2 * (n * i + ny2 - 1);
    for (j = ny2 - 1; j >= 0; j--) {
      b[s00] = a[k];
      k -= 1;
      s00 -= 2;
    }
  }
  for (i = 0; i < nx - 1; i += 2) {
    s00 = n * i;
    s10 = s00 + n;
    for (j = 0; j < ny - 1; j += 2) {
      switch (b[s00]) {
      case (0):
        b[s10 + 1] = 0;
        b[s10] = 0;
        b[s00 + 1] = 0;
        b[s00] = 0;
        break;
      case (1):
        b[s10 + 1] = 1;
        b[s10] = 0;
        b[s00 + 1] = 0;
        b[s00] = 0;
        break;
      case (2):
        b[s10 + 1] = 0;
        b[s10] = 1;
        b[s00 + 1] = 0;
        b[s00] = 0;
        break;
      case (3):
        b[s10 + 1] = 1;
        b[s10] = 1;
        b[s00 + 1] = 0;
        b[s00] = 0;
        break;
      case (4):
        b[s10 + 1] = 0;
        b[s10] = 0;
        b[s00 + 1] = 1;
        b[s00] = 0;
        break;
      case (5):
        b[s10 + 1] = 1;
        b[s10] = 0;
        b[s00 + 1] = 1;
        b[s00] = 0;
        break;
      case (6):
        b[s10 + 1] = 0;
        b[s10] = 1;
        b[s00 + 1] = 1;
        b[s00] = 0;
        break;
      case (7):
        b[s10 + 1] = 1;
        b[s10] = 1;
        b[s00 + 1] = 1;
        b[s00] = 0;
        break;
      case (8):
        b[s10 + 1] = 0;
        b[s10] = 0;
        b[s00 + 1] = 0;
        b[s00] = 1;
        break;
      case (9):
        b[s10 + 1] = 1;
        b[s10] = 0;
        b[s00 + 1] = 0;
        b[s00] = 1;
        break;
      case (10):
        b[s10 + 1] = 0;
        b[s10] = 1;
        b[s00 + 1] = 0;
        b[s00] = 1;
        break;
      case (11):
        b[s10 + 1] = 1;
        b[s10] = 1;
        b[s00 + 1] = 0;
        b[s00] = 1;
        break;
      case (12):
        b[s10 + 1] = 0;
        b[s10] = 0;
        b[s00 + 1] = 1;
        b[s00] = 1;
        break;
      case (13):
        b[s10 + 1] = 1;
        b[s10] = 0;
        b[s00 + 1] = 1;
        b[s00] = 1;
        break;
      case (14):
        b[s10 + 1] = 0;
        b[s10] = 1;
        b[s00 + 1] = 1;
        b[s00] = 1;
        break;
      case (15):
        b[s10 + 1] = 1;
        b[s10] = 1;
        b[s00 + 1] = 1;
        b[s00] = 1;
        break;
      }
      s00 += 2;
      s10 += 2;
    }
    if (j < ny) {
      b[s10] = (b[s00] >> 1) & 1;
      b[s00] = (b[s00] >> 3) & 1;
    }
  }
  if (i < nx) {
    s00 = n * i;
    for (j = 0; j < ny - 1; j += 2) {
      b[s00 + 1] = (b[s00] >> 2) & 1;
      b[s00] = (b[s00] >> 3) & 1;
      s00 += 2;
    }
    if (j < ny) {
      b[s00] = (b[s00] >> 3) & 1;
    }
  }
}


x86 assembly (clang, -O0):
<qtree_copy>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
add    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x0,-0x20(%rbp)
jl     11cf <qtree_copy+0xcf>
mov    -0x1c(%rbp),%eax
imul   -0x20(%rbp),%eax
add    -0x30(%rbp),%eax
sub    $0x1,%eax
shl    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jl     11bc <qtree_copy+0xbc>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x34(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    117c <qtree_copy+0x7c>
jmp    11c1 <qtree_copy+0xc1>
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
jmp    1156 <qtree_copy+0x56>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    16a8 <qtree_copy+0x5a8>
mov    -0x1c(%rbp),%eax
imul   -0x20(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x38(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    164b <qtree_copy+0x54b>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    %rax,-0x40(%rbp)
sub    $0xf,%rax
ja     162b <qtree_copy+0x52b>
mov    -0x40(%rbp),%rax
lea    0xdc9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    162b <qtree_copy+0x52b>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x38(%rbp)
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    1201 <qtree_copy+0x101>
mov    -0x24(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1695 <qtree_copy+0x595>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sar    $0x1,%eax
and    $0x1,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sar    $0x3,%eax
and    $0x1,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    169a <qtree_copy+0x59a>
mov    -0x20(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x20(%rbp)
jmp    11d6 <qtree_copy+0xd6>
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1760 <qtree_copy+0x660>
mov    -0x1c(%rbp),%eax
imul   -0x20(%rbp),%eax
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1730 <qtree_copy+0x630>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sar    $0x2,%eax
and    $0x1,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sar    $0x3,%eax
and    $0x1,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x34(%rbp)
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    16c5 <qtree_copy+0x5c5>
mov    -0x24(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    175b <qtree_copy+0x65b>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sar    $0x3,%eax
and    $0x1,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1760 <qtree_copy+0x660>
pop    %rbp
ret

x86 assembly (clang, -O2):
<qtree_copy>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
xor    %r15d,%r15d
test   %esi,%esi
mov    %r8,-0x40(%rsp)
mov    %rsi,-0x28(%rsp)
jle    130c <qtree_copy+0x20c>
lea    0x1(%rsi),%eax
shr    $0x1f,%eax
lea    (%rsi,%rax,1),%r11d
add    $0x1,%r11d
sar    %r11d
lea    0x1(%rdx),%eax
shr    $0x1f,%eax
lea    (%rdx,%rax,1),%r10d
add    $0x1,%r10d
sar    %r10d
mov    %r10d,%r12d
imul   %r11d,%r12d
add    $0xffffffff,%r12d
lea    -0x1(%r11),%eax
imul   %r8d,%eax
lea    (%r10,%r10,1),%ebp
lea    -0x2(%rbp,%rax,2),%r14d
add    %r8d,%r8d
add    $0x1,%r10d
jmp    1180 <qtree_copy+0x80>
cs nopw 0x0(%rax,%rax,1)
lea    -0x1(%r11),%eax
sub    %r8d,%r14d
cmp    $0x1,%r11d
mov    %eax,%r11d
jle    11b1 <qtree_copy+0xb1>
test   %edx,%edx
jle    1170 <qtree_copy+0x70>
movslq %r12d,%rbp
add    %rdi,%rbp
mov    %r10d,%eax
mov    %r14d,%ebx
movzbl 0x0(%rbp),%r9d
movslq %ebx,%rbx
mov    %r9b,(%rcx,%rbx,1)
add    $0xffffffffffffffff,%rbp
add    $0xffffffff,%r12d
add    $0xfffffffe,%ebx
add    $0xffffffff,%eax
cmp    $0x1,%eax
jg     1190 <qtree_copy+0x90>
jmp    1170 <qtree_copy+0x70>
mov    %r8,-0x8(%rsp)
cmp    $0x2,%esi
jl     130c <qtree_copy+0x20c>
mov    -0x28(%rsp),%rax
lea    -0x1(%rax),%r10d
lea    -0x1(%rdx),%edi
mov    %edx,%eax
and    $0xfffffffe,%eax
mov    %eax,-0x34(%rsp)
lea    0x1(%rcx),%rax
mov    %rax,-0x18(%rsp)
mov    -0x40(%rsp),%rax
mov    %eax,%esi
mov    %rsi,-0x20(%rsp)
xor    %r12d,%r12d
lea    0xe0d(%rip),%r13
lea    0xe16(%rip),%r8
lea    0xe1f(%rip),%r9
lea    0xe28(%rip),%r14
mov    %eax,%esi
xor    %r15d,%r15d
mov    %rdx,-0x10(%rsp)
mov    %r10d,-0x30(%rsp)
jmp    1237 <qtree_copy+0x137>
nopl   0x0(%rax)
add    $0x2,%r15d
mov    -0x8(%rsp),%rax
add    %eax,%esi
add    %rax,%r12
cmp    %r10d,%r15d
jge    130c <qtree_copy+0x20c>
cmp    $0x2,%edx
jl     12a0 <qtree_copy+0x1a0>
mov    %r15d,-0x2c(%rsp)
movslq %r12d,%r11
add    %rcx,%r11
movslq %esi,%r10
add    -0x18(%rsp),%r10
xor    %r15d,%r15d
jmp    1269 <qtree_copy+0x169>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x2,%r15
cmp    %edi,%r15d
jge    12c0 <qtree_copy+0x1c0>
movsbq (%r11,%r15,1),%rax
cmp    $0xf,%rax
ja     1260 <qtree_copy+0x160>
movzbl (%rax,%r13,1),%edx
movzbl (%rax,%r8,1),%ebx
movzbl (%rax,%r9,1),%ebp
movzbl (%rax,%r14,1),%eax
mov    %dl,(%r10,%r15,1)
mov    %bl,-0x1(%r10,%r15,1)
mov    %bpl,0x1(%r11,%r15,1)
mov    %al,(%r11,%r15,1)
jmp    1260 <qtree_copy+0x160>
nopl   0x0(%rax)
mov    %r15d,%eax
mov    -0x40(%rsp),%rbp
imul   %ebp,%eax
add    %eax,%ebp
xor    %ebx,%ebx
cmp    %edx,%ebx
jge    1220 <qtree_copy+0x120>
jmp    12eb <qtree_copy+0x1eb>
nopl   0x0(%rax)
mov    -0x20(%rsp),%rax
lea    (%rax,%r12,1),%ebp
lea    (%r12,%r15,1),%eax
add    %r15d,%ebp
mov    -0x34(%rsp),%ebx
mov    -0x10(%rsp),%rdx
mov    -0x2c(%rsp),%r15d
mov    -0x30(%rsp),%r10d
cmp    %edx,%ebx
jge    1220 <qtree_copy+0x120>
cltq
mov    (%rcx,%rax,1),%bl
shr    %bl
and    $0x1,%bl
movslq %ebp,%rbp
mov    %bl,(%rcx,%rbp,1)
mov    (%rcx,%rax,1),%bl
shr    $0x3,%bl
and    $0x1,%bl
mov    %bl,(%rcx,%rax,1)
jmp    1220 <qtree_copy+0x120>
cmp    -0x28(%rsp),%r15d
jge    138b <qtree_copy+0x28b>
imul   -0x40(%rsp),%r15d
xor    %eax,%eax
cmp    $0x2,%edx
jl     1378 <qtree_copy+0x278>
lea    -0x1(%rdx),%r9d
movslq %r15d,%rsi
lea    (%rcx,%rsi,1),%r10
shl    $0x20,%rsi
xor    %ebp,%ebp
movabs $0x200000000,%r8
nopl   0x0(%rax,%rax,1)
movzbl (%r10,%rbp,1),%eax
mov    %eax,%ebx
shr    $0x2,%bl
and    $0x1,%bl
mov    %rsi,%rdi
sar    $0x20,%rdi
or     $0x1,%rdi
mov    %bl,(%rcx,%rdi,1)
shr    $0x3,%al
and    $0x1,%al
mov    %al,(%r10,%rbp,1)
add    %r8,%rsi
add    $0x2,%rbp
cmp    %r9d,%ebp
jl     1340 <qtree_copy+0x240>
mov    %edx,%eax
and    $0xfffffffe,%eax
add    %ebp,%r15d
cmp    %edx,%eax
jge    138b <qtree_copy+0x28b>
movslq %r15d,%rax
mov    (%rcx,%rax,1),%dl
shr    $0x3,%dl
and    $0x1,%dl
mov    %dl,(%rcx,%rax,1)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@switch.table.qtree_copy = [16 x i8] c"\00\01\00\01\00\01\00\01\00\01\00\01\00\01\00\01"
@switch.table.qtree_copy.1 = [16 x i8] c"\00\00\01\01\00\00\01\01\00\00\01\01\00\00\01\01"
@switch.table.qtree_copy.2 = [16 x i8] c"\00\00\00\00\01\01\01\01\00\00\00\00\01\01\01\01"
@switch.table.qtree_copy.3 = [16 x i8] c"\00\00\00\00\00\00\00\00\01\01\01\01\01\01\01\01"
define void @qtree_copy(i8* nocapture %0, i32 %1, i32 %2, i8* %3, i32 %4) {
%6 = add nsw i32 %1, 1
%7 = sdiv i32 %6, 2
%8 = add nsw i32 %2, 1
%9 = sdiv i32 %8, 2
%10 = icmp sgt i32 %1, 0
br i1 %10, label %11, label %112
11: ; preds = %5
%12 = mul i32 %9, %7
%13 = add nsw i32 %12, -1
%14 = icmp sgt i32 %2, 0
br label %28
15: ; preds = %37
%16 = trunc i64 %47 to i32
br label %17
17: ; preds = %15, %28
%18 = phi i32 [ %30, %28 ], [ %16, %15 ]
%19 = icmp sgt i32 %29, 1
br i1 %19, label %28, label %20
20: ; preds = %17
%21 = add nsw i32 %1, -1
%22 = icmp sgt i32 %1, 1
br i1 %22, label %23, label %112
23: ; preds = %20
%24 = add nsw i32 %2, -1
%25 = icmp sgt i32 %2, 1
%26 = shl i32 %4, 1
%27 = and i32 %2, -2
br label %49
28: ; preds = %11, %17
%29 = phi i32 [ %7, %11 ], [ %31, %17 ]
%30 = phi i32 [ %13, %11 ], [ %18, %17 ]
%31 = add nsw i32 %29, -1
br i1 %14, label %32, label %17
32: ; preds = %28
%33 = mul nsw i32 %31, %4
%34 = add nsw i32 %33, %9
%35 = shl i32 %34, 1
%36 = sext i32 %30 to i64
br label %37
37: ; preds = %32, %37
%38 = phi i64 [ %36, %32 ], [ %47, %37 ]
%39 = phi i32 [ %35, %32 ], [ %41, %37 ]
%40 = phi i32 [ %9, %32 ], [ %42, %37 ]
%41 = add i32 %39, -2
%42 = add nsw i32 %40, -1
%43 = getelementptr inbounds i8, i8* %0, i64 %38
%44 = load i8, i8* %43
%45 = sext i32 %41 to i64
%46 = getelementptr inbounds i8, i8* %3, i64 %45
store i8 %44, i8* %46
%47 = add nsw i64 %38, -1
%48 = icmp sgt i32 %40, 1
br i1 %48, label %37, label %15
49: ; preds = %23, %107
%50 = phi i32 [ 0, %23 ], [ %111, %107 ]
%51 = phi i32 [ %4, %23 ], [ %110, %107 ]
%52 = phi i32 [ 0, %23 ], [ %108, %107 ]
%53 = mul nsw i32 %52, %4
%54 = add nsw i32 %53, %4
br i1 %25, label %55, label %91
55: ; preds = %49
%56 = sext i32 %50 to i64
%57 = sext i32 %51 to i64
br label %58
58: ; preds = %55, %83
%59 = phi i64 [ %56, %55 ], [ %84, %83 ]
%60 = phi i64 [ %57, %55 ], [ %85, %83 ]
%61 = phi i32 [ 0, %55 ], [ %86, %83 ]
%62 = getelementptr inbounds i8, i8* %3, i64 %59
%63 = load i8, i8* %62
%64 = icmp ult i8 %63, 16
br i1 %64, label %65, label %83
65: ; preds = %58
%66 = sext i8 %63 to i64
%67 = getelementptr inbounds [16 x i8], [16 x i8]* @switch.table.qtree_copy, i64 0, i64 %66
%68 = load i8, i8* %67
%69 = sext i8 %63 to i64
%70 = getelementptr inbounds [16 x i8], [16 x i8]* @switch.table.qtree_copy.1, i64 0, i64 %69
%71 = load i8, i8* %70
%72 = sext i8 %63 to i64
%73 = getelementptr inbounds [16 x i8], [16 x i8]* @switch.table.qtree_copy.2, i64 0, i64 %72
%74 = load i8, i8* %73
%75 = sext i8 %63 to i64
%76 = getelementptr inbounds [16 x i8], [16 x i8]* @switch.table.qtree_copy.3, i64 0, i64 %75
%77 = load i8, i8* %76
%78 = add nsw i64 %60, 1
%79 = getelementptr inbounds i8, i8* %3, i64 %78
store i8 %68, i8* %79
%80 = getelementptr inbounds i8, i8* %3, i64 %60
store i8 %71, i8* %80
%81 = or i64 %59, 1
%82 = getelementptr inbounds i8, i8* %3, i64 %81
store i8 %74, i8* %82
store i8 %77, i8* %62
br label %83
83: ; preds = %58, %65
%84 = add nsw i64 %59, 2
%85 = add nsw i64 %60, 2
%86 = add nuw nsw i32 %61, 2
%87 = icmp slt i32 %86, %24
br i1 %87, label %58, label %88
88: ; preds = %83
%89 = trunc i64 %84 to i32
%90 = trunc i64 %85 to i32
br label %91
91: ; preds = %88, %49
%92 = phi i32 [ 0, %49 ], [ %27, %88 ]
%93 = phi i32 [ %53, %49 ], [ %89, %88 ]
%94 = phi i32 [ %54, %49 ], [ %90, %88 ]
%95 = icmp slt i32 %92, %2
br i1 %95, label %96, label %107
96: ; preds = %91
%97 = sext i32 %93 to i64
%98 = getelementptr inbounds i8, i8* %3, i64 %97
%99 = load i8, i8* %98
%100 = lshr i8 %99, 1
%101 = and i8 %100, 1
%102 = sext i32 %94 to i64
%103 = getelementptr inbounds i8, i8* %3, i64 %102
store i8 %101, i8* %103
%104 = load i8, i8* %98
%105 = lshr i8 %104, 3
%106 = and i8 %105, 1
store i8 %106, i8* %98
br label %107
107: ; preds = %91, %96
%108 = add nuw nsw i32 %52, 2
%109 = icmp slt i32 %108, %21
%110 = add i32 %51, %26
%111 = add i32 %50, %26
br i1 %109, label %49, label %112
112: ; preds = %107, %5, %20
%113 = phi i32 [ 0, %20 ], [ 0, %5 ], [ %108, %107 ]
%114 = icmp slt i32 %113, %1
br i1 %114, label %115, label %150
115: ; preds = %112
%116 = mul i32 %113, %4
%117 = add nsw i32 %2, -1
%118 = icmp sgt i32 %2, 1
br i1 %118, label %119, label %140
119: ; preds = %115
%120 = sext i32 %116 to i64
br label %121
121: ; preds = %119, %121
%122 = phi i64 [ %120, %119 ], [ %134, %121 ]
%123 = phi i32 [ 0, %119 ], [ %135, %121 ]
%124 = getelementptr inbounds i8, i8* %3, i64 %122
%125 = load i8, i8* %124
%126 = lshr i8 %125, 2
%127 = and i8 %126, 1
%128 = shl i64 %122, 32
%129 = ashr exact i64 %128, 32
%130 = or i64 %129, 1
%131 = getelementptr inbounds i8, i8* %3, i64 %130
store i8 %127, i8* %131
%132 = lshr i8 %125, 3
%133 = and i8 %132, 1
store i8 %133, i8* %124
%134 = add nsw i64 %122, 2
%135 = add nuw nsw i32 %123, 2
%136 = icmp slt i32 %135, %117
br i1 %136, label %121, label %137
137: ; preds = %121
%138 = and i32 %2, -2
%139 = trunc i64 %134 to i32
br label %140
140: ; preds = %137, %115
%141 = phi i32 [ 0, %115 ], [ %138, %137 ]
%142 = phi i32 [ %116, %115 ], [ %139, %137 ]
%143 = icmp slt i32 %141, %2
br i1 %143, label %144, label %150
144: ; preds = %140
%145 = sext i32 %142 to i64
%146 = getelementptr inbounds i8, i8* %3, i64 %145
%147 = load i8, i8* %146
%148 = lshr i8 %147, 3
%149 = and i8 %148, 1
store i8 %149, i8* %146
br label %150
150: ; preds = %140, %144, %112
ret void
}