// File: /workspace/github_cpp_makefile_star2_O2/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:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movsd 0x18(%rdi), %xmm1
unpcklps 0x7cb(%rip), %xmm1      # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x7d3(%rip), %xmm1      # 0x2040
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
cvtss2sd 0x14(%rdi), %xmm1
divsd %xmm1, %xmm0
callq 0x1040
cvttsd2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subsd 0x785(%rip), %xmm0      # 0x2020
cvttsd2si %xmm0, %rdx
andq %rcx, %rdx
orq %rax, %rdx
cmpq %r14, %rdx
cmovbeq %r14, %rdx
movq %rdx, (%rsp)
testq %rdx, %rdx
je 0x1928
leaq 0x10(%rbx), %rdi
movq %rsp, %r14
movq %r14, %rsi
callq 0x19ea
movl %eax, %ebp
movq (%r14), %rdi
movq 0x8(%rbx), %rax
leaq 0x1(%rax), %rcx
testq %rax, %rax
cmovneq %rcx, %rax
cmpq %rax, %rdi
je 0x19b1
callq 0x1a12
movl %eax, %r15d
movsbq %al, %r14
movq (%rsp), %rsi
addq %r14, %rsi
movq %rbx, %rdi
callq 0x1a26
movq (%rsp), %rcx
imulq $0xc, %rcx, %rsi
imulq $0xc, %r14, %rdi
leaq (%rsi,%rdi), %rdx
addq %rax, %rdx
addq %rdi, %rsi
addq $-0xc, %rsi
xorl %edi, %edi
cmpq %rdi, %rsi
je 0x193e
movb $-0x1, (%rax,%rdi)
addq $0xc, %rdi
jmp 0x1919
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x19c0
movb $0x0, -0xc(%rdx)
movq (%rbx), %r14
movq 0x8(%rbx), %rdx
movq %rax, (%rbx)
movq %rdx, (%rsp)
decq %rcx
movq %rcx, 0x8(%rbx)
movb %bpl, 0x10(%rbx)
movsbq 0x11(%rbx), %r12
movb %r15b, 0x11(%rbx)
andq $0x0, 0x18(%rbx)
leaq 0x4(%r14), %r15
imulq $0xc, %rdx, %rax
imulq $0xc, %r12, %r13
addq %rax, %r13
testq %r13, %r13
je 0x199e
cmpb $0x0, -0x4(%r15)
js 0x1994
movq %rbx, %rdi
movq %r15, %rsi
callq 0x16a6
movb $-0x1, -0x4(%r15)
addq $0xc, %r15
addq $-0xc, %r13
jmp 0x1978
movq (%rsp), %rdx
movsbl %r12b, %ecx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x163c
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq