// File: attractivechaos[P]udb2/ska_flat_hash_map/./flat_hash_map.hpp
// Function: ska::detailv3::sherwood_v3_table<std::pair<unsigned int, unsigned int>, unsigned int, Hash32, ska::detailv3::KeyOrValueHasher<unsigned int, std::pair<unsigned int, unsigned int>, Hash32>, std::equal_to<unsigned int>, ska::detailv3::KeyOrValueEquality<unsigned int, std::pair<unsigned int, unsigned int>, std::equal_to<unsigned int>>, std::allocator<std::pair<unsigned int, unsigned int>>, std::allocator<ska::detailv3::sherwood_v3_entry<std::pair<unsigned int, unsigned int>>>>::rehash(unsigned long)
void rehash(size_t num_buckets)
    {
        num_buckets = std::max(num_buckets, static_cast<size_t>(std::ceil(num_elements / static_cast<double>(_max_load_factor))));
        if (num_buckets == 0)
        {
            reset_to_empty_state();
            return;
        }
        auto new_prime_index = hash_policy.next_size_over(num_buckets);
        if (num_buckets == bucket_count())
            return;
        int8_t new_max_lookups = compute_max_lookups(num_buckets);
        EntryPointer new_buckets(AllocatorTraits::allocate(*this, num_buckets + new_max_lookups));
        EntryPointer special_end_item = new_buckets + static_cast<ptrdiff_t>(num_buckets + new_max_lookups - 1);
        for (EntryPointer it = new_buckets; it != special_end_item; ++it)
            it->distance_from_desired = -1;
        special_end_item->distance_from_desired = Entry::special_end_value;
        std::swap(entries, new_buckets);
        std::swap(num_slots_minus_one, num_buckets);
        --num_slots_minus_one;
        hash_policy.commit(new_prime_index);
        int8_t old_max_lookups = max_lookups;
        max_lookups = new_max_lookups;
        num_elements = 0;
        for (EntryPointer it = new_buckets, end = it + static_cast<ptrdiff_t>(num_buckets + old_max_lookups); it != end; ++it)
        {
            if (it->has_value())
            {
                emplace(std::move(it->value));
                it->destroy_value();
            }
        }
        deallocate_data(new_buckets, num_buckets, old_max_lookups);
    }

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movq %rsi, 0x68(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rax), %xmm0
movaps 0xa6c(%rip), %xmm1      # 0x3030
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0xa70(%rip), %xmm1      # 0x3040
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movss 0x14(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
divsd %xmm1, %xmm0
callq 0x1040
movaps %xmm0, %xmm1
cvttsd2si %xmm1, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
movsd 0xa18(%rip), %xmm1      # 0x3020
subsd %xmm1, %xmm0
cvttsd2si %xmm0, %rcx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, 0x60(%rsp)
leaq 0x68(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x2810
movq (%rax), %rax
movq %rax, 0x68(%rsp)
cmpq $0x0, 0x68(%rsp)
jne 0x264a
movq 0x10(%rsp), %rdi
callq 0x2890
jmp 0x27fd
movq 0x10(%rsp), %rdi
addq $0x10, %rdi
leaq 0x68(%rsp), %rsi
callq 0x28f0
movq 0x10(%rsp), %rdi
movb %al, 0x5f(%rsp)
movq 0x68(%rsp), %rax
movq %rax, 0x8(%rsp)
callq 0x2850
movq %rax, %rcx
movq 0x8(%rsp), %rax
cmpq %rcx, %rax
jne 0x2687
jmp 0x27fd
movq 0x68(%rsp), %rdi
callq 0x2950
movq 0x10(%rsp), %rdi
movb %al, 0x5e(%rsp)
movq 0x68(%rsp), %rsi
movsbq 0x5e(%rsp), %rax
addq %rax, %rsi
callq 0x2980
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rax
movq 0x68(%rsp), %rcx
movsbq 0x5e(%rsp), %rdx
addq %rdx, %rcx
subq $0x1, %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0x48(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rax
cmpq 0x48(%rsp), %rax
je 0x2703
movq 0x40(%rsp), %rax
movb $-0x1, (%rax)
movq 0x40(%rsp), %rax
addq $0xc, %rax
movq %rax, 0x40(%rsp)
jmp 0x26df
movq 0x10(%rsp), %rdi
movq 0x48(%rsp), %rax
movb $0x0, (%rax)
leaq 0x50(%rsp), %rsi
callq 0x29b0
movq 0x10(%rsp), %rdi
addq $0x8, %rdi
leaq 0x68(%rsp), %rsi
callq 0x29f0
movq 0x10(%rsp), %rdi
movq 0x8(%rdi), %rax
addq $-0x1, %rax
movq %rax, 0x8(%rdi)
addq $0x10, %rdi
movsbl 0x5f(%rsp), %esi
callq 0x2a30
movq 0x10(%rsp), %rax
movb 0x11(%rax), %cl
movb %cl, 0x3f(%rsp)
movb 0x5e(%rsp), %cl
movb %cl, 0x11(%rax)
movq $0x0, 0x18(%rax)
movq 0x50(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq 0x68(%rsp), %rcx
movsbq 0x3f(%rsp), %rdx
addq %rdx, %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0x28(%rsp)
movq 0x30(%rsp), %rax
cmpq 0x28(%rsp), %rax
je 0x27e4
movq 0x30(%rsp), %rdi
callq 0x1be0
testb $0x1, %al
jne 0x27ac
jmp 0x27d2
movq 0x10(%rsp), %rdi
movq 0x30(%rsp), %rsi
addq $0x4, %rsi
callq 0x1e90
movq %rax, 0x18(%rsp)
movb %dl, 0x20(%rsp)
movq 0x30(%rsp), %rdi
callq 0x1c00
jmp 0x27d4
movq 0x30(%rsp), %rax
addq $0xc, %rax
movq %rax, 0x30(%rsp)
jmp 0x2790
movq 0x10(%rsp), %rdi
movq 0x50(%rsp), %rsi
movq 0x68(%rsp), %rdx
movsbl 0x3f(%rsp), %ecx
callq 0x1b60
addq $0x78, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)