// File: /workspace/github_cpp_makefile_star2_O1/attractivechaos[P]udb2/tsl_hopscotch_map/./hopscotch_hash.h
// Function: tsl::detail_hopscotch_hash::hopscotch_hash<std::pair<unsigned int const, unsigned int>, tsl::bhopscotch_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>, 62u, false, tsl::hh::power_of_two_growth_policy<2ul>>::KeySelect, tsl::bhopscotch_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>, 62u, false, tsl::hh::power_of_two_growth_policy<2ul>>::ValueSelect, Hash32, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>, 62u, false, tsl::hh::power_of_two_growth_policy<2ul>, std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>>>::swap_empty_bucket_closer(unsigned long&)
bool swap_empty_bucket_closer(std::size_t& ibucket_empty_in_out) {
        tsl_hh_assert(ibucket_empty_in_out >= NeighborhoodSize);
        const std::size_t neighborhood_start = ibucket_empty_in_out - NeighborhoodSize + 1;
        
        for(std::size_t to_check = neighborhood_start; to_check < ibucket_empty_in_out; to_check++) {
            neighborhood_bitmap neighborhood_infos = m_buckets[to_check].neighborhood_infos();
            std::size_t to_swap = to_check;
            
            while(neighborhood_infos != 0 && to_swap < ibucket_empty_in_out) {
                if((neighborhood_infos & 1) == 1) {
                    tsl_hh_assert(m_buckets[ibucket_empty_in_out].empty());
                    tsl_hh_assert(!m_buckets[to_swap].empty());
                    
                    m_buckets[to_swap].swap_value_into_empty_bucket(m_buckets[ibucket_empty_in_out]);
                    
                    tsl_hh_assert(!m_buckets[to_check].check_neighbor_presence(ibucket_empty_in_out - to_check));
                    tsl_hh_assert(m_buckets[to_check].check_neighbor_presence(to_swap - to_check));
                    
                    m_buckets[to_check].toggle_neighbor_presence(ibucket_empty_in_out - to_check);
                    m_buckets[to_check].toggle_neighbor_presence(to_swap - to_check);
                    
                    
                    ibucket_empty_in_out = to_swap;
                    
                    return true;
                }
                
                to_swap++;
                neighborhood_infos = neighborhood_bitmap(neighborhood_infos >> 1);
            }
        }
        
        return false;
    }

// Assembly:
movq (%rsi), %r9
cmpq $0x3d, %r9
setae %al
jb 0x212a
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
leaq -0x3d(%r9), %rcx
movq 0x50(%rdi), %rdx
movq %r9, %r8
shlq $0x4, %r8
leaq (%r8,%rdx), %r11
addq $-0x3d0, %r11           # imm = 0xFC30
leaq -0x3c(%r9), %rbx
movq %rcx, %r10
shlq $0x4, %r10
movq (%rdx,%r10), %r12
cmpq $0x4, %r12
jae 0x20b8
incq %rcx
addq $0x10, %r11
incq %rbx
cmpq %r9, %rcx
setb %al
jb 0x2093
jmp 0x2121
shrq $0x2, %r12
movq %r11, %r15
xorl %r14d, %r14d
testb $0x1, %r12b
jne 0x20e2
testq %r12, %r12
je 0x20a4
leaq (%rbx,%r14), %r13
shrq %r12
incq %r14
addq $0x10, %r15
cmpq %r9, %r13
jb 0x20c2
jmp 0x20a4
leaq (%rcx,%r14), %r9
testb $0x1, (%r15)
je 0x20fe
movq 0x8(%r15), %r11
movq %r11, 0x8(%rdx,%r8)
orb $0x1, (%rdx,%r8)
andb $-0x2, (%r15)
movq 0x50(%rdi), %rdx
movl (%rsi), %edi
movq (%rdx,%r10), %r8
subl %ecx, %edi
addb $0x2, %dil
addb $0x2, %r14b
btcq %r14, %r8
btcq %rdi, %r8
movq %r8, (%rdx,%r10)
movq %r9, (%rsi)
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
andb $0x1, %al
retq
nop