#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 /*<<< orphan*/ expand_seed(unsigned char *, unsigned char const *);
int /*<<< orphan*/ hash_2n_n_mask(unsigned char *, unsigned char *,
                                  unsigned char const *);
int /*<<< orphan*/ hash_n_n_8x(unsigned char *, unsigned char *);
int /*<<< orphan*/ loop_hash_2n_n_mask_8x(unsigned char *, unsigned char *, int,
                                          unsigned char const *);
int horst_sign(unsigned char *sig, unsigned char pk[32],
               unsigned long long *sigbytes, const unsigned char *m,
               unsigned long long mlen, const unsigned char seed[32],
               const unsigned char masks[2 * 16 * 32],
               const unsigned char m_hash[64]) {
  unsigned char sk[(1 << 16) * 32];
  unsigned int idx;
  int i, j, k;
  int sigpos = 0;
  unsigned char tree[(2 * (1 << 16) - 1) * 32];
  expand_seed(sk, seed);
  for (i = 0; i < (1 << 16); i += 8)
    hash_n_n_8x(tree + ((1 << 16) - 1 + i) * 32, sk + i * 32);
  loop_hash_2n_n_mask_8x(tree + (32767) * 32, tree + (65535) * 32, 4096, masks);
  loop_hash_2n_n_mask_8x(tree + (16383) * 32, tree + (32767) * 32, 2048,
                         masks + 2 * 32);
  loop_hash_2n_n_mask_8x(tree + (8191) * 32, tree + (16383) * 32, 1024,
                         masks + 4 * 32);
  loop_hash_2n_n_mask_8x(tree + (4095) * 32, tree + (8191) * 32, 512,
                         masks + 6 * 32);
  loop_hash_2n_n_mask_8x(tree + (2047) * 32, tree + (4095) * 32, 256,
                         masks + 8 * 32);
  loop_hash_2n_n_mask_8x(tree + (1023) * 32, tree + (2047) * 32, 128,
                         masks + 10 * 32);
  loop_hash_2n_n_mask_8x(tree + (511) * 32, tree + (1023) * 32, 64,
                         masks + 12 * 32);
  loop_hash_2n_n_mask_8x(tree + (255) * 32, tree + (511) * 32, 32,
                         masks + 14 * 32);
  loop_hash_2n_n_mask_8x(tree + (127) * 32, tree + (255) * 32, 16,
                         masks + 16 * 32);
  loop_hash_2n_n_mask_8x(tree + (63) * 32, tree + (127) * 32, 8,
                         masks + 18 * 32);
  loop_hash_2n_n_mask_8x(tree + (31) * 32, tree + (63) * 32, 4,
                         masks + 20 * 32);
  loop_hash_2n_n_mask_8x(tree + (15) * 32, tree + (31) * 32, 2,
                         masks + 22 * 32);
  loop_hash_2n_n_mask_8x(tree + (7) * 32, tree + (15) * 32, 1, masks + 24 * 32);
  for (j = 0; j < 4; j++)
    hash_2n_n_mask(tree + (3 + j) * 32, tree + (7 + 2 * j) * 32,
                   masks + 26 * 32);
  for (j = 0; j < 2; j++)
    hash_2n_n_mask(tree + (1 + j) * 32, tree + (3 + 2 * j) * 32,
                   masks + 28 * 32);
  hash_2n_n_mask(tree + 0 * 32, tree + 1 * 32, masks + 30 * 32);
  for (j = 63 * 32; j < 127 * 32; j++)
    sig[sigpos++] = tree[j];
  for (i = 0; i < 32; i++) {
    idx = m_hash[2 * i] + (m_hash[2 * i + 1] << 8);
    for (k = 0; k < 32; k++)
      sig[sigpos++] = sk[idx * 32 + k];
    idx += ((1 << 16) - 1);
    for (j = 0; j < 16 - 6; j++) {
      idx = (idx & 1) ? idx + 1 : idx - 1;
      for (k = 0; k < 32; k++)
        sig[sigpos++] = tree[idx * 32 + k];
      idx = (idx - 1) / 2;
    }
  }
  for (i = 0; i < 32; i++)
    pk[i] = tree[i];
  *sigbytes = (64 * 32 + (((16 - 6) * 32) + 32) * 32);
  return 0;
}


