// File: /workspace/github_cpp_makefile_star2_O3/attractivechaos[P]udb2/ska_flat_hash_map/./flat_hash_map.hpp
// Function: std::pair<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>>>>::templated_iterator<std::pair<unsigned int, unsigned int>>, bool> 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>>>>::emplace_new_key<std::pair<unsigned int, unsigned int>>(signed char, ska::detailv3::sherwood_v3_entry<std::pair<unsigned int, unsigned int>>*, std::pair<unsigned int, unsigned int>&&)
emplace_new_key(int8_t distance_from_desired, EntryPointer current_entry, Key && key, Args &&... args)
    {
        using std::swap;
        if (num_slots_minus_one == 0 || distance_from_desired == max_lookups || num_elements + 1 > (num_slots_minus_one + 1) * static_cast<double>(_max_load_factor))
        {
            grow();
            return emplace(std::forward<Key>(key), std::forward<Args>(args)...);
        }
        else if (current_entry->is_empty())
        {
            current_entry->emplace(distance_from_desired, std::forward<Key>(key), std::forward<Args>(args)...);
            ++num_elements;
            return { { current_entry }, true };
        }
        value_type to_insert(std::forward<Key>(key), std::forward<Args>(args)...);
        swap(distance_from_desired, current_entry->distance_from_desired);
        swap(to_insert, current_entry->value);
        iterator result = { current_entry };
        for (++distance_from_desired, ++current_entry;; ++current_entry)
        {
            if (current_entry->is_empty())
            {
                current_entry->emplace(distance_from_desired, std::move(to_insert));
                ++num_elements;
                return { result, true };
            }
            else if (current_entry->distance_from_desired < distance_from_desired)
            {
                swap(distance_from_desired, current_entry->distance_from_desired);
                swap(to_insert, current_entry->value);
                ++distance_from_desired;
            }
            else
            {
                ++distance_from_desired;
                if (distance_from_desired == max_lookups)
                {
                    swap(to_insert, result.current->value);
                    grow();
                    return emplace(std::move(to_insert));
                }
            }
        }
    }

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rcx, %r14
movq %rdi, %rbx
movq 0x8(%rdi), %rcx
testq %rcx, %rcx
je 0x1892
cmpb %sil, 0x11(%rbx)
je 0x1892
movq %rdx, %rax
movq 0x18(%rbx), %rdx
incq %rdx
movq %rdx, %xmm0
movq 0x17e8(%rip), %xmm1     # 0x3030
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x17ec(%rip), %xmm2     # 0x3040
subpd %xmm2, %xmm0
movapd %xmm0, %xmm3
unpckhpd %xmm0, %xmm3            # xmm3 = xmm3[1],xmm0[1]
addsd %xmm0, %xmm3
incq %rcx
movq %rcx, %xmm0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
subpd %xmm2, %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
xorps %xmm2, %xmm2
cvtss2sd 0x14(%rbx), %xmm2
addsd %xmm0, %xmm1
mulsd %xmm1, %xmm2
ucomisd %xmm2, %xmm3
jbe 0x18ad
movq %rbx, %rdi
callq 0x1958
movq %rbx, %rdi
movq %r14, %rsi
callq 0x17c0
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movb (%rax), %cl
testb %cl, %cl
js 0x1917
movq (%r14), %rdi
movq %rdi, (%rsp)
movb %sil, (%rax)
movl 0x4(%rax), %esi
movl 0x8(%rax), %edx
movl %edi, 0x4(%rax)
shrq $0x20, %rdi
movl %edi, 0x8(%rax)
incb %cl
leaq 0xc(%rax), %rdi
movb 0xc(%rax), %r8b
testb %r8b, %r8b
js 0x1923
cmpb %cl, %r8b
jge 0x18fd
movb %cl, (%rdi)
movl 0x4(%rdi), %ecx
movl 0x8(%rdi), %r9d
movl %esi, 0x4(%rdi)
movl %edx, 0x8(%rdi)
incb %r8b
movl %r9d, %edx
movl %ecx, %esi
movl %r8d, %ecx
jmp 0x1904
incb %cl
cmpb 0x11(%rbx), %cl
je 0x1942
movb 0xc(%rdi), %r8b
addq $0xc, %rdi
testb %r8b, %r8b
jns 0x18dc
leaq -0xc(%rdi), %r8
jmp 0x1926
movq (%r14), %rcx
movq %rcx, 0x4(%rax)
movb %sil, (%rax)
jmp 0x1937
movq %rax, %r8
movl %esi, (%rsp)
movl %edx, 0x4(%rsp)
movq (%rsp), %rdx
movq %rdx, 0x10(%r8)
movb %cl, (%rdi)
incq 0x18(%rbx)
movb $0x1, %dl
jmp 0x18a5
movq 0x4(%rax), %rcx
movl %esi, 0x4(%rax)
movq %rsp, %r14
movq %rcx, (%r14)
movl %edx, 0x8(%rax)
jmp 0x1892
nop