// File: fjamour[P]icentral/src/graph_hash_t.cc
// Function: graph_hash_t::find_pruning_counts_exp(unsigned int, unsigned int, int&, int&, int&)
void graph_hash_t::find_pruning_counts_exp(node_id_t src,
                                        node_id_t dst,
                                        int& d0_cnt,
                                        int& d1_cnt,
                                        int& d2_cnt)
{
    //IMP: the edge (src, dst) must not be in the graph
    //else doesn't make sense to count pruned BFS's
    bool insert = has_edge(src, dst);
    remove_edge(src, dst);
    tr1_map_t(int) d_src_vec, d_dst_vec;
    find_sssp(src, d_src_vec);
    find_sssp(dst, d_dst_vec);
    d0_cnt = 0;
    d1_cnt = 0;
    d2_cnt = 0;
    for(graph_hash_t::nodes_map_t::iterator
                        it =  nodes_map.begin();
                        it != nodes_map.end();
                        ++it) {
        node_id_t s = it->first;
        int diff = d_src_vec[s] - d_dst_vec[s];
        int abs_diff = abs(diff);
        switch(abs_diff) {
            case 0:  d0_cnt++; break;
            case 1:  d1_cnt++; break;
            default: d2_cnt++;
        }
    }
    if(insert)
        insert_edge(src, dst);
}

// Assembly:
subq $0x148, %rsp            # imm = 0x148
movq %rdi, 0x140(%rsp)
movl %esi, 0x13c(%rsp)
movl %edx, 0x138(%rsp)
movq %rcx, 0x130(%rsp)
movq %r8, 0x128(%rsp)
movq %r9, 0x120(%rsp)
movq 0x140(%rsp), %rdi
movq %rdi, 0x58(%rsp)
movl 0x13c(%rsp), %esi
movl 0x138(%rsp), %edx
callq 0x52960
movq 0x58(%rsp), %rdi
movb %al, 0x11f(%rsp)
movl 0x13c(%rsp), %esi
movl 0x138(%rsp), %edx
callq 0x52580
leaq 0xe5(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x3af60
movq 0x60(%rsp), %r8
leaq 0xe8(%rsp), %rdi
movl $0xa, %esi
leaq 0xe7(%rsp), %rdx
leaq 0xe6(%rsp), %rcx
callq 0x3af70
jmp 0x537af
leaq 0xe5(%rsp), %rdi
callq 0x326b0
leaq 0x9d(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x3af60
movq 0x50(%rsp), %r8
leaq 0xa0(%rsp), %rdi
movl $0xa, %esi
leaq 0x9f(%rsp), %rdx
leaq 0x9e(%rsp), %rcx
callq 0x3af70
jmp 0x537f7
leaq 0x9d(%rsp), %rdi
callq 0x326b0
movq 0x58(%rsp), %rdi
movl 0x13c(%rsp), %esi
leaq 0xe8(%rsp), %rdx
callq 0x53400
jmp 0x5381f
movq 0x58(%rsp), %rdi
movl 0x138(%rsp), %esi
leaq 0xa0(%rsp), %rdx
callq 0x53400
jmp 0x5383a
movq 0x58(%rsp), %rdi
movq 0x130(%rsp), %rax
movl $0x0, (%rax)
movq 0x128(%rsp), %rax
movl $0x0, (%rax)
movq 0x120(%rsp), %rax
movl $0x0, (%rax)
callq 0x2d6b0
movq %rdx, 0x40(%rsp)
movq %rax, 0x48(%rsp)
jmp 0x5387a
movq 0x40(%rsp), %rax
movq 0x48(%rsp), %rcx
movq %rcx, 0x88(%rsp)
movq %rax, 0x90(%rsp)
movq 0x58(%rsp), %rdi
callq 0x2d710
movq %rdx, 0x30(%rsp)
movq %rax, 0x38(%rsp)
jmp 0x538aa
movq 0x30(%rsp), %rax
movq 0x38(%rsp), %rcx
movq %rcx, 0x78(%rsp)
movq %rax, 0x80(%rsp)
leaq 0x88(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0x2d6f0
movb %al, 0x2f(%rsp)
jmp 0x538d9
movb 0x2f(%rsp), %al
testb $0x1, %al
jne 0x538e6
jmp 0x53a3f
leaq 0x88(%rsp), %rdi
callq 0x2d750
movq %rax, 0x20(%rsp)
jmp 0x538fa
movq 0x20(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x74(%rsp)
leaq 0xe8(%rsp), %rdi
leaq 0x74(%rsp), %rsi
callq 0x2d870
movq %rax, 0x18(%rsp)
jmp 0x5391e
movq 0x18(%rsp), %rax
movl (%rax), %eax
movl %eax, 0xc(%rsp)
leaq 0xa0(%rsp), %rdi
leaq 0x74(%rsp), %rsi
callq 0x2d870
movq %rax, 0x10(%rsp)
jmp 0x53942
movl 0xc(%rsp), %eax
movq 0x10(%rsp), %rcx
movl (%rcx), %ecx
subl %ecx, %eax
movl %eax, 0x70(%rsp)
movl 0x70(%rsp), %eax
movl %eax, %ecx
negl %ecx
cmovnsl %ecx, %eax
movl %eax, 0x6c(%rsp)
movl 0x6c(%rsp), %eax
movl %eax, 0x8(%rsp)
testl %eax, %eax
je 0x539f8
jmp 0x53974
movl 0x8(%rsp), %eax
subl $0x1, %eax
je 0x53a09
jmp 0x53a1a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xd8(%rsp)
movl %eax, 0xd4(%rsp)
leaq 0xe5(%rsp), %rdi
callq 0x326b0
jmp 0x53a94
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xd8(%rsp)
movl %eax, 0xd4(%rsp)
leaq 0x9d(%rsp), %rdi
callq 0x326b0
jmp 0x53a87
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xd8(%rsp)
movl %eax, 0xd4(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x3afb0
jmp 0x53a87
movq 0x130(%rsp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x53a29
movq 0x128(%rsp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x53a29
movq 0x120(%rsp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x53a2b
leaq 0x88(%rsp), %rdi
callq 0x2d760
jmp 0x53a3a
jmp 0x53894
testb $0x1, 0x11f(%rsp)
je 0x53a65
movq 0x58(%rsp), %rdi
movl 0x13c(%rsp), %esi
movl 0x138(%rsp), %edx
callq 0x52420
jmp 0x53a63
jmp 0x53a65
leaq 0xa0(%rsp), %rdi
callq 0x3afb0
leaq 0xe8(%rsp), %rdi
callq 0x3afb0
addq $0x148, %rsp            # imm = 0x148
retq
leaq 0xe8(%rsp), %rdi
callq 0x3afb0
movq 0xd8(%rsp), %rdi
callq 0x9cf0
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)