// File: /workspace/github_cpp_makefile_star2_O2/attractivechaos[P]udb2/tsl_robin_map/./robin_hash.h
// Function: std::pair<tsl::detail_robin_hash::robin_hash<std::pair<unsigned int, unsigned int>, tsl::robin_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>, false, tsl::rh::power_of_two_growth_policy<2ul>>::KeySelect, tsl::robin_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>, false, tsl::rh::power_of_two_growth_policy<2ul>>::ValueSelect, Hash32, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>, false, tsl::rh::power_of_two_growth_policy<2ul>>::robin_iterator<false>, bool> tsl::detail_robin_hash::robin_hash<std::pair<unsigned int, unsigned int>, tsl::robin_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>, false, tsl::rh::power_of_two_growth_policy<2ul>>::KeySelect, tsl::robin_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>, false, tsl::rh::power_of_two_growth_policy<2ul>>::ValueSelect, Hash32, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>, false, tsl::rh::power_of_two_growth_policy<2ul>>::insert_impl<unsigned int, std::pair<unsigned int, unsigned int>>(unsigned int const&, std::pair<unsigned int, unsigned int>&&)
std::pair<iterator, bool> insert_impl(const K& key, Args&&... value_type_args) {
        const std::size_t hash = hash_key(key);
        
        std::size_t ibucket = bucket_for_hash(hash); 
        distance_type dist_from_ideal_bucket = 0;
        
        while(dist_from_ideal_bucket <= m_buckets[ibucket].dist_from_ideal_bucket()) {
            if((!USE_STORED_HASH_ON_LOOKUP || m_buckets[ibucket].bucket_hash_equal(hash)) &&
               compare_keys(KeySelect()(m_buckets[ibucket].value()), key)) 
            {
                return std::make_pair(iterator(m_buckets + ibucket), false);
            }
            
            ibucket = next_bucket(ibucket);
            dist_from_ideal_bucket++;
        }
        
        if(rehash_on_extreme_load()) {
            ibucket = bucket_for_hash(hash);
            dist_from_ideal_bucket = 0;
            
            while(dist_from_ideal_bucket <= m_buckets[ibucket].dist_from_ideal_bucket()) {
                ibucket = next_bucket(ibucket);
                dist_from_ideal_bucket++;
            }
        }
 
        
        if(m_buckets[ibucket].empty()) {
            m_buckets[ibucket].set_value_of_empty_bucket(dist_from_ideal_bucket, bucket_entry::truncate_hash(hash),
                                                         std::forward<Args>(value_type_args)...);
        }
        else {
            insert_value(ibucket, dist_from_ideal_bucket, bucket_entry::truncate_hash(hash), 
                         std::forward<Args>(value_type_args)...);
        }
        
        
        m_nb_elements++;
        /*
         * The value will be inserted in ibucket in any case, either because it was
         * empty or by stealing the bucket (robin hood). 
         */
        return std::make_pair(iterator(m_buckets + ibucket), true);
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rdi, %rbx
movl (%rsi), %r15d
movq (%rdi), %rax
movq 0x20(%rdi), %rcx
xorl %ebp, %ebp
movq %r15, %r12
andq %rax, %r12
imulq $0xc, %r12, %r13
cmpw (%rcx,%r13), %bp
jg 0x1bcc
addq %rcx, %r13
cmpl %r15d, 0x4(%r13)
je 0x1bfb
incq %r12
incl %ebp
jmp 0x1bae
movq %rbx, %rdi
callq 0x1c50
movq 0x20(%rbx), %rcx
testb %al, %al
je 0x1bff
movq (%rbx), %rax
xorl %ebp, %ebp
movq %r15, %r12
andq %rax, %r12
imulq $0xc, %r12, %rdx
movzwl (%rcx,%rdx), %edx
cmpw %dx, %bp
jg 0x1c04
incq %r12
incl %ebp
jmp 0x1be4
xorl %edx, %edx
jmp 0x1c3e
movzwl (%rcx,%r13), %edx
cmpw $-0x1, %dx
je 0x1c20
movswl %bp, %edx
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %ecx
movq %r14, %r8
callq 0x2018
jmp 0x1c30
imulq $0xc, %r12, %rax
movq (%r14), %rdx
movq %rdx, 0x4(%rcx,%rax)
movw %bp, (%rcx,%rax)
incq 0x30(%rbx)
imulq $0xc, %r12, %r13
addq 0x20(%rbx), %r13
movb $0x1, %dl
movq %r13, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq