// File: /workspace/github_cpp_makefile_star2_O2/attractivechaos[P]udb2/sparsepp/./sparsepp/spp.h
// Function: spp::sparse_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, spp::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::SelectKey, spp::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::SetKey, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::_find_position(unsigned int const&) const
Position _find_position(const key_type &key) const
    {
        size_type num_probes = 0;                    // how many times we've probed
        const size_type bucket_count_minus_one = (const size_type)(bucket_count() - 1);
        size_type bucknum = hash(key) & bucket_count_minus_one;
        Position pos;

        while (1)
        {
            // probe until something happens
            // -----------------------------
            typename Table::GrpPos grp_pos(table, bucknum);

            if (!grp_pos.test_strict())
            {
                // bucket is empty => key not present
                return pos._t ? pos : Position(pt_empty, bucknum);
            }
            else if (grp_pos.test())
            {
                reference ref(grp_pos.unsafe_get());

                if (equals(key, get_key(ref)))
                    return Position(pt_full, bucknum);
            }
            else if (pos._t == pt_empty)
            {
                // first erased position
                pos._t   = pt_erased;
                pos._idx = bucknum;
            }

            ++num_probes;                        // we're doing another probe
            bucknum = (size_type)((bucknum + JUMP_(key, num_probes)) & bucket_count_minus_one);
            assert(num_probes < bucket_count()
                   && "Hashtable is full: an error in key_equal<> or hash<>");
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq 0x30(%rdi), %r8
movq 0x40(%rdi), %rdi
leaq -0x1(%rdi), %r9
movl (%rsi), %esi
movl %r9d, %edx
andl %esi, %edx
xorl %eax, %eax
pushq $0x1
popq %r10
pushq $0x1
popq %rbp
movl $0x33333333, %r14d      # imm = 0x33333333
movq %rdx, %rcx
shrq $0x5, %rcx
imulq $0x18, %rcx, %r13
movl %edx, %ecx
andl $0x1f, %ecx
movl 0x8(%r8,%r13), %r12d
movl 0xc(%r8,%r13), %ebx
orl %r12d, %ebx
movl %ebp, %r11d
shll %cl, %r11d
btl %ecx, %ebx
jae 0x2569
testl %r12d, %r11d
je 0x254e
addq %r8, %r13
pushq $-0x1
popq %r11
shll %cl, %r11d
movq (%r13), %rcx
notl %r11d
andl %r11d, %r12d
movl %r12d, %r11d
shrl %r11d
andl $0x15555555, %r11d      # imm = 0x15555555
subl %r11d, %r12d
movl %r12d, %r11d
andl %r14d, %r11d
shrl $0x2, %r12d
andl %r14d, %r12d
addl %r11d, %r12d
movl %r12d, %r11d
shrl $0x4, %r11d
addl %r12d, %r11d
andl $0xf0f0f0f, %r11d       # imm = 0xF0F0F0F
imull $0x1010101, %r11d, %r11d # imm = 0x1010101
shrl $0x18, %r11d
cmpl (%rcx,%r11,8), %esi
jne 0x2556
jmp 0x2571
testl %eax, %eax
cmoveq %rdx, %r15
movl %ebp, %eax
cmpq %rdi, %r10
jae 0x2583
addq %r10, %rdx
andq %r9, %rdx
incq %r10
jmp 0x24c9
testl %eax, %eax
cmovneq %r15, %rdx
jmp 0x2574
pushq $0x2
popq %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1289(%rip), %rdi      # 0x3813
leaq 0xb36(%rip), %rsi       # 0x30c7
leaq 0x13fe(%rip), %rcx      # 0x3996
movl $0xbf1, %edx            # imm = 0xBF1
callq 0x10a0