// File: attractivechaos[P]udb2/tsl_robin_map/./robin_hash.h
// Function: 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>>::rehash_impl(unsigned long)
void rehash_impl(size_type count) {
        robin_hash new_table(count, static_cast<Hash&>(*this), static_cast<KeyEqual&>(*this), 
                             get_allocator(), m_min_load_factor, m_max_load_factor);
        
        const bool use_stored_hash = USE_STORED_HASH_ON_REHASH(new_table.bucket_count());
        for(auto& bucket: m_buckets_data) {
            if(bucket.empty()) { 
                continue; 
            }
            
            const std::size_t hash = use_stored_hash?bucket.truncated_hash():
                                                     new_table.hash_key(KeySelect()(bucket.value()));
                                                     
            new_table.insert_value_on_rehash(new_table.bucket_for_hash(hash), 0, 
                                             bucket_entry::truncate_hash(hash), std::move(bucket.value()));
        }
        
        new_table.m_nb_elements = m_nb_elements;
        new_table.swap(*this);
    }

// Assembly:
subq $0xf8, %rsp
movq %rdi, 0xf0(%rsp)
movq %rsi, 0xe8(%rsp)
movq 0xf0(%rsp), %rsi
movq %rsi, 0x40(%rsp)
movq 0xe8(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0x97(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x3c70
movq 0x38(%rsp), %rsi
movq 0x40(%rsp), %rcx
movq 0x48(%rsp), %r8
movss 0x40(%rcx), %xmm1
movss 0x48(%rcx), %xmm0
leaq 0x98(%rsp), %rdi
movq %rcx, %rdx
callq 0x1d30
jmp 0x382e
leaq 0x97(%rsp), %rdi
callq 0x1d10
leaq 0x98(%rsp), %rdi
callq 0x30a0
movq %rax, %rdi
callq 0x3cc0
movb %al, 0x37(%rsp)
jmp 0x3856
movq 0x40(%rsp), %rax
movb 0x37(%rsp), %cl
andb $0x1, %cl
movb %cl, 0x83(%rsp)
addq $0x8, %rax
movq %rax, 0x78(%rsp)
movq 0x78(%rsp), %rdi
callq 0x3cd0
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rdi
callq 0x2f30
movq %rax, 0x68(%rsp)
leaq 0x70(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x3d00
testb $0x1, %al
jne 0x38a8
jmp 0x39d8
leaq 0x70(%rsp), %rdi
callq 0x2fb0
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rdi
callq 0x1bb0
testb $0x1, %al
jne 0x38c7
jmp 0x3918
jmp 0x39c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x88(%rsp)
movl %eax, 0x84(%rsp)
leaq 0x97(%rsp), %rdi
callq 0x1d10
jmp 0x3a0d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x88(%rsp)
movl %eax, 0x84(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x19c0
jmp 0x3a0d
testb $0x1, 0x83(%rsp)
je 0x3935
movq 0x60(%rsp), %rdi
callq 0x3d40
movl %eax, %eax
movq %rax, 0x28(%rsp)
jmp 0x396f
movq 0x60(%rsp), %rdi
callq 0x1be0
movq %rax, %rsi
leaq 0x57(%rsp), %rdi
callq 0x3480
movq %rax, %rsi
leaq 0x98(%rsp), %rdi
callq 0x3490
movq %rax, 0x20(%rsp)
jmp 0x3963
movq 0x20(%rsp), %rax
movq %rax, 0x28(%rsp)
jmp 0x396f
movq 0x28(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x58(%rsp), %rsi
leaq 0x98(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x34c0
movq %rax, 0x10(%rsp)
movq 0x58(%rsp), %rdi
callq 0x36b0
movl %eax, 0x1c(%rsp)
movq 0x60(%rsp), %rdi
callq 0x1be0
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
movl 0x1c(%rsp), %ecx
movq %rax, %r8
xorl %edx, %edx
callq 0x3d50
jmp 0x39c7
jmp 0x39c9
leaq 0x70(%rsp), %rdi
callq 0x3e40
jmp 0x3890
movq 0x40(%rsp), %rsi
movq 0x30(%rsi), %rax
movq %rax, 0xc8(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x3e60
jmp 0x39f8
leaq 0x98(%rsp), %rdi
callq 0x19c0
addq $0xf8, %rsp
retq
movq 0x88(%rsp), %rdi
callq 0x1190
nopw (%rax,%rax)