// File: /workspace/github_cpp_makefile_star2_O3/benjibc[P]json-universal-container/./boost_file/boost/container/vector.hpp
// Function: boost::container::vector<JSON, std::allocator<JSON>>::priv_range_insert_expand_forward(JSON*, unsigned long, boost::container::container_detail::advanced_insert_aux_int<JSON*>&)
void priv_range_insert_expand_forward(T* pos, size_type n, advanced_insert_aux_int_t &interf)
   {
      //n can't be 0, because there is nothing to do in that case
      if(!n) return;
      //There is enough memory
      T* old_finish = container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size;
      const size_type elems_after = old_finish - pos;

      if (elems_after >= n){
         //New elements can be just copied.
         //Move to uninitialized memory last objects
         ::boost::container::uninitialized_move_alloc
            (this->alloc(), old_finish - n, old_finish, old_finish);
         this->members_.m_size += n;
         //Copy previous to last objects to the initialized end
         boost::move_backward(pos, old_finish - n, old_finish);
         //Insert new objects in the pos
         interf.copy_remaining_to(pos);
      }
      else {
         //The new elements don't fit in the [pos, end()) range. Copy
         //to the beginning of the unallocated zone the last new elements.
         interf.uninitialized_copy_some_and_update(old_finish, elems_after, false);
         this->members_.m_size += n - elems_after;
         //Copy old [pos, end()) elements to the uninitialized memory
         ::boost::container::uninitialized_move_alloc
            (this->alloc(), pos, old_finish, container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size);
         this->members_.m_size += elems_after;
         //Copy first new elements in pos
         interf.copy_remaining_to(pos);
      }
   }

// Assembly:
testq %rdx, %rdx
je 0x6e3d
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x8(%rdi), %rax
leaq (%rax,%rax,2), %r12
shlq $0x4, %r12
addq (%rdi), %r12
movq %r12, %rcx
subq %rsi, %rcx
sarq $0x4, %rcx
movabsq $-0x5555555555555555, %r13 # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %r13
movq %rdx, %rbp
subq %r13, %rbp
jbe 0x6e3e
movq (%rbx), %rax
movq %rbx, %rdi
movq %r12, %rsi
movq %r13, %rdx
xorl %ecx, %ecx
callq *0x10(%rax)
addq 0x8(%r15), %rbp
movq %rbp, 0x8(%r15)
cmpq %r14, %r12
je 0x6e31
leaq (,%rbp,2), %rax
addq %rbp, %rax
shlq $0x4, %rax
addq (%r15), %rax
xorl %ecx, %ecx
xorps %xmm0, %xmm0
movq $0x0, (%rax,%rcx)
movl $0x0, 0x28(%rax,%rcx)
leaq (%r14,%rcx), %rdx
addq $0x30, %rdx
movups -0x30(%rdx), %xmm1
movups -0x20(%rdx), %xmm2
movups %xmm1, (%rax,%rcx)
movups %xmm2, 0x10(%rax,%rcx)
movq -0x10(%rdx), %rsi
movq %rsi, 0x20(%rax,%rcx)
movl -0x8(%rdx), %esi
movl %esi, 0x28(%rax,%rcx)
movups %xmm0, -0x14(%rdx)
movups %xmm0, -0x20(%rdx)
movups %xmm0, -0x30(%rdx)
addq $0x30, %rcx
cmpq %r12, %rdx
jne 0x6ddf
movq 0x8(%r15), %rbp
addq %r13, %rbp
movq %rbp, 0x8(%r15)
jmp 0x6ec9
retq
movq %rdx, %rcx
negq %rcx
leaq (%rcx,%rcx,2), %rsi
shlq $0x4, %rsi
addq %r12, %rsi
movq %rdx, %rcx
shlq $0x4, %rcx
leaq (%rcx,%rcx,2), %rcx
negq %rcx
je 0x6eb7
leaq (%r12,%rcx), %rax
xorl %edi, %edi
xorps %xmm0, %xmm0
movl $0x0, 0x28(%r12,%rdi)
movups (%rax,%rdi), %xmm1
movups 0x10(%rax,%rdi), %xmm2
movups %xmm1, (%r12,%rdi)
movups %xmm2, 0x10(%r12,%rdi)
movq 0x20(%rax,%rdi), %r8
movq %r8, 0x20(%r12,%rdi)
movl 0x28(%rax,%rdi), %r8d
movl %r8d, 0x28(%r12,%rdi)
movups %xmm0, 0x1c(%rax,%rdi)
movups %xmm0, 0x10(%rax,%rdi)
movups %xmm0, (%rax,%rdi)
addq $0x30, %rdi
movq %rcx, %r8
addq %rdi, %r8
jne 0x6e68
movq 0x8(%r15), %rax
addq %rdx, %rax
movq %rax, 0x8(%r15)
movq %r14, %rdi
movq %r12, %rdx
callq 0x70c9
movq (%rbx), %rax
movq (%rax), %rax
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
nop