// File: canzarlab[P]Trajan/src/IndependentSetConstraint.cpp
// Function: IndependentSetConstraint::DFSRight[abi:cxx11](newick_node*, newick_node*)
dLN IndependentSetConstraint::DFSRight(newick_node* nodel, newick_node* noder)
{
    double w = D[nodel->taxoni][noder->taxoni], sum = 0;
    LN V;

    for (newick_child* child = noder->child; child; child = child->next)
    {
        double ww;
        LN T;
        tie(ww, T) = DFSRight(nodel, child->node);
        sum += ww;
        V.splice(V.begin(), T);
    }

    if (sum > w)
        return make_pair(sum, V);
    return make_pair(w, LN(1, noder));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0x100(%rbp)
movq %rdi, %rax
movq %rax, -0xf8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0xf0(%rbp)
addq $0x38, %rdi
movq -0x18(%rbp), %rax
movslq 0x28(%rax), %rsi
callq 0x9a070
movq %rax, %rdi
movq -0x20(%rbp), %rax
movslq 0x28(%rax), %rsi
callq 0x9a090
movsd (%rax), %xmm0
movsd %xmm0, -0x28(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
leaq -0x48(%rbp), %rdi
callq 0xc0fd0
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0xc0c74
leaq -0x70(%rbp), %rdi
callq 0xc0fd0
movq -0xf0(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x50(%rbp), %rax
movq (%rax), %rcx
leaq -0x90(%rbp), %rdi
callq 0xc0b10
jmp 0xc0bc1
leaq -0xb0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
leaq -0x70(%rbp), %rdx
callq 0xc0ff0
leaq -0xb0(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0xc1030
leaq -0x90(%rbp), %rdi
callq 0xc0f70
movsd -0x58(%rbp), %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
leaq -0x48(%rbp), %rdi
callq 0xc0ea0
movq %rax, -0xc0(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xc10e0
movq -0xb8(%rbp), %rsi
leaq -0x48(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0xc10a0
leaq -0x70(%rbp), %rdi
callq 0xc1100
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0xc0b8d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0xc1100
jmp 0xc0d83
movsd -0x30(%rbp), %xmm0
ucomisd -0x28(%rbp), %xmm0
jbe 0xc0cbc
movq -0x100(%rbp), %rdi
leaq -0x30(%rbp), %rsi
leaq -0x48(%rbp), %rdx
callq 0xc1120
jmp 0xc0c96
movl $0x1, -0xc4(%rbp)
jmp 0xc0d6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xc0d83
leaq -0xe1(%rbp), %rdi
movq %rdi, -0x108(%rbp)
callq 0x9aa30
movq -0x108(%rbp), %rcx
leaq -0xe0(%rbp), %rdi
movl $0x1, %esi
leaq -0x20(%rbp), %rdx
callq 0xc11a0
jmp 0xc0ced
movq -0x100(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0xc1160
jmp 0xc0d06
leaq -0xe0(%rbp), %rdi
callq 0xc1100
leaq -0xe1(%rbp), %rdi
callq 0x10c60
movl $0x1, -0xc4(%rbp)
jmp 0xc0d6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xc0d5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0xc1100
leaq -0xe1(%rbp), %rdi
callq 0x10c60
jmp 0xc0d83
leaq -0x48(%rbp), %rdi
callq 0xc1100
movq -0xf8(%rbp), %rax
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
leaq -0x48(%rbp), %rdi
callq 0xc1100
movq -0x98(%rbp), %rdi
callq 0xa7c0
nopl (%rax,%rax)