// File: /workspace/github_cpp_makefile_star2_O1/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, %r10d
andl %esi, %r10d
xorl %r11d, %r11d
xorl %r15d, %r15d
movq %r10, %rcx
shrq $0x5, %rcx
leaq (%rcx,%rcx,2), %r12
movl %r10d, %ecx
andl $0x1f, %ecx
movl 0x8(%r8,%r12,8), %ebp
movl 0xc(%r8,%r12,8), %ebx
orl %ebp, %ebx
movl $0x1, %r13d
shll %cl, %r13d
btl %ecx, %ebx
jae 0x27cb
testl %ebp, %r13d
je 0x27dc
leaq (%r8,%r12,8), %rbx
movl $0xffffffff, %r12d      # imm = 0xFFFFFFFF
shll %cl, %r12d
movq (%rbx), %rcx
notl %r12d
andl %r12d, %ebp
movl %ebp, %ebx
shrl %ebx
andl $0x15555555, %ebx       # imm = 0x15555555
subl %ebx, %ebp
movl %ebp, %ebx
movl $0x33333333, %r12d      # imm = 0x33333333
andl %r12d, %ebx
shrl $0x2, %ebp
andl %r12d, %ebp
addl %ebx, %ebp
movl %ebp, %ebx
shrl $0x4, %ebx
addl %ebp, %ebx
andl $0xf0f0f0f, %ebx        # imm = 0xF0F0F0F
imull $0x1010101, %ebx, %ebx  # imm = 0x1010101
shrl $0x18, %ebx
cmpl (%rcx,%rbx,8), %esi
jne 0x27e9
movl $0x2, %eax
xorl %ecx, %ecx
movq %r10, %rdx
jmp 0x27f9
testl %r11d, %r11d
movq %r14, %rdx
cmoveq %r10, %rdx
xorl %ecx, %ecx
movl %r11d, %eax
jmp 0x27f9
testl %r11d, %r11d
cmoveq %r10, %r14
movl $0x1, %r11d
incq %r15
cmpq %rdi, %r15
jae 0x2810
addq %r15, %r10
andq %r9, %r10
movb $0x1, %cl
testb %cl, %cl
jne 0x273f
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xef4(%rip), %rdi       # 0x370b
leaq 0x8ad(%rip), %rsi       # 0x30cb
leaq 0x1069(%rip), %rcx      # 0x388e
movl $0xbf1, %edx            # imm = 0xBF1
callq 0x10a0
nop