// File: attractivechaos[P]udb2/robin_hood/./robin_hood.h
// Function: robin_hood::detail::Table<true, 80ul, unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>>::insert_move(robin_hood::detail::Table<true, 80ul, unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>>::DataNode<robin_hood::detail::Table<true, 80ul, unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>>, true>&&)
void insert_move(Node&& keyval) {
        // we don't retry, fail if overflowing
        // don't need to check max num elements
        if (0 == mMaxNumElementsAllowed && !try_increase_info()) {
            throwOverflowError();
        }

        size_t idx{};
        InfoType info{};
        keyToIdx(keyval.getFirst(), &idx, &info);

        // skip forward. Use <= because we are certain that the element is not there.
        while (info <= mInfo[idx]) {
            idx = idx + 1;
            info += mInfoInc;
        }

        // key not found, so we are now exactly where we want to insert it.
        auto const insertion_idx = idx;
        auto const insertion_info = static_cast<uint8_t>(info);
        if (ROBIN_HOOD_UNLIKELY(insertion_info + mInfoInc > 0xFF)) {
            mMaxNumElementsAllowed = 0;
        }

        // find an empty spot
        while (0 != mInfo[idx]) {
            next(&info, &idx);
        }

        auto& l = mKeyVals[insertion_idx];
        if (idx == insertion_idx) {
            ::new (static_cast<void*>(&l)) Node(std::move(keyval));
        } else {
            shiftUp(idx, insertion_idx);
            l = std::move(keyval);
        }

        // put at empty spot
        mInfo[insertion_idx] = insertion_info;

        ++mNumElements;
    }

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movq %rsi, 0x38(%rsp)
movq 0x40(%rsp), %rcx
movq %rcx, 0x8(%rsp)
xorl %eax, %eax
cmpq 0x28(%rcx), %rax
jne 0x2a88
movq 0x8(%rsp), %rdi
callq 0x2630
testb $0x1, %al
jne 0x2a88
movq 0x8(%rsp), %rdi
callq 0x1fd0
movq $0x0, 0x30(%rsp)
movl $0x0, 0x2c(%rsp)
movq 0x38(%rsp), %rdi
callq 0x21d0
movq 0x8(%rsp), %rdi
movq %rax, %rsi
leaq 0x30(%rsp), %rdx
leaq 0x2c(%rsp), %rcx
callq 0x20a0
movq 0x8(%rsp), %rcx
movl 0x2c(%rsp), %eax
movq 0x10(%rcx), %rcx
movq 0x30(%rsp), %rdx
movzbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
ja 0x2af4
movq 0x8(%rsp), %rax
movq 0x30(%rsp), %rcx
addq $0x1, %rcx
movq %rcx, 0x30(%rsp)
movl 0x30(%rax), %eax
addl 0x2c(%rsp), %eax
movl %eax, 0x2c(%rsp)
jmp 0x2aba
movq 0x8(%rsp), %rcx
movq 0x30(%rsp), %rax
movq %rax, 0x20(%rsp)
movl 0x2c(%rsp), %eax
movb %al, 0x1f(%rsp)
movzbl 0x1f(%rsp), %eax
addl 0x30(%rcx), %eax
cmpl $0xff, %eax
jbe 0x2b27
movq 0x8(%rsp), %rax
movq $0x0, 0x28(%rax)
jmp 0x2b29
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x30(%rsp), %rcx
movzbl (%rax,%rcx), %ecx
xorl %eax, %eax
cmpl %ecx, %eax
je 0x2b57
movq 0x8(%rsp), %rdi
leaq 0x2c(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x2210
jmp 0x2b29
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x20(%rsp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, 0x10(%rsp)
movq 0x30(%rsp), %rax
cmpq 0x20(%rsp), %rax
jne 0x2b8f
movq 0x10(%rsp), %rax
movq 0x38(%rsp), %rcx
movq (%rcx), %rcx
movq %rcx, (%rax)
jmp 0x2bb3
movq 0x8(%rsp), %rdi
movq 0x30(%rsp), %rsi
movq 0x20(%rsp), %rdx
callq 0x2370
movq 0x38(%rsp), %rcx
movq 0x10(%rsp), %rax
movq (%rcx), %rcx
movq %rcx, (%rax)
movq 0x8(%rsp), %rax
movb 0x1f(%rsp), %sil
movq 0x10(%rax), %rcx
movq 0x20(%rsp), %rdx
movb %sil, (%rcx,%rdx)
movq 0x18(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rax)
addq $0x48, %rsp
retq
nopl (%rax,%rax)