// File: /workspace/github_cpp_makefile_star2_O3/ricbit[P]dlx/cover_mrv.cc
// Function: ExactCover::run()
long run() {
    long count = 0;
    int p, i, value;
  //d1:
    int l = 0;
  d2:
    if (header[0].rlink == 0) {
      count++;
      goto d8;
    }
  //d3:
    i = header[0].rlink;
    value = nodes[i].top;
    for (int p = header[i].rlink; p != 0; p = header[p].rlink) {
      if (nodes[p].top < value) {
        i = p;
        value = nodes[p].top;
        if (value == 0) {
          break;
        }
      }
    }
  //d4:
    cover(i);
    solution[l] = nodes[i].dlink;
  d5:
    if (solution[l] == i) {
      goto d7;
    }
    p = solution[l] + 1;
    while (p != solution[l]) {
      int j = nodes[p].top;
      if (j <= 0) {
        p = nodes[p].ulink;
      } else {
        cover(j);
        p++;
      }
    }
    l++;
    goto d2;
  d6:
    p = solution[l] - 1;
    while (p != solution[l]) {
      int j = nodes[p].top;
      if (j <= 0) {
        p = nodes[p].dlink;
      } else {
        uncover(j);
        p--;
      }
    }
    i = nodes[solution[l]].top;
    solution[l] = nodes[solution[l]].dlink;
    goto d5;
  d7:
    uncover(i);
  d8:
    if (l == 0) {
      return count;
    }
    l--;
    if (nodes[solution[l]].top == 0) {
      goto d5;
    }
    goto d6;
  }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
xorl %r13d, %r13d
movq $0x0, (%rsp)
movq (%rbx), %rax
movslq 0x24(%rax), %r12
testq %r12, %r12
je 0x28c8
leaq (%r12,%r12,4), %rcx
movl 0x24(%rax,%rcx,8), %ecx
testl %ecx, %ecx
je 0x28ce
movq 0x18(%rbx), %rdx
leaq (%r12,%r12,2), %rsi
movl (%rdx,%rsi,4), %esi
movslq %ecx, %r14
leaq (%r14,%r14,2), %rdi
movl (%rdx,%rdi,4), %edi
cmpl %esi, %edi
jge 0x28b7
movl %ecx, %r12d
movl %edi, %esi
testl %edi, %edi
je 0x28d3
leaq (%r14,%r14,4), %rcx
movl 0x24(%rax,%rcx,8), %ecx
testl %ecx, %ecx
jne 0x28a0
movslq %r12d, %r14
jmp 0x28d6
incq (%rsp)
jmp 0x28fa
movq %r12, %r14
jmp 0x28d6
movl %ecx, %r12d
movq %rbx, %rdi
movl %r12d, %esi
callq 0x3b70
movq 0x18(%rbx), %rdx
leaq (%r14,%r14,2), %rcx
movq 0x30(%rbx), %rax
movslq %r13d, %rbp
movl %r12d, %r14d
movl 0x8(%rdx,%rcx,4), %r15d
jmp 0x296c
testl %r13d, %r13d
je 0x29c4
movq 0x30(%rbx), %rax
movslq %r13d, %rbp
movq 0x18(%rbx), %rcx
decl %r13d
movslq -0x4(%rax,%rbp,4), %r15
decq %rbp
leaq (%r15,%r15,2), %rdx
cmpl $0x0, (%rcx,%rdx,4)
je 0x2970
leal -0x1(%r15), %r14d
movq 0x18(%rbx), %rcx
movslq %r14d, %rdx
leaq (%rdx,%rdx,2), %rdx
movl (%rcx,%rdx,4), %esi
testl %esi, %esi
jle 0x294a
movq %rbx, %rdi
callq 0x3bde
movq 0x30(%rbx), %rax
decl %r14d
jmp 0x2952
leaq (%rcx,%rdx,4), %rcx
movl 0x8(%rcx), %r14d
cmpl (%rax,%rbp,4), %r14d
jne 0x2927
movq 0x18(%rbx), %rcx
movslq %r14d, %rdx
leaq (%rdx,%rdx,2), %rdx
movl 0x8(%rcx,%rdx,4), %r15d
movl (%rcx,%rdx,4), %r14d
movl %r15d, (%rax,%rbp,4)
cmpl %r14d, %r15d
jne 0x2988
movq %rbx, %rdi
movl %r15d, %esi
callq 0x3bde
movl %r15d, %r14d
jmp 0x28fa
incl %r15d
movq 0x18(%rbx), %rcx
movslq %r15d, %rdx
leaq (%rdx,%rdx,2), %rdx
movl (%rcx,%rdx,4), %esi
testl %esi, %esi
jle 0x29ae
movq %rbx, %rdi
callq 0x3b70
movq 0x30(%rbx), %rax
incl %r15d
jmp 0x29b6
leaq (%rcx,%rdx,4), %rcx
movl 0x4(%rcx), %r15d
cmpl (%rax,%rbp,4), %r15d
jne 0x298b
incl %r13d
jmp 0x287d
movq (%rsp), %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop