void bn_sqr_comba4(unsigned long *r, unsigned long *a) {
  unsigned long bl, bh;
  unsigned long t1, t2;
  unsigned long c1, c2, c3;
  c1 = 0;
  c2 = 0;
  c3 = 0;
  {
    unsigned long l, h, m;
    h = ((a)[0]);
    l = ((h) & (0xffff));
    h = (((h) >> 16) & (0xffff));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffff8000L)) >> (16 - 1);
    m = (m & (0xffff)) << (16 + 1);
    l = (l + m) & (0xffffffffL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c1 = (c1 + t1) & (0xffffffffL);
  if ((c1) < t1)
    t2++;
  c2 = (c2 + t2) & (0xffffffffL);
  if ((c2) < t2)
    c3++;
  ;
  r[0] = c1;
  c1 = 0;
  t1 = (((a)[1]) & (0xffff));
  t2 = ((((a)[1]) >> 16) & (0xffff));
  bl = (((a)[0]) & (0xffff));
  bh = ((((a)[0]) >> 16) & (0xffff));
  {
    unsigned long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffL);
    if (m < m1)
      ht += ((unsigned long)((1L) & (0xffff)) << 16);
    ht += (((m) >> 16) & (0xffff));
    m1 = ((unsigned long)((m) & (0xffff)) << 16);
    lt = (lt + m1) & (0xffffffffL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x80000000L))
    c1++;
  t2 = (t2 + t2) & (0xffffffffL);
  if (t1 & (0x80000000L))
    t2++;
  t1 = (t1 + t1) & (0xffffffffL);
  c2 = (c2 + t1) & (0xffffffffL);
  if ((c2 < t1) && (((++t2) & (0xffffffffL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffL);
  if ((c3) < t2)
    c1++;
  ;
  r[1] = c2;
  c2 = 0;
  {
    unsigned long l, h, m;
    h = ((a)[1]);
    l = ((h) & (0xffff));
    h = (((h) >> 16) & (0xffff));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffff8000L)) >> (16 - 1);
    m = (m & (0xffff)) << (16 + 1);
    l = (l + m) & (0xffffffffL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c3 = (c3 + t1) & (0xffffffffL);
  if ((c3) < t1)
    t2++;
  c1 = (c1 + t2) & (0xffffffffL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[2]) & (0xffff));
  t2 = ((((a)[2]) >> 16) & (0xffff));
  bl = (((a)[0]) & (0xffff));
  bh = ((((a)[0]) >> 16) & (0xffff));
  {
    unsigned long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffL);
    if (m < m1)
      ht += ((unsigned long)((1L) & (0xffff)) << 16);
    ht += (((m) >> 16) & (0xffff));
    m1 = ((unsigned long)((m) & (0xffff)) << 16);
    lt = (lt + m1) & (0xffffffffL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x80000000L))
    c2++;
  t2 = (t2 + t2) & (0xffffffffL);
  if (t1 & (0x80000000L))
    t2++;
  t1 = (t1 + t1) & (0xffffffffL);
  c3 = (c3 + t1) & (0xffffffffL);
  if ((c3 < t1) && (((++t2) & (0xffffffffL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffL);
  if ((c1) < t2)
    c2++;
  ;
  r[2] = c3;
  c3 = 0;
  t1 = (((a)[3]) & (0xffff));
  t2 = ((((a)[3]) >> 16) & (0xffff));
  bl = (((a)[0]) & (0xffff));
  bh = ((((a)[0]) >> 16) & (0xffff));
  {
    unsigned long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffL);
    if (m < m1)
      ht += ((unsigned long)((1L) & (0xffff)) << 16);
    ht += (((m) >> 16) & (0xffff));
    m1 = ((unsigned long)((m) & (0xffff)) << 16);
    lt = (lt + m1) & (0xffffffffL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x80000000L))
    c3++;
  t2 = (t2 + t2) & (0xffffffffL);
  if (t1 & (0x80000000L))
    t2++;
  t1 = (t1 + t1) & (0xffffffffL);
  c1 = (c1 + t1) & (0xffffffffL);
  if ((c1 < t1) && (((++t2) & (0xffffffffL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[2]) & (0xffff));
  t2 = ((((a)[2]) >> 16) & (0xffff));
  bl = (((a)[1]) & (0xffff));
  bh = ((((a)[1]) >> 16) & (0xffff));
  {
    unsigned long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffL);
    if (m < m1)
      ht += ((unsigned long)((1L) & (0xffff)) << 16);
    ht += (((m) >> 16) & (0xffff));
    m1 = ((unsigned long)((m) & (0xffff)) << 16);
    lt = (lt + m1) & (0xffffffffL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x80000000L))
    c3++;
  t2 = (t2 + t2) & (0xffffffffL);
  if (t1 & (0x80000000L))
    t2++;
  t1 = (t1 + t1) & (0xffffffffL);
  c1 = (c1 + t1) & (0xffffffffL);
  if ((c1 < t1) && (((++t2) & (0xffffffffL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffL);
  if ((c2) < t2)
    c3++;
  ;
  r[3] = c1;
  c1 = 0;
  {
    unsigned long l, h, m;
    h = ((a)[2]);
    l = ((h) & (0xffff));
    h = (((h) >> 16) & (0xffff));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffff8000L)) >> (16 - 1);
    m = (m & (0xffff)) << (16 + 1);
    l = (l + m) & (0xffffffffL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c2 = (c2 + t1) & (0xffffffffL);
  if ((c2) < t1)
    t2++;
  c3 = (c3 + t2) & (0xffffffffL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[3]) & (0xffff));
  t2 = ((((a)[3]) >> 16) & (0xffff));
  bl = (((a)[1]) & (0xffff));
  bh = ((((a)[1]) >> 16) & (0xffff));
  {
    unsigned long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffL);
    if (m < m1)
      ht += ((unsigned long)((1L) & (0xffff)) << 16);
    ht += (((m) >> 16) & (0xffff));
    m1 = ((unsigned long)((m) & (0xffff)) << 16);
    lt = (lt + m1) & (0xffffffffL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x80000000L))
    c1++;
  t2 = (t2 + t2) & (0xffffffffL);
  if (t1 & (0x80000000L))
    t2++;
  t1 = (t1 + t1) & (0xffffffffL);
  c2 = (c2 + t1) & (0xffffffffL);
  if ((c2 < t1) && (((++t2) & (0xffffffffL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffL);
  if ((c3) < t2)
    c1++;
  ;
  r[4] = c2;
  c2 = 0;
  t1 = (((a)[3]) & (0xffff));
  t2 = ((((a)[3]) >> 16) & (0xffff));
  bl = (((a)[2]) & (0xffff));
  bh = ((((a)[2]) >> 16) & (0xffff));
  {
    unsigned long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffL);
    if (m < m1)
      ht += ((unsigned long)((1L) & (0xffff)) << 16);
    ht += (((m) >> 16) & (0xffff));
    m1 = ((unsigned long)((m) & (0xffff)) << 16);
    lt = (lt + m1) & (0xffffffffL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x80000000L))
    c2++;
  t2 = (t2 + t2) & (0xffffffffL);
  if (t1 & (0x80000000L))
    t2++;
  t1 = (t1 + t1) & (0xffffffffL);
  c3 = (c3 + t1) & (0xffffffffL);
  if ((c3 < t1) && (((++t2) & (0xffffffffL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffL);
  if ((c1) < t2)
    c2++;
  ;
  r[5] = c3;
  c3 = 0;
  {
    unsigned long l, h, m;
    h = ((a)[3]);
    l = ((h) & (0xffff));
    h = (((h) >> 16) & (0xffff));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffff8000L)) >> (16 - 1);
    m = (m & (0xffff)) << (16 + 1);
    l = (l + m) & (0xffffffffL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c1 = (c1 + t1) & (0xffffffffL);
  if ((c1) < t1)
    t2++;
  c2 = (c2 + t2) & (0xffffffffL);
  if ((c2) < t2)
    c3++;
  ;
  r[6] = c1;
  r[7] = c2;
}


x86 assembly (clang, -O0):
<bn_sqr_comba4>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe8,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movq   $0x0,-0x38(%rbp)
movq   $0x0,-0x40(%rbp)
movq   $0x0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
and    $0xffff,%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x58(%rbp)
mov    -0x50(%rbp),%rax
imul   -0x58(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x50(%rbp),%rax
imul   -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rax
imul   -0x58(%rbp),%rax
mov    %rax,-0x58(%rbp)
movabs $0xffff8000,%rax
and    -0x60(%rbp),%rax
shr    $0xf,%rax
add    -0x58(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x60(%rbp),%rax
and    $0xffff,%rax
shl    $0x11,%rax
mov    %rax,-0x60(%rbp)
mov    -0x50(%rbp),%rax
add    -0x60(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
cmp    -0x60(%rbp),%rax
jae    11dc <bn_sqr_comba4+0xdc>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    121f <bn_sqr_comba4+0x11f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x40(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    1252 <bn_sqr_comba4+0x152>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
movq   $0x0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x20(%rbp),%rax
imul   -0x78(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x18(%rbp),%rax
imul   -0x78(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x18(%rbp),%rax
imul   -0x80(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x20(%rbp),%rax
imul   -0x80(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x68(%rbp),%rax
add    -0x70(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x68(%rbp)
mov    -0x68(%rbp),%rax
cmp    -0x70(%rbp),%rax
jae    132c <bn_sqr_comba4+0x22c>
mov    -0x80(%rbp),%rax
add    $0x10000,%rax
mov    %rax,-0x80(%rbp)
mov    -0x68(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
add    -0x80(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x68(%rbp),%rax
and    $0xffff,%rax
shl    $0x10,%rax
mov    %rax,-0x70(%rbp)
mov    -0x78(%rbp),%rax
add    -0x70(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x78(%rbp)
mov    -0x78(%rbp),%rax
cmp    -0x70(%rbp),%rax
jae    1387 <bn_sqr_comba4+0x287>
mov    -0x80(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x80(%rbp)
mov    -0x78(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x80(%rbp),%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x30(%rbp),%rax
cmp    $0x0,%rax
je     13bb <bn_sqr_comba4+0x2bb>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x28(%rbp),%rax
cmp    $0x0,%rax
je     13f8 <bn_sqr_comba4+0x2f8>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x40(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    1467 <bn_sqr_comba4+0x367>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movabs $0xffffffff,%rcx
and    %rcx,%rax
cmp    $0x0,%rax
jne    1467 <bn_sqr_comba4+0x367>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x48(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    149a <bn_sqr_comba4+0x39a>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x8(%rax)
movq   $0x0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
mov    %rax,-0x90(%rbp)
mov    -0x90(%rbp),%rax
and    $0xffff,%rax
mov    %rax,-0x88(%rbp)
mov    -0x90(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x90(%rbp)
mov    -0x88(%rbp),%rax
imul   -0x90(%rbp),%rax
ff
mov    %rax,-0x98(%rbp)
mov    -0x88(%rbp),%rax
imul   -0x88(%rbp),%rax
ff
mov    %rax,-0x88(%rbp)
mov    -0x90(%rbp),%rax
imul   -0x90(%rbp),%rax
ff
mov    %rax,-0x90(%rbp)
movabs $0xffff8000,%rax
and    -0x98(%rbp),%rax
shr    $0xf,%rax
add    -0x90(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x98(%rbp),%rax
and    $0xffff,%rax
shl    $0x11,%rax
mov    %rax,-0x98(%rbp)
mov    -0x88(%rbp),%rax
add    -0x98(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x88(%rbp)
mov    -0x88(%rbp),%rax
cmp    -0x98(%rbp),%rax
jae    15ae <bn_sqr_comba4+0x4ae>
mov    -0x90(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x90(%rbp)
mov    -0x88(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x90(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x48(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    15f7 <bn_sqr_comba4+0x4f7>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    162a <bn_sqr_comba4+0x52a>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0xb0(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0xb8(%rbp)
mov    -0x20(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0xa0(%rbp)
mov    -0x18(%rbp),%rax
imul   -0xb0(%rbp),%rax
ff
mov    %rax,-0xb0(%rbp)
mov    -0x18(%rbp),%rax
imul   -0xb8(%rbp),%rax
ff
mov    %rax,-0xa8(%rbp)
mov    -0x20(%rbp),%rax
imul   -0xb8(%rbp),%rax
ff
mov    %rax,-0xb8(%rbp)
mov    -0xa0(%rbp),%rax
add    -0xa8(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0xa0(%rbp)
mov    -0xa0(%rbp),%rax
cmp    -0xa8(%rbp),%rax
jae    1724 <bn_sqr_comba4+0x624>
mov    -0xb8(%rbp),%rax
add    $0x10000,%rax
mov    %rax,-0xb8(%rbp)
mov    -0xa0(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
add    -0xb8(%rbp),%rax
mov    %rax,-0xb8(%rbp)
mov    -0xa0(%rbp),%rax
and    $0xffff,%rax
shl    $0x10,%rax
mov    %rax,-0xa8(%rbp)
mov    -0xb0(%rbp),%rax
add    -0xa8(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0xb0(%rbp)
mov    -0xb0(%rbp),%rax
cmp    -0xa8(%rbp),%rax
jae    17a3 <bn_sqr_comba4+0x6a3>
mov    -0xb8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0xb8(%rbp)
mov    -0xb0(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0xb8(%rbp),%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x30(%rbp),%rax
cmp    $0x0,%rax
je     17dd <bn_sqr_comba4+0x6dd>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x28(%rbp),%rax
cmp    $0x0,%rax
je     181a <bn_sqr_comba4+0x71a>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x48(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    1889 <bn_sqr_comba4+0x789>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movabs $0xffffffff,%rcx
and    %rcx,%rax
cmp    $0x0,%rax
jne    1889 <bn_sqr_comba4+0x789>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x38(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    18bc <bn_sqr_comba4+0x7bc>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x10(%rax)
movq   $0x0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0xd0(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0xd8(%rbp)
mov    -0x20(%rbp),%rax
imul   -0xd0(%rbp),%rax
ff
mov    %rax,-0xc0(%rbp)
mov    -0x18(%rbp),%rax
imul   -0xd0(%rbp),%rax
ff
mov    %rax,-0xd0(%rbp)
mov    -0x18(%rbp),%rax
imul   -0xd8(%rbp),%rax
ff
mov    %rax,-0xc8(%rbp)
mov    -0x20(%rbp),%rax
imul   -0xd8(%rbp),%rax
ff
mov    %rax,-0xd8(%rbp)
mov    -0xc0(%rbp),%rax
add    -0xc8(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0xc0(%rbp)
mov    -0xc0(%rbp),%rax
cmp    -0xc8(%rbp),%rax
jae    19ca <bn_sqr_comba4+0x8ca>
mov    -0xd8(%rbp),%rax
add    $0x10000,%rax
mov    %rax,-0xd8(%rbp)
mov    -0xc0(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
add    -0xd8(%rbp),%rax
mov    %rax,-0xd8(%rbp)
mov    -0xc0(%rbp),%rax
and    $0xffff,%rax
shl    $0x10,%rax
mov    %rax,-0xc8(%rbp)
mov    -0xd0(%rbp),%rax
add    -0xc8(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0xd0(%rbp)
mov    -0xd0(%rbp),%rax
cmp    -0xc8(%rbp),%rax
jae    1a49 <bn_sqr_comba4+0x949>
mov    -0xd8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0xd8(%rbp)
mov    -0xd0(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0xd8(%rbp),%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x30(%rbp),%rax
cmp    $0x0,%rax
je     1a83 <bn_sqr_comba4+0x983>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x30(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x28(%rbp),%rax
cmp    $0x0,%rax
je     1ac0 <bn_sqr_comba4+0x9c0>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x38(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    1b2f <bn_sqr_comba4+0xa2f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movabs $0xffffffff,%rcx
and    %rcx,%rax
cmp    $0x0,%rax
jne    1b2f <bn_sqr_comba4+0xa2f>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x40(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    1b62 <bn_sqr_comba4+0xa62>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0xf0(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0xf8(%rbp)
mov    -0x20(%rbp),%rax
imul   -0xf0(%rbp),%rax
ff
mov    %rax,-0xe0(%rbp)
mov    -0x18(%rbp),%rax
imul   -0xf0(%rbp),%rax
ff
mov    %rax,-0xf0(%rbp)
mov    -0x18(%rbp),%rax
imul   -0xf8(%rbp),%rax
ff
mov    %rax,-0xe8(%rbp)
mov    -0x20(%rbp),%rax
imul   -0xf8(%rbp),%rax
ff
mov    %rax,-0xf8(%rbp)
mov    -0xe0(%rbp),%rax
add    -0xe8(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0xe0(%rbp)
mov    -0xe0(%rbp),%rax
cmp    -0xe8(%rbp),%rax
jae    1c5e <bn_sqr_comba4+0xb5e>
mov    -0xf8(%rbp),%rax
add    $0x10000,%rax
mov    %rax,-0xf8(%rbp)
mov    -0xe0(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
add    -0xf8(%rbp),%rax
mov    %rax,-0xf8(%rbp)
mov    -0xe0(%rbp),%rax
and    $0xffff,%rax
shl    $0x10,%rax
mov    %rax,-0xe8(%rbp)
mov    -0xf0(%rbp),%rax
add    -0xe8(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rax
cmp    -0xe8(%rbp),%rax
jae    1cdd <bn_sqr_comba4+0xbdd>
mov    -0xf8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0xf8(%rbp)
mov    -0xf0(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0xf8(%rbp),%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x30(%rbp),%rax
cmp    $0x0,%rax
je     1d17 <bn_sqr_comba4+0xc17>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x30(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x28(%rbp),%rax
cmp    $0x0,%rax
je     1d54 <bn_sqr_comba4+0xc54>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x38(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    1dc3 <bn_sqr_comba4+0xcc3>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movabs $0xffffffff,%rcx
and    %rcx,%rax
cmp    $0x0,%rax
jne    1dc3 <bn_sqr_comba4+0xcc3>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x40(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    1df6 <bn_sqr_comba4+0xcf6>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x18(%rax)
movq   $0x0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
mov    %rax,-0x108(%rbp)
mov    -0x108(%rbp),%rax
and    $0xffff,%rax
mov    %rax,-0x100(%rbp)
mov    -0x108(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x108(%rbp)
mov    -0x100(%rbp),%rax
imul   -0x108(%rbp),%rax
ff
mov    %rax,-0x110(%rbp)
mov    -0x100(%rbp),%rax
imul   -0x100(%rbp),%rax
ff
mov    %rax,-0x100(%rbp)
mov    -0x108(%rbp),%rax
imul   -0x108(%rbp),%rax
ff
mov    %rax,-0x108(%rbp)
movabs $0xffff8000,%rax
and    -0x110(%rbp),%rax
shr    $0xf,%rax
add    -0x108(%rbp),%rax
mov    %rax,-0x108(%rbp)
mov    -0x110(%rbp),%rax
and    $0xffff,%rax
shl    $0x11,%rax
mov    %rax,-0x110(%rbp)
mov    -0x100(%rbp),%rax
add    -0x110(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x100(%rbp)
mov    -0x100(%rbp),%rax
cmp    -0x110(%rbp),%rax
jae    1f0a <bn_sqr_comba4+0xe0a>
mov    -0x108(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x108(%rbp)
mov    -0x100(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x108(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x40(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    1f53 <bn_sqr_comba4+0xe53>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x48(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    1f86 <bn_sqr_comba4+0xe86>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x128(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x130(%rbp)
mov    -0x20(%rbp),%rax
imul   -0x128(%rbp),%rax
ff
mov    %rax,-0x118(%rbp)
mov    -0x18(%rbp),%rax
imul   -0x128(%rbp),%rax
mov    %rax,-0x128(%rbp)
mov    -0x18(%rbp),%rax
imul   -0x130(%rbp),%rax
ff
mov    %rax,-0x120(%rbp)
mov    -0x20(%rbp),%rax
imul   -0x130(%rbp),%rax
ff
mov    %rax,-0x130(%rbp)
mov    -0x118(%rbp),%rax
add    -0x120(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x118(%rbp)
mov    -0x118(%rbp),%rax
cmp    -0x120(%rbp),%rax
jae    2082 <bn_sqr_comba4+0xf82>
mov    -0x130(%rbp),%rax
add    $0x10000,%rax
mov    %rax,-0x130(%rbp)
mov    -0x118(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
add    -0x130(%rbp),%rax
mov    %rax,-0x130(%rbp)
mov    -0x118(%rbp),%rax
and    $0xffff,%rax
shl    $0x10,%rax
mov    %rax,-0x120(%rbp)
mov    -0x128(%rbp),%rax
add    -0x120(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x128(%rbp)
mov    -0x128(%rbp),%rax
cmp    -0x120(%rbp),%rax
jae    2101 <bn_sqr_comba4+0x1001>
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
mov    -0x128(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x30(%rbp),%rax
cmp    $0x0,%rax
je     213b <bn_sqr_comba4+0x103b>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x28(%rbp),%rax
cmp    $0x0,%rax
je     2178 <bn_sqr_comba4+0x1078>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x40(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    21e7 <bn_sqr_comba4+0x10e7>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movabs $0xffffffff,%rcx
and    %rcx,%rax
cmp    $0x0,%rax
jne    21e7 <bn_sqr_comba4+0x10e7>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x48(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    221a <bn_sqr_comba4+0x111a>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x20(%rax)
movq   $0x0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
and    $0xffff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x148(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x150(%rbp)
mov    -0x20(%rbp),%rax
imul   -0x148(%rbp),%rax
ff
mov    %rax,-0x138(%rbp)
mov    -0x18(%rbp),%rax
imul   -0x148(%rbp),%rax
ff
mov    %rax,-0x148(%rbp)
mov    -0x18(%rbp),%rax
imul   -0x150(%rbp),%rax
ff
mov    %rax,-0x140(%rbp)
mov    -0x20(%rbp),%rax
imul   -0x150(%rbp),%rax
ff
mov    %rax,-0x150(%rbp)
mov    -0x138(%rbp),%rax
add    -0x140(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x138(%rbp)
mov    -0x138(%rbp),%rax
cmp    -0x140(%rbp),%rax
jae    232a <bn_sqr_comba4+0x122a>
mov    -0x150(%rbp),%rax
add    $0x10000,%rax
mov    %rax,-0x150(%rbp)
mov    -0x138(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
add    -0x150(%rbp),%rax
mov    %rax,-0x150(%rbp)
mov    -0x138(%rbp),%rax
and    $0xffff,%rax
shl    $0x10,%rax
mov    %rax,-0x140(%rbp)
mov    -0x148(%rbp),%rax
add    -0x140(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x148(%rbp)
mov    -0x148(%rbp),%rax
cmp    -0x140(%rbp),%rax
jae    23a9 <bn_sqr_comba4+0x12a9>
mov    -0x150(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x150(%rbp)
mov    -0x148(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x150(%rbp),%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x30(%rbp),%rax
cmp    $0x0,%rax
je     23e3 <bn_sqr_comba4+0x12e3>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x30(%rbp)
movabs $0x80000000,%rax
and    -0x28(%rbp),%rax
cmp    $0x0,%rax
je     2420 <bn_sqr_comba4+0x1320>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x48(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    248f <bn_sqr_comba4+0x138f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movabs $0xffffffff,%rcx
and    %rcx,%rax
cmp    $0x0,%rax
jne    248f <bn_sqr_comba4+0x138f>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x38(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    24c2 <bn_sqr_comba4+0x13c2>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x28(%rax)
movq   $0x0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
mov    %rax,-0x160(%rbp)
mov    -0x160(%rbp),%rax
and    $0xffff,%rax
mov    %rax,-0x158(%rbp)
mov    -0x160(%rbp),%rax
shr    $0x10,%rax
and    $0xffff,%rax
mov    %rax,-0x160(%rbp)
mov    -0x158(%rbp),%rax
imul   -0x160(%rbp),%rax
ff
mov    %rax,-0x168(%rbp)
mov    -0x158(%rbp),%rax
imul   -0x158(%rbp),%rax
ff
mov    %rax,-0x158(%rbp)
mov    -0x160(%rbp),%rax
imul   -0x160(%rbp),%rax
ff
mov    %rax,-0x160(%rbp)
movabs $0xffff8000,%rax
and    -0x168(%rbp),%rax
shr    $0xf,%rax
add    -0x160(%rbp),%rax
mov    %rax,-0x160(%rbp)
mov    -0x168(%rbp),%rax
and    $0xffff,%rax
shl    $0x11,%rax
mov    %rax,-0x168(%rbp)
mov    -0x158(%rbp),%rax
add    -0x168(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x158(%rbp)
mov    -0x158(%rbp),%rax
cmp    -0x168(%rbp),%rax
jae    25d6 <bn_sqr_comba4+0x14d6>
mov    -0x160(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x160(%rbp)
mov    -0x158(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x160(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
add    -0x28(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    261f <bn_sqr_comba4+0x151f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x40(%rbp),%rax
add    -0x30(%rbp),%rax
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    2652 <bn_sqr_comba4+0x1552>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x30(%rax)
mov    -0x40(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x38(%rax)
add    $0xe8,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bn_sqr_comba4>:
push   %rbp
push   %r15
push   %r14
push   %rbx
movabs $0x1fffe0000,%r8
mov    (%rsi),%rcx
movzwl %cx,%edx
shr    $0x10,%ecx
mov    %rcx,%rax
imul   %rdx,%rax
imul   %edx,%edx
imul   %ecx,%ecx
mov    %rax,%r10
shr    $0xf,%r10
add    %ecx,%r10d
shl    $0x11,%rax
mov    %rax,%rcx
and    %r8,%rcx
add    %edx,%eax
cmp    %rcx,%rax
adc    $0x0,%r10d
mov    %rax,(%rdi)
mov    (%rsi),%rcx
mov    0x8(%rsi),%rax
movzwl %ax,%r9d
shr    $0x10,%eax
movzwl %cx,%edx
shr    $0x10,%ecx
mov    %rcx,%rbx
imul   %r9,%rbx
imul   %rdx,%r9
imul   %eax,%ecx
imul   %rdx,%rax
add    %rax,%rbx
mov    %ebx,%r11d
lea    0x10000(%rcx),%edx
mov    %ebx,%ebp
shr    $0x10,%ebp
cmp    %rax,%r11
cmovae %ecx,%edx
add    %ebp,%edx
shl    $0x10,%rbx
mov    %ebx,%eax
add    %r9,%rbx
mov    %ebx,%ebp
cmp    %rax,%rbp
adc    $0x0,%edx
mov    %edx,%ecx
shr    $0x1f,%ecx
shld   $0x1,%ebx,%edx
add    %rbp,%rbp
mov    %ebp,%eax
add    %ebp,%r10d
cmp    %rax,%r10
jae    11b7 <bn_sqr_comba4+0xb7>
add    $0x1,%rdx
cmp    $0x1,%edx
adc    $0x0,%rcx
mov    %rdx,%r9
shr    $0x20,%r9
add    %rcx,%r9
mov    %r10,0x8(%rdi)
mov    (%rsi),%rcx
mov    0x8(%rsi),%rax
movzwl %ax,%ebx
shr    $0x10,%eax
mov    %rax,%r14
imul   %rbx,%r14
imul   %rbx,%rbx
imul   %rax,%rax
mov    %r14,%rbp
shr    $0xf,%rbp
add    %rax,%rbp
shl    $0x11,%r14
mov    %r14,%rax
and    %r8,%rax
add    %rbx,%r14
mov    %r14d,%ebx
cmp    %rax,%rbx
adc    $0x0,%rbp
add    %rdx,%r14
mov    %r14d,%eax
cmp    %rbx,%rax
adc    $0x0,%rbp
add    %rbp,%r9
mov    %r9d,%eax
xor    %r10d,%r10d
cmp    %rbp,%rax
setb   %r10b
mov    0x10(%rsi),%rax
movzwl %ax,%edx
shr    $0x10,%eax
movzwl %cx,%ebp
shr    $0x10,%ecx
mov    %rcx,%rbx
imul   %rdx,%rbx
imul   %rbp,%rdx
imul   %rax,%rbp
imul   %rax,%rcx
add    %rbp,%rbx
mov    %ebx,%r11d
lea    0x10000(%rcx),%rax
cmp    %rbp,%r11
cmovae %rcx,%rax
mov    %ebx,%ecx
shr    $0x10,%ecx
add    %rax,%rcx
shl    $0x10,%rbx
mov    %ebx,%eax
add    %rdx,%rbx
mov    %ebx,%edx
cmp    %rax,%rdx
adc    $0x0,%rcx
lea    0x1(%r10),%r11
test   $0x80000000,%ecx
cmove  %r10,%r11
shld   $0x1,%ebx,%ecx
add    %rdx,%rdx
mov    %edx,%eax
add    %r14d,%edx
cmp    %rax,%rdx
jae    129a <bn_sqr_comba4+0x19a>
add    $0x1,%rcx
cmp    $0x1,%ecx
adc    $0x0,%r11
add    %rcx,%r9
mov    %r9d,%eax
cmp    %rcx,%rax
adc    $0x0,%r11
mov    %rdx,0x10(%rdi)
mov    (%rsi),%rbx
mov    0x18(%rsi),%rcx
movzwl %cx,%r10d
shr    $0x10,%ecx
movzwl %bx,%ebp
shr    $0x10,%ebx
mov    %rbx,%rdx
imul   %r10,%rdx
imul   %rbp,%r10
imul   %ecx,%ebx
mov    %rcx,%rax
imul   %rbp,%rax
add    %rax,%rdx
mov    %edx,%r14d
lea    0x10000(%rbx),%ecx
mov    %edx,%ebp
shr    $0x10,%ebp
cmp    %rax,%r14
cmovae %ebx,%ecx
add    %ebp,%ecx
shl    $0x10,%rdx
mov    %edx,%eax
add    %r10,%rdx
mov    %edx,%ebp
cmp    %rax,%rbp
adc    $0x0,%ecx
mov    %ecx,%r14d
shr    $0x1f,%r14d
shld   $0x1,%edx,%ecx
mov    %rbp,%rax
add    %rbp,%rax
mov    %eax,%eax
lea    (%r9,%rbp,2),%r10
mov    %r10d,%edx
cmp    %rax,%rdx
jae    1328 <bn_sqr_comba4+0x228>
add    $0x1,%rcx
cmp    $0x1,%ecx
adc    $0x0,%r14
add    %rcx,%r11
mov    %r11d,%eax
cmp    %rcx,%rax
adc    $0x0,%r14
mov    0x8(%rsi),%rax
mov    0x10(%rsi),%rcx
movzwl %cx,%r9d
shr    $0x10,%ecx
movzwl %ax,%ebp
shr    $0x10,%eax
mov    %rax,%rbx
imul   %r9,%rbx
imul   %rbp,%r9
imul   %ecx,%eax
mov    %rcx,%rdx
imul   %rbp,%rdx
add    %rdx,%rbx
mov    %ebx,%r15d
lea    0x10000(%rax),%ecx
mov    %ebx,%ebp
shr    $0x10,%ebp
cmp    %rdx,%r15
cmovae %eax,%ecx
add    %ebp,%ecx
shl    $0x10,%rbx
mov    %ebx,%eax
add    %r9,%rbx
mov    %ebx,%edx
cmp    %rax,%rdx
adc    $0x0,%ecx
mov    %ecx,%r9d
shr    $0x1f,%r9d
add    %r14,%r9
shld   $0x1,%ebx,%ecx
add    %rdx,%rdx
mov    %edx,%eax
add    %edx,%r10d
cmp    %rax,%r10
jae    13af <bn_sqr_comba4+0x2af>
add    $0x1,%rcx
cmp    $0x1,%ecx
adc    $0x0,%r9
add    %rcx,%r11
mov    %r11d,%eax
cmp    %rcx,%rax
adc    $0x0,%r9
mov    %r10,0x18(%rdi)
mov    0x8(%rsi),%r10
mov    0x10(%rsi),%rdx
movzwl %dx,%ebp
shr    $0x10,%edx
mov    %rdx,%rax
imul   %rbp,%rax
imul   %rbp,%rbp
imul   %rdx,%rdx
mov    %rax,%rcx
shr    $0xf,%rcx
add    %rdx,%rcx
shl    $0x11,%rax
mov    %rax,%rdx
and    %r8,%rdx
add    %rbp,%rax
mov    %eax,%ebx
cmp    %rdx,%rbx
adc    $0x0,%rcx
add    %r11,%rax
mov    %eax,%edx
cmp    %rbx,%rdx
adc    $0x0,%rcx
add    %rcx,%r9
mov    %r9d,%edx
xor    %r11d,%r11d
cmp    %rcx,%rdx
setb   %r11b
mov    0x18(%rsi),%rcx
movzwl %cx,%edx
shr    $0x10,%ecx
movzwl %r10w,%ebp
shr    $0x10,%r10d
mov    %r10,%rbx
imul   %rdx,%rbx
imul   %rbp,%rdx
imul   %rcx,%rbp
imul   %rcx,%r10
add    %rbp,%rbx
mov    %ebx,%r14d
lea    0x10000(%r10),%rcx
cmp    %rbp,%r14
cmovae %r10,%rcx
mov    %ebx,%r15d
shr    $0x10,%r15d
add    %rcx,%r15
shl    $0x10,%rbx
mov    %ebx,%ecx
add    %rdx,%rbx
mov    %ebx,%edx
cmp    %rcx,%rdx
adc    $0x0,%r15
lea    0x1(%r11),%r10
test   $0x80000000,%r15d
cmove  %r11,%r10
shld   $0x1,%ebx,%r15d
add    %rdx,%rdx
mov    %edx,%ecx
add    %eax,%edx
cmp    %rcx,%rdx
jae    149a <bn_sqr_comba4+0x39a>
add    $0x1,%r15
cmp    $0x1,%r15d
adc    $0x0,%r10
add    %r15,%r9
mov    %rdx,0x20(%rdi)
mov    0x10(%rsi),%rdx
mov    0x18(%rsi),%rax
movzwl %ax,%r11d
shr    $0x10,%eax
movzwl %dx,%ecx
shr    $0x10,%edx
mov    %rdx,%rbx
imul   %r11,%rbx
imul   %rcx,%r11
imul   %eax,%edx
imul   %rcx,%rax
add    %rax,%rbx
mov    %ebx,%r14d
lea    0x10000(%rdx),%ecx
mov    %ebx,%ebp
shr    $0x10,%ebp
cmp    %rax,%r14
cmovae %edx,%ecx
add    %ebp,%ecx
shl    $0x10,%rbx
mov    %ebx,%eax
add    %r11,%rbx
mov    %ebx,%ebp
cmp    %rax,%rbp
adc    $0x0,%ecx
mov    %ecx,%edx
shr    $0x1f,%edx
shld   $0x1,%ebx,%ecx
add    %rbp,%rbp
mov    %ebp,%eax
lea    (%r9,%rbp,1),%ebx
cmp    %rax,%rbx
jae    1514 <bn_sqr_comba4+0x414>
add    $0x1,%rcx
cmp    $0x1,%ecx
adc    $0x0,%rdx
mov    %r9d,%eax
cmp    %r15,%rax
adc    $0x0,%r10
add    %rcx,%r10
mov    %r10d,%r9d
mov    %rbx,0x28(%rdi)
mov    0x18(%rsi),%rbp
movzwl %bp,%ebx
shr    $0x10,%ebp
mov    %rbp,%rax
imul   %rbx,%rax
imul   %rbx,%rbx
imul   %ebp,%ebp
mov    %rax,%rsi
shr    $0xf,%rsi
shl    $0x11,%rax
and    %rax,%r8
add    %rbx,%rax
add    %eax,%r10d
cmp    %rcx,%r9
mov    %eax,%eax
adc    $0x0,%edx
add    %ebp,%edx
add    %edx,%esi
cmp    %r8,%rax
adc    $0x0,%esi
cmp    %rax,%r10
adc    $0x0,%esi
mov    %r10,0x30(%rdi)
mov    %rsi,0x38(%rdi)
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @bn_sqr_comba4(i64* %0, i64* %1) {
%3 = alloca i64*
%4 = alloca i64*
%5 = alloca i64
%6 = alloca i64
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca i64
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
%15 = alloca i64
%16 = alloca i64
%17 = alloca i64
%18 = alloca i64
%19 = alloca i64
%20 = alloca i64
%21 = alloca i64
%22 = alloca i64
%23 = alloca i64
%24 = alloca i64
%25 = alloca i64
%26 = alloca i64
%27 = alloca i64
%28 = alloca i64
%29 = alloca i64
%30 = alloca i64
%31 = alloca i64
%32 = alloca i64
%33 = alloca i64
%34 = alloca i64
%35 = alloca i64
%36 = alloca i64
%37 = alloca i64
%38 = alloca i64
%39 = alloca i64
%40 = alloca i64
%41 = alloca i64
%42 = alloca i64
%43 = alloca i64
%44 = alloca i64
%45 = alloca i64
%46 = alloca i64
%47 = alloca i64
store i64* %0, i64** %3
store i64* %1, i64** %4
store i64 0, i64* %9
store i64 0, i64* %10
store i64 0, i64* %11
%48 = load i64*, i64** %4
%49 = getelementptr inbounds i64, i64* %48, i64 0
%50 = load i64, i64* %49
store i64 %50, i64* %13
%51 = load i64, i64* %13
%52 = and i64 %51, 65535
store i64 %52, i64* %12
%53 = load i64, i64* %13
%54 = lshr i64 %53, 16
%55 = and i64 %54, 65535
store i64 %55, i64* %13
%56 = load i64, i64* %12
%57 = load i64, i64* %13
%58 = mul i64 %56, %57
store i64 %58, i64* %14
%59 = load i64, i64* %12
%60 = load i64, i64* %12
%61 = mul i64 %60, %59
store i64 %61, i64* %12
%62 = load i64, i64* %13
%63 = load i64, i64* %13
%64 = mul i64 %63, %62
store i64 %64, i64* %13
%65 = load i64, i64* %14
%66 = and i64 %65, 4294934528
%67 = lshr i64 %66, 15
%68 = load i64, i64* %13
%69 = add i64 %68, %67
store i64 %69, i64* %13
%70 = load i64, i64* %14
%71 = and i64 %70, 65535
%72 = shl i64 %71, 17
store i64 %72, i64* %14
%73 = load i64, i64* %12
%74 = load i64, i64* %14
%75 = add i64 %73, %74
%76 = and i64 %75, 4294967295
store i64 %76, i64* %12
%77 = load i64, i64* %12
%78 = load i64, i64* %14
%79 = icmp ult i64 %77, %78
br i1 %79, label %80, label %83
80: ; preds = %2
%81 = load i64, i64* %13
%82 = add i64 %81, 1
store i64 %82, i64* %13
br label %83
83: ; preds = %80, %2
%84 = load i64, i64* %12
store i64 %84, i64* %7
%85 = load i64, i64* %13
store i64 %85, i64* %8
%86 = load i64, i64* %9
%87 = load i64, i64* %7
%88 = add i64 %86, %87
%89 = and i64 %88, 4294967295
store i64 %89, i64* %9
%90 = load i64, i64* %9
%91 = load i64, i64* %7
%92 = icmp ult i64 %90, %91
br i1 %92, label %93, label %96
93: ; preds = %83
%94 = load i64, i64* %8
%95 = add i64 %94, 1
store i64 %95, i64* %8
br label %96
96: ; preds = %93, %83
%97 = load i64, i64* %10
%98 = load i64, i64* %8
%99 = add i64 %97, %98
%100 = and i64 %99, 4294967295
store i64 %100, i64* %10
%101 = load i64, i64* %10
%102 = load i64, i64* %8
%103 = icmp ult i64 %101, %102
br i1 %103, label %104, label %107
104: ; preds = %96
%105 = load i64, i64* %11
%106 = add i64 %105, 1
store i64 %106, i64* %11
br label %107
107: ; preds = %104, %96
%108 = load i64, i64* %9
%109 = load i64*, i64** %3
%110 = getelementptr inbounds i64, i64* %109, i64 0
store i64 %108, i64* %110
store i64 0, i64* %9
%111 = load i64*, i64** %4
%112 = getelementptr inbounds i64, i64* %111, i64 1
%113 = load i64, i64* %112
%114 = and i64 %113, 65535
store i64 %114, i64* %7
%115 = load i64*, i64** %4
%116 = getelementptr inbounds i64, i64* %115, i64 1
%117 = load i64, i64* %116
%118 = lshr i64 %117, 16
%119 = and i64 %118, 65535
store i64 %119, i64* %8
%120 = load i64*, i64** %4
%121 = getelementptr inbounds i64, i64* %120, i64 0
%122 = load i64, i64* %121
%123 = and i64 %122, 65535
store i64 %123, i64* %5
%124 = load i64*, i64** %4
%125 = getelementptr inbounds i64, i64* %124, i64 0
%126 = load i64, i64* %125
%127 = lshr i64 %126, 16
%128 = and i64 %127, 65535
store i64 %128, i64* %6
%129 = load i64, i64* %7
store i64 %129, i64* %17
%130 = load i64, i64* %8
store i64 %130, i64* %18
%131 = load i64, i64* %6
%132 = load i64, i64* %17
%133 = mul i64 %131, %132
store i64 %133, i64* %15
%134 = load i64, i64* %5
%135 = load i64, i64* %17
%136 = mul i64 %134, %135
store i64 %136, i64* %17
%137 = load i64, i64* %5
%138 = load i64, i64* %18
%139 = mul i64 %137, %138
store i64 %139, i64* %16
%140 = load i64, i64* %6
%141 = load i64, i64* %18
%142 = mul i64 %140, %141
store i64 %142, i64* %18
%143 = load i64, i64* %15
%144 = load i64, i64* %16
%145 = add i64 %143, %144
%146 = and i64 %145, 4294967295
store i64 %146, i64* %15
%147 = load i64, i64* %15
%148 = load i64, i64* %16
%149 = icmp ult i64 %147, %148
br i1 %149, label %150, label %153
150: ; preds = %107
%151 = load i64, i64* %18
%152 = add i64 %151, 65536
store i64 %152, i64* %18
br label %153
153: ; preds = %150, %107
%154 = load i64, i64* %15
%155 = lshr i64 %154, 16
%156 = and i64 %155, 65535
%157 = load i64, i64* %18
%158 = add i64 %157, %156
store i64 %158, i64* %18
%159 = load i64, i64* %15
%160 = and i64 %159, 65535
%161 = shl i64 %160, 16
store i64 %161, i64* %16
%162 = load i64, i64* %17
%163 = load i64, i64* %16
%164 = add i64 %162, %163
%165 = and i64 %164, 4294967295
store i64 %165, i64* %17
%166 = load i64, i64* %17
%167 = load i64, i64* %16
%168 = icmp ult i64 %166, %167
br i1 %168, label %169, label %172
169: ; preds = %153
%170 = load i64, i64* %18
%171 = add i64 %170, 1
store i64 %171, i64* %18
br label %172
172: ; preds = %169, %153
%173 = load i64, i64* %17
store i64 %173, i64* %7
%174 = load i64, i64* %18
store i64 %174, i64* %8
%175 = load i64, i64* %8
%176 = and i64 %175, 2147483648
%177 = icmp ne i64 %176, 0
br i1 %177, label %178, label %181
178: ; preds = %172
%179 = load i64, i64* %9
%180 = add i64 %179, 1
store i64 %180, i64* %9
br label %181
181: ; preds = %178, %172
%182 = load i64, i64* %8
%183 = load i64, i64* %8
%184 = add i64 %182, %183
%185 = and i64 %184, 4294967295
store i64 %185, i64* %8
%186 = load i64, i64* %7
%187 = and i64 %186, 2147483648
%188 = icmp ne i64 %187, 0
br i1 %188, label %189, label %192
189: ; preds = %181
%190 = load i64, i64* %8
%191 = add i64 %190, 1
store i64 %191, i64* %8
br label %192
192: ; preds = %189, %181
%193 = load i64, i64* %7
%194 = load i64, i64* %7
%195 = add i64 %193, %194
%196 = and i64 %195, 4294967295
store i64 %196, i64* %7
%197 = load i64, i64* %10
%198 = load i64, i64* %7
%199 = add i64 %197, %198
%200 = and i64 %199, 4294967295
store i64 %200, i64* %10
%201 = load i64, i64* %10
%202 = load i64, i64* %7
%203 = icmp ult i64 %201, %202
br i1 %203, label %204, label %212
204: ; preds = %192
%205 = load i64, i64* %8
%206 = add i64 %205, 1
store i64 %206, i64* %8
%207 = and i64 %206, 4294967295
%208 = icmp eq i64 %207, 0
br i1 %208, label %209, label %212
209: ; preds = %204
%210 = load i64, i64* %9
%211 = add i64 %210, 1
store i64 %211, i64* %9
br label %212
212: ; preds = %209, %204, %192
%213 = load i64, i64* %11
%214 = load i64, i64* %8
%215 = add i64 %213, %214
%216 = and i64 %215, 4294967295
store i64 %216, i64* %11
%217 = load i64, i64* %11
%218 = load i64, i64* %8
%219 = icmp ult i64 %217, %218
br i1 %219, label %220, label %223
220: ; preds = %212
%221 = load i64, i64* %9
%222 = add i64 %221, 1
store i64 %222, i64* %9
br label %223
223: ; preds = %220, %212
%224 = load i64, i64* %10
%225 = load i64*, i64** %3
%226 = getelementptr inbounds i64, i64* %225, i64 1
store i64 %224, i64* %226
store i64 0, i64* %10
%227 = load i64*, i64** %4
%228 = getelementptr inbounds i64, i64* %227, i64 1
%229 = load i64, i64* %228
store i64 %229, i64* %20
%230 = load i64, i64* %20
%231 = and i64 %230, 65535
store i64 %231, i64* %19
%232 = load i64, i64* %20
%233 = lshr i64 %232, 16
%234 = and i64 %233, 65535
store i64 %234, i64* %20
%235 = load i64, i64* %19
%236 = load i64, i64* %20
%237 = mul i64 %235, %236
store i64 %237, i64* %21
%238 = load i64, i64* %19
%239 = load i64, i64* %19
%240 = mul i64 %239, %238
store i64 %240, i64* %19
%241 = load i64, i64* %20
%242 = load i64, i64* %20
%243 = mul i64 %242, %241
store i64 %243, i64* %20
%244 = load i64, i64* %21
%245 = and i64 %244, 4294934528
%246 = lshr i64 %245, 15
%247 = load i64, i64* %20
%248 = add i64 %247, %246
store i64 %248, i64* %20
%249 = load i64, i64* %21
%250 = and i64 %249, 65535
%251 = shl i64 %250, 17
store i64 %251, i64* %21
%252 = load i64, i64* %19
%253 = load i64, i64* %21
%254 = add i64 %252, %253
%255 = and i64 %254, 4294967295
store i64 %255, i64* %19
%256 = load i64, i64* %19
%257 = load i64, i64* %21
%258 = icmp ult i64 %256, %257
br i1 %258, label %259, label %262
259: ; preds = %223
%260 = load i64, i64* %20
%261 = add i64 %260, 1
store i64 %261, i64* %20
br label %262
262: ; preds = %259, %223
%263 = load i64, i64* %19
store i64 %263, i64* %7
%264 = load i64, i64* %20
store i64 %264, i64* %8
%265 = load i64, i64* %11
%266 = load i64, i64* %7
%267 = add i64 %265, %266
%268 = and i64 %267, 4294967295
store i64 %268, i64* %11
%269 = load i64, i64* %11
%270 = load i64, i64* %7
%271 = icmp ult i64 %269, %270
br i1 %271, label %272, label %275
272: ; preds = %262
%273 = load i64, i64* %8
%274 = add i64 %273, 1
store i64 %274, i64* %8
br label %275
275: ; preds = %272, %262
%276 = load i64, i64* %9
%277 = load i64, i64* %8
%278 = add i64 %276, %277
%279 = and i64 %278, 4294967295
store i64 %279, i64* %9
%280 = load i64, i64* %9
%281 = load i64, i64* %8
%282 = icmp ult i64 %280, %281
br i1 %282, label %283, label %286
283: ; preds = %275
%284 = load i64, i64* %10
%285 = add i64 %284, 1
store i64 %285, i64* %10
br label %286
286: ; preds = %283, %275
%287 = load i64*, i64** %4
%288 = getelementptr inbounds i64, i64* %287, i64 2
%289 = load i64, i64* %288
%290 = and i64 %289, 65535
store i64 %290, i64* %7
%291 = load i64*, i64** %4
%292 = getelementptr inbounds i64, i64* %291, i64 2
%293 = load i64, i64* %292
%294 = lshr i64 %293, 16
%295 = and i64 %294, 65535
store i64 %295, i64* %8
%296 = load i64*, i64** %4
%297 = getelementptr inbounds i64, i64* %296, i64 0
%298 = load i64, i64* %297
%299 = and i64 %298, 65535
store i64 %299, i64* %5
%300 = load i64*, i64** %4
%301 = getelementptr inbounds i64, i64* %300, i64 0
%302 = load i64, i64* %301
%303 = lshr i64 %302, 16
%304 = and i64 %303, 65535
store i64 %304, i64* %6
%305 = load i64, i64* %7
store i64 %305, i64* %24
%306 = load i64, i64* %8
store i64 %306, i64* %25
%307 = load i64, i64* %6
%308 = load i64, i64* %24
%309 = mul i64 %307, %308
store i64 %309, i64* %22
%310 = load i64, i64* %5
%311 = load i64, i64* %24
%312 = mul i64 %310, %311
store i64 %312, i64* %24
%313 = load i64, i64* %5
%314 = load i64, i64* %25
%315 = mul i64 %313, %314
store i64 %315, i64* %23
%316 = load i64, i64* %6
%317 = load i64, i64* %25
%318 = mul i64 %316, %317
store i64 %318, i64* %25
%319 = load i64, i64* %22
%320 = load i64, i64* %23
%321 = add i64 %319, %320
%322 = and i64 %321, 4294967295
store i64 %322, i64* %22
%323 = load i64, i64* %22
%324 = load i64, i64* %23
%325 = icmp ult i64 %323, %324
br i1 %325, label %326, label %329
326: ; preds = %286
%327 = load i64, i64* %25
%328 = add i64 %327, 65536
store i64 %328, i64* %25
br label %329
329: ; preds = %326, %286
%330 = load i64, i64* %22
%331 = lshr i64 %330, 16
%332 = and i64 %331, 65535
%333 = load i64, i64* %25
%334 = add i64 %333, %332
store i64 %334, i64* %25
%335 = load i64, i64* %22
%336 = and i64 %335, 65535
%337 = shl i64 %336, 16
store i64 %337, i64* %23
%338 = load i64, i64* %24
%339 = load i64, i64* %23
%340 = add i64 %338, %339
%341 = and i64 %340, 4294967295
store i64 %341, i64* %24
%342 = load i64, i64* %24
%343 = load i64, i64* %23
%344 = icmp ult i64 %342, %343
br i1 %344, label %345, label %348
345: ; preds = %329
%346 = load i64, i64* %25
%347 = add i64 %346, 1
store i64 %347, i64* %25
br label %348
348: ; preds = %345, %329
%349 = load i64, i64* %24
store i64 %349, i64* %7
%350 = load i64, i64* %25
store i64 %350, i64* %8
%351 = load i64, i64* %8
%352 = and i64 %351, 2147483648
%353 = icmp ne i64 %352, 0
br i1 %353, label %354, label %357
354: ; preds = %348
%355 = load i64, i64* %10
%356 = add i64 %355, 1
store i64 %356, i64* %10
br label %357
357: ; preds = %354, %348
%358 = load i64, i64* %8
%359 = load i64, i64* %8
%360 = add i64 %358, %359
%361 = and i64 %360, 4294967295
store i64 %361, i64* %8
%362 = load i64, i64* %7
%363 = and i64 %362, 2147483648
%364 = icmp ne i64 %363, 0
br i1 %364, label %365, label %368
365: ; preds = %357
%366 = load i64, i64* %8
%367 = add i64 %366, 1
store i64 %367, i64* %8
br label %368
368: ; preds = %365, %357
%369 = load i64, i64* %7
%370 = load i64, i64* %7
%371 = add i64 %369, %370
%372 = and i64 %371, 4294967295
store i64 %372, i64* %7
%373 = load i64, i64* %11
%374 = load i64, i64* %7
%375 = add i64 %373, %374
%376 = and i64 %375, 4294967295
store i64 %376, i64* %11
%377 = load i64, i64* %11
%378 = load i64, i64* %7
%379 = icmp ult i64 %377, %378
br i1 %379, label %380, label %388
380: ; preds = %368
%381 = load i64, i64* %8
%382 = add i64 %381, 1
store i64 %382, i64* %8
%383 = and i64 %382, 4294967295
%384 = icmp eq i64 %383, 0
br i1 %384, label %385, label %388
385: ; preds = %380
%386 = load i64, i64* %10
%387 = add i64 %386, 1
store i64 %387, i64* %10
br label %388
388: ; preds = %385, %380, %368
%389 = load i64, i64* %9
%390 = load i64, i64* %8
%391 = add i64 %389, %390
%392 = and i64 %391, 4294967295
store i64 %392, i64* %9
%393 = load i64, i64* %9
%394 = load i64, i64* %8
%395 = icmp ult i64 %393, %394
br i1 %395, label %396, label %399
396: ; preds = %388
%397 = load i64, i64* %10
%398 = add i64 %397, 1
store i64 %398, i64* %10
br label %399
399: ; preds = %396, %388
%400 = load i64, i64* %11
%401 = load i64*, i64** %3
%402 = getelementptr inbounds i64, i64* %401, i64 2
store i64 %400, i64* %402
store i64 0, i64* %11
%403 = load i64*, i64** %4
%404 = getelementptr inbounds i64, i64* %403, i64 3
%405 = load i64, i64* %404
%406 = and i64 %405, 65535
store i64 %406, i64* %7
%407 = load i64*, i64** %4
%408 = getelementptr inbounds i64, i64* %407, i64 3
%409 = load i64, i64* %408
%410 = lshr i64 %409, 16
%411 = and i64 %410, 65535
store i64 %411, i64* %8
%412 = load i64*, i64** %4
%413 = getelementptr inbounds i64, i64* %412, i64 0
%414 = load i64, i64* %413
%415 = and i64 %414, 65535
store i64 %415, i64* %5
%416 = load i64*, i64** %4
%417 = getelementptr inbounds i64, i64* %416, i64 0
%418 = load i64, i64* %417
%419 = lshr i64 %418, 16
%420 = and i64 %419, 65535
store i64 %420, i64* %6
%421 = load i64, i64* %7
store i64 %421, i64* %28
%422 = load i64, i64* %8
store i64 %422, i64* %29
%423 = load i64, i64* %6
%424 = load i64, i64* %28
%425 = mul i64 %423, %424
store i64 %425, i64* %26
%426 = load i64, i64* %5
%427 = load i64, i64* %28
%428 = mul i64 %426, %427
store i64 %428, i64* %28
%429 = load i64, i64* %5
%430 = load i64, i64* %29
%431 = mul i64 %429, %430
store i64 %431, i64* %27
%432 = load i64, i64* %6
%433 = load i64, i64* %29
%434 = mul i64 %432, %433
store i64 %434, i64* %29
%435 = load i64, i64* %26
%436 = load i64, i64* %27
%437 = add i64 %435, %436
%438 = and i64 %437, 4294967295
store i64 %438, i64* %26
%439 = load i64, i64* %26
%440 = load i64, i64* %27
%441 = icmp ult i64 %439, %440
br i1 %441, label %442, label %445
442: ; preds = %399
%443 = load i64, i64* %29
%444 = add i64 %443, 65536
store i64 %444, i64* %29
br label %445
445: ; preds = %442, %399
%446 = load i64, i64* %26
%447 = lshr i64 %446, 16
%448 = and i64 %447, 65535
%449 = load i64, i64* %29
%450 = add i64 %449, %448
store i64 %450, i64* %29
%451 = load i64, i64* %26
%452 = and i64 %451, 65535
%453 = shl i64 %452, 16
store i64 %453, i64* %27
%454 = load i64, i64* %28
%455 = load i64, i64* %27
%456 = add i64 %454, %455
%457 = and i64 %456, 4294967295
store i64 %457, i64* %28
%458 = load i64, i64* %28
%459 = load i64, i64* %27
%460 = icmp ult i64 %458, %459
br i1 %460, label %461, label %464
461: ; preds = %445
%462 = load i64, i64* %29
%463 = add i64 %462, 1
store i64 %463, i64* %29
br label %464
464: ; preds = %461, %445
%465 = load i64, i64* %28
store i64 %465, i64* %7
%466 = load i64, i64* %29
store i64 %466, i64* %8
%467 = load i64, i64* %8
%468 = and i64 %467, 2147483648
%469 = icmp ne i64 %468, 0
br i1 %469, label %470, label %473
470: ; preds = %464
%471 = load i64, i64* %11
%472 = add i64 %471, 1
store i64 %472, i64* %11
br label %473
473: ; preds = %470, %464
%474 = load i64, i64* %8
%475 = load i64, i64* %8
%476 = add i64 %474, %475
%477 = and i64 %476, 4294967295
store i64 %477, i64* %8
%478 = load i64, i64* %7
%479 = and i64 %478, 2147483648
%480 = icmp ne i64 %479, 0
br i1 %480, label %481, label %484
481: ; preds = %473
%482 = load i64, i64* %8
%483 = add i64 %482, 1
store i64 %483, i64* %8
br label %484
484: ; preds = %481, %473
%485 = load i64, i64* %7
%486 = load i64, i64* %7
%487 = add i64 %485, %486
%488 = and i64 %487, 4294967295
store i64 %488, i64* %7
%489 = load i64, i64* %9
%490 = load i64, i64* %7
%491 = add i64 %489, %490
%492 = and i64 %491, 4294967295
store i64 %492, i64* %9
%493 = load i64, i64* %9
%494 = load i64, i64* %7
%495 = icmp ult i64 %493, %494
br i1 %495, label %496, label %504
496: ; preds = %484
%497 = load i64, i64* %8
%498 = add i64 %497, 1
store i64 %498, i64* %8
%499 = and i64 %498, 4294967295
%500 = icmp eq i64 %499, 0
br i1 %500, label %501, label %504
501: ; preds = %496
%502 = load i64, i64* %11
%503 = add i64 %502, 1
store i64 %503, i64* %11
br label %504
504: ; preds = %501, %496, %484
%505 = load i64, i64* %10
%506 = load i64, i64* %8
%507 = add i64 %505, %506
%508 = and i64 %507, 4294967295
store i64 %508, i64* %10
%509 = load i64, i64* %10
%510 = load i64, i64* %8
%511 = icmp ult i64 %509, %510
br i1 %511, label %512, label %515
512: ; preds = %504
%513 = load i64, i64* %11
%514 = add i64 %513, 1
store i64 %514, i64* %11
br label %515
515: ; preds = %512, %504
%516 = load i64*, i64** %4
%517 = getelementptr inbounds i64, i64* %516, i64 2
%518 = load i64, i64* %517
%519 = and i64 %518, 65535
store i64 %519, i64* %7
%520 = load i64*, i64** %4
%521 = getelementptr inbounds i64, i64* %520, i64 2
%522 = load i64, i64* %521
%523 = lshr i64 %522, 16
%524 = and i64 %523, 65535
store i64 %524, i64* %8
%525 = load i64*, i64** %4
%526 = getelementptr inbounds i64, i64* %525, i64 1
%527 = load i64, i64* %526
%528 = and i64 %527, 65535
store i64 %528, i64* %5
%529 = load i64*, i64** %4
%530 = getelementptr inbounds i64, i64* %529, i64 1
%531 = load i64, i64* %530
%532 = lshr i64 %531, 16
%533 = and i64 %532, 65535
store i64 %533, i64* %6
%534 = load i64, i64* %7
store i64 %534, i64* %32
%535 = load i64, i64* %8
store i64 %535, i64* %33
%536 = load i64, i64* %6
%537 = load i64, i64* %32
%538 = mul i64 %536, %537
store i64 %538, i64* %30
%539 = load i64, i64* %5
%540 = load i64, i64* %32
%541 = mul i64 %539, %540
store i64 %541, i64* %32
%542 = load i64, i64* %5
%543 = load i64, i64* %33
%544 = mul i64 %542, %543
store i64 %544, i64* %31
%545 = load i64, i64* %6
%546 = load i64, i64* %33
%547 = mul i64 %545, %546
store i64 %547, i64* %33
%548 = load i64, i64* %30
%549 = load i64, i64* %31
%550 = add i64 %548, %549
%551 = and i64 %550, 4294967295
store i64 %551, i64* %30
%552 = load i64, i64* %30
%553 = load i64, i64* %31
%554 = icmp ult i64 %552, %553
br i1 %554, label %555, label %558
555: ; preds = %515
%556 = load i64, i64* %33
%557 = add i64 %556, 65536
store i64 %557, i64* %33
br label %558
558: ; preds = %555, %515
%559 = load i64, i64* %30
%560 = lshr i64 %559, 16
%561 = and i64 %560, 65535
%562 = load i64, i64* %33
%563 = add i64 %562, %561
store i64 %563, i64* %33
%564 = load i64, i64* %30
%565 = and i64 %564, 65535
%566 = shl i64 %565, 16
store i64 %566, i64* %31
%567 = load i64, i64* %32
%568 = load i64, i64* %31
%569 = add i64 %567, %568
%570 = and i64 %569, 4294967295
store i64 %570, i64* %32
%571 = load i64, i64* %32
%572 = load i64, i64* %31
%573 = icmp ult i64 %571, %572
br i1 %573, label %574, label %577
574: ; preds = %558
%575 = load i64, i64* %33
%576 = add i64 %575, 1
store i64 %576, i64* %33
br label %577
577: ; preds = %574, %558
%578 = load i64, i64* %32
store i64 %578, i64* %7
%579 = load i64, i64* %33
store i64 %579, i64* %8
%580 = load i64, i64* %8
%581 = and i64 %580, 2147483648
%582 = icmp ne i64 %581, 0
br i1 %582, label %583, label %586
583: ; preds = %577
%584 = load i64, i64* %11
%585 = add i64 %584, 1
store i64 %585, i64* %11
br label %586
586: ; preds = %583, %577
%587 = load i64, i64* %8
%588 = load i64, i64* %8
%589 = add i64 %587, %588
%590 = and i64 %589, 4294967295
store i64 %590, i64* %8
%591 = load i64, i64* %7
%592 = and i64 %591, 2147483648
%593 = icmp ne i64 %592, 0
br i1 %593, label %594, label %597
594: ; preds = %586
%595 = load i64, i64* %8
%596 = add i64 %595, 1
store i64 %596, i64* %8
br label %597
597: ; preds = %594, %586
%598 = load i64, i64* %7
%599 = load i64, i64* %7
%600 = add i64 %598, %599
%601 = and i64 %600, 4294967295
store i64 %601, i64* %7
%602 = load i64, i64* %9
%603 = load i64, i64* %7
%604 = add i64 %602, %603
%605 = and i64 %604, 4294967295
store i64 %605, i64* %9
%606 = load i64, i64* %9
%607 = load i64, i64* %7
%608 = icmp ult i64 %606, %607
br i1 %608, label %609, label %617
609: ; preds = %597
%610 = load i64, i64* %8
%611 = add i64 %610, 1
store i64 %611, i64* %8
%612 = and i64 %611, 4294967295
%613 = icmp eq i64 %612, 0
br i1 %613, label %614, label %617
614: ; preds = %609
%615 = load i64, i64* %11
%616 = add i64 %615, 1
store i64 %616, i64* %11
br label %617
617: ; preds = %614, %609, %597
%618 = load i64, i64* %10
%619 = load i64, i64* %8
%620 = add i64 %618, %619
%621 = and i64 %620, 4294967295
store i64 %621, i64* %10
%622 = load i64, i64* %10
%623 = load i64, i64* %8
%624 = icmp ult i64 %622, %623
br i1 %624, label %625, label %628
625: ; preds = %617
%626 = load i64, i64* %11
%627 = add i64 %626, 1
store i64 %627, i64* %11
br label %628
628: ; preds = %625, %617
%629 = load i64, i64* %9
%630 = load i64*, i64** %3
%631 = getelementptr inbounds i64, i64* %630, i64 3
store i64 %629, i64* %631
store i64 0, i64* %9
%632 = load i64*, i64** %4
%633 = getelementptr inbounds i64, i64* %632, i64 2
%634 = load i64, i64* %633
store i64 %634, i64* %35
%635 = load i64, i64* %35
%636 = and i64 %635, 65535
store i64 %636, i64* %34
%637 = load i64, i64* %35
%638 = lshr i64 %637, 16
%639 = and i64 %638, 65535
store i64 %639, i64* %35
%640 = load i64, i64* %34
%641 = load i64, i64* %35
%642 = mul i64 %640, %641
store i64 %642, i64* %36
%643 = load i64, i64* %34
%644 = load i64, i64* %34
%645 = mul i64 %644, %643
store i64 %645, i64* %34
%646 = load i64, i64* %35
%647 = load i64, i64* %35
%648 = mul i64 %647, %646
store i64 %648, i64* %35
%649 = load i64, i64* %36
%650 = and i64 %649, 4294934528
%651 = lshr i64 %650, 15
%652 = load i64, i64* %35
%653 = add i64 %652, %651
store i64 %653, i64* %35
%654 = load i64, i64* %36
%655 = and i64 %654, 65535
%656 = shl i64 %655, 17
store i64 %656, i64* %36
%657 = load i64, i64* %34
%658 = load i64, i64* %36
%659 = add i64 %657, %658
%660 = and i64 %659, 4294967295
store i64 %660, i64* %34
%661 = load i64, i64* %34
%662 = load i64, i64* %36
%663 = icmp ult i64 %661, %662
br i1 %663, label %664, label %667
664: ; preds = %628
%665 = load i64, i64* %35
%666 = add i64 %665, 1
store i64 %666, i64* %35
br label %667
667: ; preds = %664, %628
%668 = load i64, i64* %34
store i64 %668, i64* %7
%669 = load i64, i64* %35
store i64 %669, i64* %8
%670 = load i64, i64* %10
%671 = load i64, i64* %7
%672 = add i64 %670, %671
%673 = and i64 %672, 4294967295
store i64 %673, i64* %10
%674 = load i64, i64* %10
%675 = load i64, i64* %7
%676 = icmp ult i64 %674, %675
br i1 %676, label %677, label %680
677: ; preds = %667
%678 = load i64, i64* %8
%679 = add i64 %678, 1
store i64 %679, i64* %8
br label %680
680: ; preds = %677, %667
%681 = load i64, i64* %11
%682 = load i64, i64* %8
%683 = add i64 %681, %682
%684 = and i64 %683, 4294967295
store i64 %684, i64* %11
%685 = load i64, i64* %11
%686 = load i64, i64* %8
%687 = icmp ult i64 %685, %686
br i1 %687, label %688, label %691
688: ; preds = %680
%689 = load i64, i64* %9
%690 = add i64 %689, 1
store i64 %690, i64* %9
br label %691
691: ; preds = %688, %680
%692 = load i64*, i64** %4
%693 = getelementptr inbounds i64, i64* %692, i64 3
%694 = load i64, i64* %693
%695 = and i64 %694, 65535
store i64 %695, i64* %7
%696 = load i64*, i64** %4
%697 = getelementptr inbounds i64, i64* %696, i64 3
%698 = load i64, i64* %697
%699 = lshr i64 %698, 16
%700 = and i64 %699, 65535
store i64 %700, i64* %8
%701 = load i64*, i64** %4
%702 = getelementptr inbounds i64, i64* %701, i64 1
%703 = load i64, i64* %702
%704 = and i64 %703, 65535
store i64 %704, i64* %5
%705 = load i64*, i64** %4
%706 = getelementptr inbounds i64, i64* %705, i64 1
%707 = load i64, i64* %706
%708 = lshr i64 %707, 16
%709 = and i64 %708, 65535
store i64 %709, i64* %6
%710 = load i64, i64* %7
store i64 %710, i64* %39
%711 = load i64, i64* %8
store i64 %711, i64* %40
%712 = load i64, i64* %6
%713 = load i64, i64* %39
%714 = mul i64 %712, %713
store i64 %714, i64* %37
%715 = load i64, i64* %5
%716 = load i64, i64* %39
%717 = mul i64 %715, %716
store i64 %717, i64* %39
%718 = load i64, i64* %5
%719 = load i64, i64* %40
%720 = mul i64 %718, %719
store i64 %720, i64* %38
%721 = load i64, i64* %6
%722 = load i64, i64* %40
%723 = mul i64 %721, %722
store i64 %723, i64* %40
%724 = load i64, i64* %37
%725 = load i64, i64* %38
%726 = add i64 %724, %725
%727 = and i64 %726, 4294967295
store i64 %727, i64* %37
%728 = load i64, i64* %37
%729 = load i64, i64* %38
%730 = icmp ult i64 %728, %729
br i1 %730, label %731, label %734
731: ; preds = %691
%732 = load i64, i64* %40
%733 = add i64 %732, 65536
store i64 %733, i64* %40
br label %734
734: ; preds = %731, %691
%735 = load i64, i64* %37
%736 = lshr i64 %735, 16
%737 = and i64 %736, 65535
%738 = load i64, i64* %40
%739 = add i64 %738, %737
store i64 %739, i64* %40
%740 = load i64, i64* %37
%741 = and i64 %740, 65535
%742 = shl i64 %741, 16
store i64 %742, i64* %38
%743 = load i64, i64* %39
%744 = load i64, i64* %38
%745 = add i64 %743, %744
%746 = and i64 %745, 4294967295
store i64 %746, i64* %39
%747 = load i64, i64* %39
%748 = load i64, i64* %38
%749 = icmp ult i64 %747, %748
br i1 %749, label %750, label %753
750: ; preds = %734
%751 = load i64, i64* %40
%752 = add i64 %751, 1
store i64 %752, i64* %40
br label %753
753: ; preds = %750, %734
%754 = load i64, i64* %39
store i64 %754, i64* %7
%755 = load i64, i64* %40
store i64 %755, i64* %8
%756 = load i64, i64* %8
%757 = and i64 %756, 2147483648
%758 = icmp ne i64 %757, 0
br i1 %758, label %759, label %762
759: ; preds = %753
%760 = load i64, i64* %9
%761 = add i64 %760, 1
store i64 %761, i64* %9
br label %762
762: ; preds = %759, %753
%763 = load i64, i64* %8
%764 = load i64, i64* %8
%765 = add i64 %763, %764
%766 = and i64 %765, 4294967295
store i64 %766, i64* %8
%767 = load i64, i64* %7
%768 = and i64 %767, 2147483648
%769 = icmp ne i64 %768, 0
br i1 %769, label %770, label %773
770: ; preds = %762
%771 = load i64, i64* %8
%772 = add i64 %771, 1
store i64 %772, i64* %8
br label %773
773: ; preds = %770, %762
%774 = load i64, i64* %7
%775 = load i64, i64* %7
%776 = add i64 %774, %775
%777 = and i64 %776, 4294967295
store i64 %777, i64* %7
%778 = load i64, i64* %10
%779 = load i64, i64* %7
%780 = add i64 %778, %779
%781 = and i64 %780, 4294967295
store i64 %781, i64* %10
%782 = load i64, i64* %10
%783 = load i64, i64* %7
%784 = icmp ult i64 %782, %783
br i1 %784, label %785, label %793
785: ; preds = %773
%786 = load i64, i64* %8
%787 = add i64 %786, 1
store i64 %787, i64* %8
%788 = and i64 %787, 4294967295
%789 = icmp eq i64 %788, 0
br i1 %789, label %790, label %793
790: ; preds = %785
%791 = load i64, i64* %9
%792 = add i64 %791, 1
store i64 %792, i64* %9
br label %793
793: ; preds = %790, %785, %773
%794 = load i64, i64* %11
%795 = load i64, i64* %8
%796 = add i64 %794, %795
%797 = and i64 %796, 4294967295
store i64 %797, i64* %11
%798 = load i64, i64* %11
%799 = load i64, i64* %8
%800 = icmp ult i64 %798, %799
br i1 %800, label %801, label %804
801: ; preds = %793
%802 = load i64, i64* %9
%803 = add i64 %802, 1
store i64 %803, i64* %9
br label %804
804: ; preds = %801, %793
%805 = load i64, i64* %10
%806 = load i64*, i64** %3
%807 = getelementptr inbounds i64, i64* %806, i64 4
store i64 %805, i64* %807
store i64 0, i64* %10
%808 = load i64*, i64** %4
%809 = getelementptr inbounds i64, i64* %808, i64 3
%810 = load i64, i64* %809
%811 = and i64 %810, 65535
store i64 %811, i64* %7
%812 = load i64*, i64** %4
%813 = getelementptr inbounds i64, i64* %812, i64 3
%814 = load i64, i64* %813
%815 = lshr i64 %814, 16
%816 = and i64 %815, 65535
store i64 %816, i64* %8
%817 = load i64*, i64** %4
%818 = getelementptr inbounds i64, i64* %817, i64 2
%819 = load i64, i64* %818
%820 = and i64 %819, 65535
store i64 %820, i64* %5
%821 = load i64*, i64** %4
%822 = getelementptr inbounds i64, i64* %821, i64 2
%823 = load i64, i64* %822
%824 = lshr i64 %823, 16
%825 = and i64 %824, 65535
store i64 %825, i64* %6
%826 = load i64, i64* %7
store i64 %826, i64* %43
%827 = load i64, i64* %8
store i64 %827, i64* %44
%828 = load i64, i64* %6
%829 = load i64, i64* %43
%830 = mul i64 %828, %829
store i64 %830, i64* %41
%831 = load i64, i64* %5
%832 = load i64, i64* %43
%833 = mul i64 %831, %832
store i64 %833, i64* %43
%834 = load i64, i64* %5
%835 = load i64, i64* %44
%836 = mul i64 %834, %835
store i64 %836, i64* %42
%837 = load i64, i64* %6
%838 = load i64, i64* %44
%839 = mul i64 %837, %838
store i64 %839, i64* %44
%840 = load i64, i64* %41
%841 = load i64, i64* %42
%842 = add i64 %840, %841
%843 = and i64 %842, 4294967295
store i64 %843, i64* %41
%844 = load i64, i64* %41
%845 = load i64, i64* %42
%846 = icmp ult i64 %844, %845
br i1 %846, label %847, label %850
847: ; preds = %804
%848 = load i64, i64* %44
%849 = add i64 %848, 65536
store i64 %849, i64* %44
br label %850
850: ; preds = %847, %804
%851 = load i64, i64* %41
%852 = lshr i64 %851, 16
%853 = and i64 %852, 65535
%854 = load i64, i64* %44
%855 = add i64 %854, %853
store i64 %855, i64* %44
%856 = load i64, i64* %41
%857 = and i64 %856, 65535
%858 = shl i64 %857, 16
store i64 %858, i64* %42
%859 = load i64, i64* %43
%860 = load i64, i64* %42
%861 = add i64 %859, %860
%862 = and i64 %861, 4294967295
store i64 %862, i64* %43
%863 = load i64, i64* %43
%864 = load i64, i64* %42
%865 = icmp ult i64 %863, %864
br i1 %865, label %866, label %869
866: ; preds = %850
%867 = load i64, i64* %44
%868 = add i64 %867, 1
store i64 %868, i64* %44
br label %869
869: ; preds = %866, %850
%870 = load i64, i64* %43
store i64 %870, i64* %7
%871 = load i64, i64* %44
store i64 %871, i64* %8
%872 = load i64, i64* %8
%873 = and i64 %872, 2147483648
%874 = icmp ne i64 %873, 0
br i1 %874, label %875, label %878
875: ; preds = %869
%876 = load i64, i64* %10
%877 = add i64 %876, 1
store i64 %877, i64* %10
br label %878
878: ; preds = %875, %869
%879 = load i64, i64* %8
%880 = load i64, i64* %8
%881 = add i64 %879, %880
%882 = and i64 %881, 4294967295
store i64 %882, i64* %8
%883 = load i64, i64* %7
%884 = and i64 %883, 2147483648
%885 = icmp ne i64 %884, 0
br i1 %885, label %886, label %889
886: ; preds = %878
%887 = load i64, i64* %8
%888 = add i64 %887, 1
store i64 %888, i64* %8
br label %889
889: ; preds = %886, %878
%890 = load i64, i64* %7
%891 = load i64, i64* %7
%892 = add i64 %890, %891
%893 = and i64 %892, 4294967295
store i64 %893, i64* %7
%894 = load i64, i64* %11
%895 = load i64, i64* %7
%896 = add i64 %894, %895
%897 = and i64 %896, 4294967295
store i64 %897, i64* %11
%898 = load i64, i64* %11
%899 = load i64, i64* %7
%900 = icmp ult i64 %898, %899
br i1 %900, label %901, label %909
901: ; preds = %889
%902 = load i64, i64* %8
%903 = add i64 %902, 1
store i64 %903, i64* %8
%904 = and i64 %903, 4294967295
%905 = icmp eq i64 %904, 0
br i1 %905, label %906, label %909
906: ; preds = %901
%907 = load i64, i64* %10
%908 = add i64 %907, 1
store i64 %908, i64* %10
br label %909
909: ; preds = %906, %901, %889
%910 = load i64, i64* %9
%911 = load i64, i64* %8
%912 = add i64 %910, %911
%913 = and i64 %912, 4294967295
store i64 %913, i64* %9
%914 = load i64, i64* %9
%915 = load i64, i64* %8
%916 = icmp ult i64 %914, %915
br i1 %916, label %917, label %920
917: ; preds = %909
%918 = load i64, i64* %10
%919 = add i64 %918, 1
store i64 %919, i64* %10
br label %920
920: ; preds = %917, %909
%921 = load i64, i64* %11
%922 = load i64*, i64** %3
%923 = getelementptr inbounds i64, i64* %922, i64 5
store i64 %921, i64* %923
store i64 0, i64* %11
%924 = load i64*, i64** %4
%925 = getelementptr inbounds i64, i64* %924, i64 3
%926 = load i64, i64* %925
store i64 %926, i64* %46
%927 = load i64, i64* %46
%928 = and i64 %927, 65535
store i64 %928, i64* %45
%929 = load i64, i64* %46
%930 = lshr i64 %929, 16
%931 = and i64 %930, 65535
store i64 %931, i64* %46
%932 = load i64, i64* %45
%933 = load i64, i64* %46
%934 = mul i64 %932, %933
store i64 %934, i64* %47
%935 = load i64, i64* %45
%936 = load i64, i64* %45
%937 = mul i64 %936, %935
store i64 %937, i64* %45
%938 = load i64, i64* %46
%939 = load i64, i64* %46
%940 = mul i64 %939, %938
store i64 %940, i64* %46
%941 = load i64, i64* %47
%942 = and i64 %941, 4294934528
%943 = lshr i64 %942, 15
%944 = load i64, i64* %46
%945 = add i64 %944, %943
store i64 %945, i64* %46
%946 = load i64, i64* %47
%947 = and i64 %946, 65535
%948 = shl i64 %947, 17
store i64 %948, i64* %47
%949 = load i64, i64* %45
%950 = load i64, i64* %47
%951 = add i64 %949, %950
%952 = and i64 %951, 4294967295
store i64 %952, i64* %45
%953 = load i64, i64* %45
%954 = load i64, i64* %47
%955 = icmp ult i64 %953, %954
br i1 %955, label %956, label %959
956: ; preds = %920
%957 = load i64, i64* %46
%958 = add i64 %957, 1
store i64 %958, i64* %46
br label %959
959: ; preds = %956, %920
%960 = load i64, i64* %45
store i64 %960, i64* %7
%961 = load i64, i64* %46
store i64 %961, i64* %8
%962 = load i64, i64* %9
%963 = load i64, i64* %7
%964 = add i64 %962, %963
%965 = and i64 %964, 4294967295
store i64 %965, i64* %9
%966 = load i64, i64* %9
%967 = load i64, i64* %7
%968 = icmp ult i64 %966, %967
br i1 %968, label %969, label %972
969: ; preds = %959
%970 = load i64, i64* %8
%971 = add i64 %970, 1
store i64 %971, i64* %8
br label %972
972: ; preds = %969, %959
%973 = load i64, i64* %10
%974 = load i64, i64* %8
%975 = add i64 %973, %974
%976 = and i64 %975, 4294967295
store i64 %976, i64* %10
%977 = load i64, i64* %10
%978 = load i64, i64* %8
%979 = icmp ult i64 %977, %978
br i1 %979, label %980, label %983
980: ; preds = %972
%981 = load i64, i64* %11
%982 = add i64 %981, 1
store i64 %982, i64* %11
br label %983
983: ; preds = %980, %972
%984 = load i64, i64* %9
%985 = load i64*, i64** %3
%986 = getelementptr inbounds i64, i64* %985, i64 6
store i64 %984, i64* %986
%987 = load i64, i64* %10
%988 = load i64*, i64** %3
%989 = getelementptr inbounds i64, i64* %988, i64 7
store i64 %987, i64* %989
ret void
}

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