x86 assembly (clang, -O0):
<horst_sign>:
push   %rbp
mov    %rsp,%rbp
sub    $0x600040,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x200044(%rbp)
lea    -0x200030(%rbp),%rdi
mov    -0x30(%rbp),%rsi
call   1030 <expand_seed@plt>
movl   $0x0,-0x200038(%rbp)
cmpl   $0x10000,-0x200038(%rbp)
jge    11e7 <horst_sign+0xa7>
lea    -0x600030(%rbp),%rdi
mov    -0x200038(%rbp),%eax
add    $0xffff,%eax
shl    $0x5,%eax
cltq
add    %rax,%rdi
lea    -0x200030(%rbp),%rsi
mov    -0x200038(%rbp),%eax
shl    $0x5,%eax
cltq
add    %rax,%rsi
call   1040 <hash_n_n_8x@plt>
mov    -0x200038(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x200038(%rbp)
jmp    118f <horst_sign+0x4f>
lea    -0x600030(%rbp),%rdi
add    $0xfffe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x1fffe0,%rsi
mov    0x10(%rbp),%rcx
mov    $0x1000,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0x7ffe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0xfffe0,%rsi
mov    0x10(%rbp),%rcx
add    $0x40,%rcx
mov    $0x800,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0x3ffe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x7ffe0,%rsi
mov    0x10(%rbp),%rcx
add    $0x80,%rcx
mov    $0x400,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0x1ffe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x3ffe0,%rsi
mov    0x10(%rbp),%rcx
add    $0xc0,%rcx
mov    $0x200,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0xffe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x1ffe0,%rsi
mov    0x10(%rbp),%rcx
add    $0x100,%rcx
mov    $0x100,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0x7fe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0xffe0,%rsi
mov    0x10(%rbp),%rcx
add    $0x140,%rcx
mov    $0x80,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0x3fe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x7fe0,%rsi
mov    0x10(%rbp),%rcx
add    $0x180,%rcx
mov    $0x40,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0x1fe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x3fe0,%rsi
mov    0x10(%rbp),%rcx
add    $0x1c0,%rcx
mov    $0x20,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0xfe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x1fe0,%rsi
mov    0x10(%rbp),%rcx
add    $0x200,%rcx
mov    $0x10,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0x7e0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0xfe0,%rsi
mov    0x10(%rbp),%rcx
add    $0x240,%rcx
mov    $0x8,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0x3e0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x7e0,%rsi
mov    0x10(%rbp),%rcx
add    $0x280,%rcx
mov    $0x4,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0x1e0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x3e0,%rsi
mov    0x10(%rbp),%rcx
add    $0x2c0,%rcx
mov    $0x2,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    -0x600030(%rbp),%rdi
add    $0xe0,%rdi
lea    -0x600030(%rbp),%rsi
add    $0x1e0,%rsi
mov    0x10(%rbp),%rcx
add    $0x300,%rcx
mov    $0x1,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
movl   $0x0,-0x20003c(%rbp)
cmpl   $0x4,-0x20003c(%rbp)
jge    14c8 <horst_sign+0x388>
lea    -0x600030(%rbp),%rdi
mov    -0x20003c(%rbp),%eax
add    $0x3,%eax
shl    $0x5,%eax
cltq
add    %rax,%rdi
lea    -0x600030(%rbp),%rsi
mov    -0x20003c(%rbp),%eax
shl    $0x1,%eax
add    $0x7,%eax
shl    $0x5,%eax
cltq
add    %rax,%rsi
mov    0x10(%rbp),%rdx
add    $0x340,%rdx
call   1060 <hash_2n_n_mask@plt>
mov    -0x20003c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20003c(%rbp)
jmp    1464 <horst_sign+0x324>
movl   $0x0,-0x20003c(%rbp)
cmpl   $0x2,-0x20003c(%rbp)
jge    1536 <horst_sign+0x3f6>
lea    -0x600030(%rbp),%rdi
mov    -0x20003c(%rbp),%eax
add    $0x1,%eax
shl    $0x5,%eax
cltq
add    %rax,%rdi
lea    -0x600030(%rbp),%rsi
mov    -0x20003c(%rbp),%eax
shl    $0x1,%eax
add    $0x3,%eax
shl    $0x5,%eax
cltq
add    %rax,%rsi
mov    0x10(%rbp),%rdx
add    $0x380,%rdx
call   1060 <hash_2n_n_mask@plt>
mov    -0x20003c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20003c(%rbp)
jmp    14d2 <horst_sign+0x392>
lea    -0x600030(%rbp),%rdi
lea    -0x600030(%rbp),%rsi
add    $0x20,%rsi
mov    0x10(%rbp),%rdx
add    $0x3c0,%rdx
call   1060 <hash_2n_n_mask@plt>
movl   $0x7e0,-0x20003c(%rbp)
cmpl   $0xfe0,-0x20003c(%rbp)
jge    15af <horst_sign+0x46f>
movslq -0x20003c(%rbp),%rax
mov    -0x600030(%rbp,%rax,1),%dl
mov    -0x8(%rbp),%rax
mov    -0x200044(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x200044(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20003c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20003c(%rbp)
jmp    1562 <horst_sign+0x422>
movl   $0x0,-0x200038(%rbp)
cmpl   $0x20,-0x200038(%rbp)
jge    1760 <horst_sign+0x620>
mov    0x18(%rbp),%rax
mov    -0x200038(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    0x18(%rbp),%rcx
mov    -0x200038(%rbp),%edx
shl    $0x1,%edx
add    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
shl    $0x8,%ecx
add    %ecx,%eax
mov    %eax,-0x200034(%rbp)
movl   $0x0,-0x200040(%rbp)
cmpl   $0x20,-0x200040(%rbp)
jge    165a <horst_sign+0x51a>
mov    -0x200034(%rbp),%eax
shl    $0x5,%eax
add    -0x200040(%rbp),%eax
mov    %eax,%eax
mov    -0x200030(%rbp,%rax,1),%dl
mov    -0x8(%rbp),%rax
mov    -0x200044(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x200044(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x200040(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x200040(%rbp)
jmp    1606 <horst_sign+0x4c6>
mov    -0x200034(%rbp),%eax
add    $0xffff,%eax
mov    %eax,-0x200034(%rbp)
movl   $0x0,-0x20003c(%rbp)
cmpl   $0xa,-0x20003c(%rbp)
jge    1747 <horst_sign+0x607>
mov    -0x200034(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     16a8 <horst_sign+0x568>
mov    -0x200034(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x600034(%rbp)
jmp    16b7 <horst_sign+0x577>
mov    -0x200034(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x600034(%rbp)
mov    -0x600034(%rbp),%eax
mov    %eax,-0x200034(%rbp)
movl   $0x0,-0x200040(%rbp)
cmpl   $0x20,-0x200040(%rbp)
jge    1721 <horst_sign+0x5e1>
mov    -0x200034(%rbp),%eax
shl    $0x5,%eax
add    -0x200040(%rbp),%eax
mov    %eax,%eax
mov    -0x600030(%rbp,%rax,1),%dl
mov    -0x8(%rbp),%rax
mov    -0x200044(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x200044(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x200040(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x200040(%rbp)
jmp    16cd <horst_sign+0x58d>
mov    -0x200034(%rbp),%eax
sub    $0x1,%eax
shr    $0x1,%eax
mov    %eax,-0x200034(%rbp)
mov    -0x20003c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20003c(%rbp)
jmp    1675 <horst_sign+0x535>
jmp    174c <horst_sign+0x60c>
mov    -0x200038(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x200038(%rbp)
jmp    15b9 <horst_sign+0x479>
movl   $0x0,-0x200038(%rbp)
cmpl   $0x20,-0x200038(%rbp)
jge    17a7 <horst_sign+0x667>
movslq -0x200038(%rbp),%rax
mov    -0x600030(%rbp,%rax,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x200038(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x200038(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x200038(%rbp)
jmp    176a <horst_sign+0x62a>
mov    -0x18(%rbp),%rax
movq   $0x3400,(%rax)
xor    %eax,%eax
add    $0x600040,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<horst_sign>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x5ffff8,%rsp
mov    %rdx,0x8(%rsp)
mov    %rsi,(%rsp)
mov    %rdi,%r14
mov    0x600030(%rsp),%r12
lea    0x3ffff0(%rsp),%r15
mov    %r15,%rdi
mov    %r9,%rsi
call   1030 <expand_seed@plt>
lea    0x1ffff0(%rsp),%rbx
mov    $0xfffffffffffffff8,%rbp
nopw   0x0(%rax,%rax,1)
mov    %rbx,%rdi
mov    %r15,%rsi
call   1040 <hash_n_n_8x@plt>
add    $0x8,%rbp
add    $0x100,%r15
add    $0x100,%rbx
cmp    $0xfff8,%rbp
jb     11a0 <horst_sign+0x50>
lea    0xffff0(%rsp),%rbx
lea    0x1ffff0(%rsp),%rsi
mov    %rbx,%rdi
mov    $0x1000,%edx
mov    %r12,%rcx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x7fff0(%rsp),%rbp
lea    0x40(%r12),%rcx
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    $0x800,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x3fff0(%rsp),%rbx
lea    0x80(%r12),%rcx
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    $0x400,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x1fff0(%rsp),%rbp
lea    0xc0(%r12),%rcx
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    $0x200,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0xfff0(%rsp),%rbx
lea    0x100(%r12),%rcx
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    $0x100,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x7ff0(%rsp),%rbp
lea    0x140(%r12),%rcx
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    $0x80,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x3ff0(%rsp),%rbx
lea    0x180(%r12),%rcx
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    $0x40,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x1ff0(%rsp),%rbp
lea    0x1c0(%r12),%rcx
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    $0x20,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0xff0(%rsp),%rbx
lea    0x200(%r12),%rcx
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    $0x10,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x7f0(%rsp),%rbp
lea    0x240(%r12),%rcx
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    $0x8,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x3f0(%rsp),%rbx
lea    0x280(%r12),%rcx
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    $0x4,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x1f0(%rsp),%rbp
lea    0x2c0(%r12),%rcx
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    $0x2,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0xf0(%rsp),%rbx
lea    0x300(%r12),%rcx
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    $0x1,%edx
call   1050 <loop_hash_2n_n_mask_8x@plt>
lea    0x340(%r12),%r15
lea    0x70(%rsp),%rdi
mov    %rbx,%rsi
mov    %r15,%rdx
call   1070 <hash_2n_n_mask@plt>
lea    0x90(%rsp),%rdi
lea    0x130(%rsp),%rsi
mov    %r15,%rdx
call   1070 <hash_2n_n_mask@plt>
lea    0xb0(%rsp),%r13
lea    0x170(%rsp),%rsi
mov    %r13,%rdi
mov    %r15,%rdx
call   1070 <hash_2n_n_mask@plt>
lea    0xd0(%rsp),%rdi
lea    0x1b0(%rsp),%rsi
mov    %r15,%rdx
call   1070 <hash_2n_n_mask@plt>
lea    0x380(%r12),%rbp
lea    0x30(%rsp),%rbx
mov    %rbx,%rdi
lea    0x70(%rsp),%rsi
mov    %rbp,%rdx
call   1070 <hash_2n_n_mask@plt>
lea    0x50(%rsp),%rdi
mov    %r13,%rsi
mov    %rbp,%rdx
call   1070 <hash_2n_n_mask@plt>
add    $0x3c0,%r12
lea    0x10(%rsp),%rdi
mov    %rbx,%rsi
mov    %r12,%rdx
call   1070 <hash_2n_n_mask@plt>
mov    $0x800,%edx
mov    %r14,%rdi
lea    0x7f0(%rsp),%rsi
call   1060 <memcpy@plt>
lea    0x800(%r14),%rax
xor    %ecx,%ecx
movabs $0x90000000000,%r11
movabs $0x92000000000,%r15
movabs $0x94000000000,%r12
movabs $0x16000000000,%rdx
xor    %r13d,%r13d
mov    0x600038(%rsp),%r10
nopl   0x0(%rax,%rax,1)
movzwl (%r10,%r13,2),%r9d
mov    %r9,%r8
shl    $0x5,%r8
movups 0x3ffff0(%rsp,%r8,1),%xmm0
movups 0x400000(%rsp,%r8,1),%xmm1
lea    0xffff(%r9),%esi
and    $0x1,%esi
cmp    $0x1,%esi
sbb    %esi,%esi
movups %xmm1,0x10(%rax)
movups %xmm0,(%rax)
or     $0x1,%esi
lea    (%rsi,%r9,1),%edi
add    $0xffff,%edi
shl    $0x5,%edi
movabs $0x82000000000,%rbp
add    %rcx,%rbp
sar    $0x20,%rbp
movups 0x10(%rsp,%rdi,1),%xmm0
movups 0x20(%rsp,%rdi,1),%xmm1
add    %r9d,%esi
add    $0xfffe,%esi
mov    %esi,%edi
shr    %edi
and    $0x2,%esi
movups %xmm1,0x10(%r14,%rbp,1)
cmp    $0x1,%esi
sbb    %esi,%esi
movups %xmm0,(%r14,%rbp,1)
or     $0x1,%esi
lea    (%rsi,%rdi,1),%ebp
movabs $0x84000000000,%rbx
add    %rcx,%rbx
shl    $0x5,%ebp
sar    $0x20,%rbx
movups 0x10(%rsp,%rbp,1),%xmm0
add    %edi,%esi
add    $0xffffffff,%esi
mov    %esi,%edi
movups 0x20(%rsp,%rbp,1),%xmm1
shr    %edi
and    $0x2,%esi
cmp    $0x1,%esi
movups %xmm1,0x10(%r14,%rbx,1)
sbb    %esi,%esi
or     $0x1,%esi
movups %xmm0,(%r14,%rbx,1)
lea    (%rsi,%rdi,1),%ebp
movabs $0x86000000000,%rbx
add    %rcx,%rbx
sar    $0x20,%rbx
shl    $0x5,%ebp
movups 0x10(%rsp,%rbp,1),%xmm0
add    %edi,%esi
add    $0xffffffff,%esi
mov    %esi,%edi
shr    %edi
movups 0x20(%rsp,%rbp,1),%xmm1
and    $0x2,%esi
cmp    $0x1,%esi
sbb    %esi,%esi
movups %xmm1,0x10(%r14,%rbx,1)
or     $0x1,%esi
lea    (%rsi,%rdi,1),%ebp
movups %xmm0,(%r14,%rbx,1)
shl    $0x5,%ebp
movabs $0x88000000000,%rbx
add    %rcx,%rbx
sar    $0x20,%rbx
movups 0x10(%rsp,%rbp,1),%xmm0
movups 0x20(%rsp,%rbp,1),%xmm1
add    %edi,%esi
add    $0xffffffff,%esi
mov    %esi,%edi
and    $0x2,%esi
shr    %edi
cmp    $0x1,%esi
sbb    %esi,%esi
movups %xmm1,0x10(%r14,%rbx,1)
or     $0x1,%esi
lea    (%rsi,%rdi,1),%ebp
shl    $0x5,%ebp
movups %xmm0,(%r14,%rbx,1)
movabs $0x8a000000000,%rbx
add    %rcx,%rbx
sar    $0x20,%rbx
movups 0x10(%rsp,%rbp,1),%xmm0
movups 0x20(%rsp,%rbp,1),%xmm1
add    %edi,%esi
add    $0xffffffff,%esi
mov    %esi,%edi
shr    %edi
and    $0x2,%esi
movups %xmm1,0x10(%r14,%rbx,1)
cmp    $0x1,%esi
sbb    %esi,%esi
movups %xmm0,(%r14,%rbx,1)
or     $0x1,%esi
lea    (%rsi,%rdi,1),%ebp
movabs $0x8c000000000,%rbx
add    %rcx,%rbx
shl    $0x5,%ebp
sar    $0x20,%rbx
movups 0x10(%rsp,%rbp,1),%xmm0
add    %edi,%esi
add    $0xffffffff,%esi
mov    %esi,%edi
movups 0x20(%rsp,%rbp,1),%xmm1
shr    %edi
and    $0x2,%esi
cmp    $0x1,%esi
movups %xmm1,0x10(%r14,%rbx,1)
sbb    %esi,%esi
or     $0x1,%esi
movups %xmm0,(%r14,%rbx,1)
lea    (%rsi,%rdi,1),%ebp
movabs $0x8e000000000,%rbx
add    %rcx,%rbx
sar    $0x20,%rbx
shl    $0x5,%ebp
movups 0x10(%rsp,%rbp,1),%xmm0
add    %edi,%esi
add    $0xffffffff,%esi
mov    %esi,%edi
shr    %edi
movups 0x20(%rsp,%rbp,1),%xmm1
and    $0x2,%esi
cmp    $0x1,%esi
sbb    %esi,%esi
movups %xmm1,0x10(%r14,%rbx,1)
or     $0x1,%esi
lea    (%rsi,%rdi,1),%ebp
movups %xmm0,(%r14,%rbx,1)
shl    $0x5,%ebp
lea    (%rcx,%r11,1),%rbx
sar    $0x20,%rbx
movups 0x10(%rsp,%rbp,1),%xmm0
movups 0x20(%rsp,%rbp,1),%xmm1
add    %edi,%esi
add    $0xffffffff,%esi
mov    %esi,%edi
and    $0x2,%esi
shr    %edi
cmp    $0x1,%esi
sbb    %esi,%esi
movups %xmm1,0x10(%r14,%rbx,1)
or     $0x1,%esi
lea    (%rsi,%rdi,1),%ebp
shl    $0x5,%ebp
movups %xmm0,(%r14,%rbx,1)
lea    (%rcx,%r15,1),%rbx
movups 0x10(%rsp,%rbp,1),%xmm0
movups 0x20(%rsp,%rbp,1),%xmm1
sar    $0x20,%rbx
add    %edi,%esi
add    $0xffffffff,%esi
mov    %esi,%edi
shr    %edi
lea    0x1(%rdi),%ebp
add    $0x7ffffff,%edi
test   $0x2,%sil
cmovne %ebp,%edi
movups %xmm1,0x10(%r14,%rbx,1)
movups %xmm0,(%r14,%rbx,1)
shl    $0x5,%edi
movups 0x10(%rsp,%rdi,1),%xmm0
movups 0x20(%rsp,%rdi,1),%xmm1
lea    (%rcx,%r12,1),%rsi
sar    $0x20,%rsi
movups %xmm1,0x10(%r14,%rsi,1)
movups %xmm0,(%r14,%rsi,1)
add    $0x1,%r13
add    %rdx,%rcx
add    $0x160,%rax
cmp    $0x20,%r13
jne    1460 <horst_sign+0x310>
movaps 0x10(%rsp),%xmm0
movaps 0x20(%rsp),%xmm1
mov    (%rsp),%rax
movups %xmm1,0x10(%rax)
movups %xmm0,(%rax)
mov    0x8(%rsp),%rax
movq   $0x3400,(%rax)
xor    %eax,%eax
add    $0x5ffff8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @horst_sign(i8* nocapture writeonly %0, i8* nocapture writeonly %1, i64* nocapture writeonly %2, i8* nocapture readnone %3, i64 %4, i8* %5, i8* %6, i8* nocapture %7) {
%9 = alloca [2097152 x i8]
%10 = alloca [4194272 x i8]
%11 = getelementptr inbounds [2097152 x i8], [2097152 x i8]* %9, i64 0, i64 0
%12 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 0
%13 = call i32 @expand_seed(i8* %11, i8* %5)
br label %14
14: ; preds = %8, %14
%15 = phi i64 [ 0, %8 ], [ %21, %14 ]
%16 = shl nuw nsw i64 %15, 5
%17 = add nuw nsw i64 %16, 2097120
%18 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %17
%19 = getelementptr inbounds [2097152 x i8], [2097152 x i8]* %9, i64 0, i64 %16
%20 = call i32 @hash_n_n_8x(i8* %18, i8* %19)
%21 = add nuw nsw i64 %15, 8
%22 = icmp ult i64 %15, 65528
br i1 %22, label %14, label %23
23: ; preds = %14
%24 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 1048544
%25 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 2097120
%26 = call i32 @loop_hash_2n_n_mask_8x(i8* %24, i8* %25, i32 4096, i8* %6)
%27 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 524256
%28 = getelementptr inbounds i8, i8* %6, i64 64
%29 = call i32 @loop_hash_2n_n_mask_8x(i8* %27, i8* %24, i32 2048, i8* %28)
%30 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 262112
%31 = getelementptr inbounds i8, i8* %6, i64 128
%32 = call i32 @loop_hash_2n_n_mask_8x(i8* %30, i8* %27, i32 1024, i8* %31)
%33 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 131040
%34 = getelementptr inbounds i8, i8* %6, i64 192
%35 = call i32 @loop_hash_2n_n_mask_8x(i8* %33, i8* %30, i32 512, i8* %34)
%36 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 65504
%37 = getelementptr inbounds i8, i8* %6, i64 256
%38 = call i32 @loop_hash_2n_n_mask_8x(i8* %36, i8* %33, i32 256, i8* %37)
%39 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 32736
%40 = getelementptr inbounds i8, i8* %6, i64 320
%41 = call i32 @loop_hash_2n_n_mask_8x(i8* %39, i8* %36, i32 128, i8* %40)
%42 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 16352
%43 = getelementptr inbounds i8, i8* %6, i64 384
%44 = call i32 @loop_hash_2n_n_mask_8x(i8* %42, i8* %39, i32 64, i8* %43)
%45 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 8160
%46 = getelementptr inbounds i8, i8* %6, i64 448
%47 = call i32 @loop_hash_2n_n_mask_8x(i8* %45, i8* %42, i32 32, i8* %46)
%48 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 4064
%49 = getelementptr inbounds i8, i8* %6, i64 512
%50 = call i32 @loop_hash_2n_n_mask_8x(i8* %48, i8* %45, i32 16, i8* %49)
%51 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 2016
%52 = getelementptr inbounds i8, i8* %6, i64 576
%53 = call i32 @loop_hash_2n_n_mask_8x(i8* %51, i8* %48, i32 8, i8* %52)
%54 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 992
%55 = getelementptr inbounds i8, i8* %6, i64 640
%56 = call i32 @loop_hash_2n_n_mask_8x(i8* %54, i8* %51, i32 4, i8* %55)
%57 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 480
%58 = getelementptr inbounds i8, i8* %6, i64 704
%59 = call i32 @loop_hash_2n_n_mask_8x(i8* %57, i8* %54, i32 2, i8* %58)
%60 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 224
%61 = getelementptr inbounds i8, i8* %6, i64 768
%62 = call i32 @loop_hash_2n_n_mask_8x(i8* %60, i8* %57, i32 1, i8* %61)
%63 = getelementptr inbounds i8, i8* %6, i64 832
%64 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 96
%65 = call i32 @hash_2n_n_mask(i8* %64, i8* %60, i8* %63)
%66 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 128
%67 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 288
%68 = call i32 @hash_2n_n_mask(i8* %66, i8* %67, i8* %63)
%69 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 160
%70 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 352
%71 = call i32 @hash_2n_n_mask(i8* %69, i8* %70, i8* %63)
%72 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 192
%73 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 416
%74 = call i32 @hash_2n_n_mask(i8* %72, i8* %73, i8* %63)
%75 = getelementptr inbounds i8, i8* %6, i64 896
%76 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 32
%77 = call i32 @hash_2n_n_mask(i8* %76, i8* %64, i8* %75)
%78 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 64
%79 = call i32 @hash_2n_n_mask(i8* %78, i8* %69, i8* %75)
%80 = getelementptr inbounds i8, i8* %6, i64 960
%81 = call i32 @hash_2n_n_mask(i8* %12, i8* %76, i8* %80)
br label %82
82: ; preds = %23, %82
%83 = phi i64 [ 0, %23 ], [ %220, %82 ]
%84 = phi i64 [ 2048, %23 ], [ %219, %82 ]
%85 = shl nuw nsw i64 %83, 1
%86 = getelementptr inbounds i8, i8* %7, i64 %85
%87 = load i8, i8* %86
%88 = zext i8 %87 to i32
%89 = or i64 %85, 1
%90 = getelementptr inbounds i8, i8* %7, i64 %89
%91 = load i8, i8* %90
%92 = zext i8 %91 to i32
%93 = shl nuw nsw i32 %92, 8
%94 = or i32 %93, %88
%95 = getelementptr i8, i8* %0, i64 %84
%96 = shl nuw nsw i32 %94, 5
%97 = zext i32 %96 to i64
%98 = getelementptr [2097152 x i8], [2097152 x i8]* %9, i64 0, i64 %97
%99 = add nuw nsw i32 %94, 65535
%100 = and i32 %99, 1
%101 = icmp eq i32 %100, 0
%102 = select i1 %101, i32 -1, i32 1
%103 = add nsw i32 %102, %99
%104 = shl nsw i32 %103, 5
%105 = shl i64 %84, 32
%106 = add i64 %105, 137438953472
%107 = ashr exact i64 %106, 32
%108 = getelementptr i8, i8* %0, i64 %107
%109 = zext i32 %104 to i64
%110 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %109
%111 = add nsw i32 %103, -1
%112 = lshr i32 %111, 1
%113 = and i32 %111, 2
%114 = icmp eq i32 %113, 0
%115 = select i1 %114, i32 -1, i32 1
%116 = add i32 %115, %112
%117 = shl i32 %116, 5
%118 = add i64 %105, 274877906944
%119 = ashr exact i64 %118, 32
%120 = getelementptr i8, i8* %0, i64 %119
%121 = zext i32 %117 to i64
%122 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %121
%123 = add i32 %116, -1
%124 = lshr i32 %123, 1
%125 = and i32 %123, 2
%126 = icmp eq i32 %125, 0
%127 = select i1 %126, i32 -1, i32 1
%128 = add nsw i32 %127, %124
%129 = shl i32 %128, 5
%130 = add i64 %105, 412316860416
%131 = ashr exact i64 %130, 32
%132 = getelementptr i8, i8* %0, i64 %131
%133 = zext i32 %129 to i64
%134 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %133
%135 = add nsw i32 %128, -1
%136 = lshr i32 %135, 1
%137 = and i32 %135, 2
%138 = icmp eq i32 %137, 0
%139 = select i1 %138, i32 -1, i32 1
%140 = add nsw i32 %139, %136
%141 = shl i32 %140, 5
%142 = add i64 %105, 549755813888
%143 = ashr exact i64 %142, 32
%144 = getelementptr i8, i8* %0, i64 %143
%145 = zext i32 %141 to i64
%146 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %145
%147 = add nsw i32 %140, -1
%148 = lshr i32 %147, 1
%149 = and i32 %147, 2
%150 = icmp eq i32 %149, 0
%151 = select i1 %150, i32 -1, i32 1
%152 = add nsw i32 %151, %148
%153 = shl i32 %152, 5
%154 = add i64 %105, 687194767360
%155 = ashr exact i64 %154, 32
%156 = getelementptr i8, i8* %0, i64 %155
%157 = zext i32 %153 to i64
%158 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %157
%159 = add nsw i32 %152, -1
%160 = lshr i32 %159, 1
%161 = and i32 %159, 2
%162 = icmp eq i32 %161, 0
%163 = select i1 %162, i32 -1, i32 1
%164 = add nsw i32 %163, %160
%165 = shl i32 %164, 5
%166 = add i64 %105, 824633720832
%167 = ashr exact i64 %166, 32
%168 = getelementptr i8, i8* %0, i64 %167
%169 = zext i32 %165 to i64
%170 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %169
%171 = add nsw i32 %164, -1
%172 = lshr i32 %171, 1
%173 = and i32 %171, 2
%174 = icmp eq i32 %173, 0
%175 = select i1 %174, i32 -1, i32 1
%176 = add nsw i32 %175, %172
%177 = shl nuw i32 %176, 5
%178 = add i64 %105, 962072674304
%179 = ashr exact i64 %178, 32
%180 = getelementptr i8, i8* %0, i64 %179
%181 = zext i32 %177 to i64
%182 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %181
%183 = add nsw i32 %176, -1
%184 = lshr i32 %183, 1
%185 = and i32 %183, 2
%186 = icmp eq i32 %185, 0
%187 = select i1 %186, i32 -1, i32 1
%188 = add nsw i32 %187, %184
%189 = shl nuw nsw i32 %188, 5
%190 = add i64 %105, 1099511627776
%191 = ashr exact i64 %190, 32
%192 = getelementptr i8, i8* %0, i64 %191
%193 = zext i32 %189 to i64
%194 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %193
%195 = add nsw i32 %188, -1
%196 = lshr i32 %195, 1
%197 = and i32 %195, 2
%198 = icmp eq i32 %197, 0
%199 = select i1 %198, i32 -1, i32 1
%200 = add nsw i32 %199, %196
%201 = shl nuw nsw i32 %200, 5
%202 = add i64 %105, 1236950581248
%203 = ashr exact i64 %202, 32
%204 = getelementptr i8, i8* %0, i64 %203
%205 = zext i32 %201 to i64
%206 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %205
%207 = add nsw i32 %200, -1
%208 = lshr i32 %207, 1
%209 = and i32 %207, 2
%210 = icmp eq i32 %209, 0
%211 = select i1 %210, i32 134217727, i32 1
%212 = add nuw nsw i32 %211, %208
%213 = shl i32 %212, 5
%214 = add i64 %105, 1374389534720
%215 = ashr exact i64 %214, 32
%216 = getelementptr i8, i8* %0, i64 %215
%217 = zext i32 %213 to i64
%218 = getelementptr [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 %217
%219 = add nuw nsw i64 %84, 352
%220 = add nuw nsw i64 %83, 1
%221 = icmp eq i64 %220, 32
br i1 %221, label %222, label %82
222: ; preds = %82
%223 = getelementptr inbounds [4194272 x i8], [4194272 x i8]* %10, i64 0, i64 0
store i64 13312, i64* %2
ret i32 0
}