// File: icemiliang[P]vot/src/vot/../../include/Eigen/src/SparseCore/SparseAssign.h
// Function: void Eigen::internal::assign_sparse_to_sparse<Eigen::SparseMatrix<double, 0, int>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::SparseMatrix<double, 0, int> const, Eigen::SparseMatrix<double, 0, int> const>>(Eigen::SparseMatrix<double, 0, int>&, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::SparseMatrix<double, 0, int> const, Eigen::SparseMatrix<double, 0, int> const> const&)
void assign_sparse_to_sparse(DstXprType &dst, const SrcXprType &src)
{
  typedef typename DstXprType::Scalar Scalar;
  typedef internal::evaluator<DstXprType> DstEvaluatorType;
  typedef internal::evaluator<SrcXprType> SrcEvaluatorType;

  SrcEvaluatorType srcEvaluator(src);

  const bool transpose = (DstEvaluatorType::Flags & RowMajorBit) != (SrcEvaluatorType::Flags & RowMajorBit);
  const Index outerEvaluationSize = (SrcEvaluatorType::Flags&RowMajorBit) ? src.rows() : src.cols();
  if ((!transpose) && src.isRValue())
  {
    // eval without temporary
    dst.resize(src.rows(), src.cols());
    dst.setZero();
    dst.reserve((std::max)(src.rows(),src.cols())*2);
    for (Index j=0; j<outerEvaluationSize; ++j)
    {
      dst.startVec(j);
      for (typename SrcEvaluatorType::InnerIterator it(srcEvaluator, j); it; ++it)
      {
        Scalar v = it.value();
        dst.insertBackByOuterInner(j,it.index()) = v;
      }
    }
    dst.finalize();
  }
  else
  {
    // eval through a temporary
    eigen_assert(( ((internal::traits<DstXprType>::SupportedAccessPatterns & OuterRandomAccessPattern)==OuterRandomAccessPattern) ||
              (!((DstEvaluatorType::Flags & RowMajorBit) != (SrcEvaluatorType::Flags & RowMajorBit)))) &&
              "the transpose operation is supposed to be handled in SparseMatrix::operator=");

    enum { Flip = (DstEvaluatorType::Flags & RowMajorBit) != (SrcEvaluatorType::Flags & RowMajorBit) };

    
    DstXprType temp(src.rows(), src.cols());

    temp.reserve((std::max)(src.rows(),src.cols())*2);
    for (Index j=0; j<outerEvaluationSize; ++j)
    {
      temp.startVec(j);
      for (typename SrcEvaluatorType::InnerIterator it(srcEvaluator, j); it; ++it)
      {
        Scalar v = it.value();
        temp.insertBackByOuterInner(Flip?it.index():j,Flip?j:it.index()) = v;
      }
    }
    temp.finalize();

    dst = temp.markAsRValue();
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x250, %rsp            # imm = 0x250
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x2e1a0
movb $0x0, -0x39(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2dcd0
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2dad0
testb $0x1, %al
jne 0x2dd83
jmp 0x2df5f
movq -0x8(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2dcb0
movq %rax, -0x1b8(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2dcd0
movq -0x1c0(%rbp), %rdi
movq -0x1b8(%rbp), %rsi
movq %rax, %rdx
callq 0x2dbd0
jmp 0x2ddbf
movq -0x8(%rbp), %rdi
callq 0x2e1d0
jmp 0x2ddca
movq -0x8(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2dcb0
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2dcd0
movq %rax, -0x68(%rbp)
leaq -0x60(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x2e2b0
movq %rax, -0x1c8(%rbp)
jmp 0x2de05
movq -0x1d0(%rbp), %rdi
movq -0x1c8(%rbp), %rax
movq (%rax), %rsi
addq %rsi, %rsi
callq 0x2e230
jmp 0x2de20
movq $0x0, -0x70(%rbp)
movq -0x70(%rbp), %rax
cmpq -0x48(%rbp), %rax
jge 0x2df4f
movq -0x8(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x2e2f0
jmp 0x2de45
movq -0x70(%rbp), %rdx
leaq -0xd8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x2e3d0
jmp 0x2de5b
jmp 0x2de5d
leaq -0xd8(%rbp), %rdi
callq 0x2e450
movb %al, -0x1d1(%rbp)
jmp 0x2de71
movb -0x1d1(%rbp), %al
testb $0x1, %al
jne 0x2de80
jmp 0x2df3c
leaq -0xd8(%rbp), %rdi
callq 0x2e470
movsd %xmm0, -0x1e0(%rbp)
jmp 0x2de96
movsd -0x1e0(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movsd -0xe0(%rbp), %xmm0
movsd %xmm0, -0x200(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x1f0(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x2e5f0
movl %eax, -0x1e4(%rbp)
jmp 0x2dee0
movq -0x1f0(%rbp), %rsi
movq -0x1f8(%rbp), %rdi
movl -0x1e4(%rbp), %eax
movslq %eax, %rdx
callq 0x2e490
movq %rax, -0x208(%rbp)
jmp 0x2df05
movq -0x208(%rbp), %rax
movsd -0x200(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0xd8(%rbp), %rdi
callq 0x2e610
jmp 0x2df26
jmp 0x2de5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2e17f
jmp 0x2df3e
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
jmp 0x2de28
movq -0x8(%rbp), %rdi
callq 0x2e810
jmp 0x2df5a
jmp 0x2e16d
movq -0x10(%rbp), %rdi
callq 0x2dcb0
movq %rax, -0x210(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2dcd0
movq -0x210(%rbp), %rsi
movq %rax, %rdx
leaq -0x128(%rbp), %rdi
callq 0x21af0
jmp 0x2df90
movq -0x10(%rbp), %rdi
callq 0x2dcb0
movq %rax, -0x130(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2dcd0
movq %rax, -0x138(%rbp)
leaq -0x130(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x2e2b0
movq %rax, -0x218(%rbp)
jmp 0x2dfcc
movq -0x218(%rbp), %rax
movq (%rax), %rsi
addq %rsi, %rsi
leaq -0x128(%rbp), %rdi
callq 0x2e230
jmp 0x2dfe7
movq $0x0, -0x140(%rbp)
movq -0x140(%rbp), %rax
cmpq -0x48(%rbp), %rax
jge 0x2e12c
movq -0x140(%rbp), %rsi
leaq -0x128(%rbp), %rdi
callq 0x2e2f0
jmp 0x2e018
movq -0x140(%rbp), %rdx
leaq -0x1a8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x2e3d0
jmp 0x2e031
jmp 0x2e033
leaq -0x1a8(%rbp), %rdi
callq 0x2e450
movb %al, -0x219(%rbp)
jmp 0x2e047
movb -0x219(%rbp), %al
testb $0x1, %al
jne 0x2e056
jmp 0x2e113
leaq -0x1a8(%rbp), %rdi
callq 0x2e470
movsd %xmm0, -0x228(%rbp)
jmp 0x2e06c
movsd -0x228(%rbp), %xmm0
movsd %xmm0, -0x1b0(%rbp)
movsd -0x1b0(%rbp), %xmm0
movsd %xmm0, -0x240(%rbp)
movq -0x140(%rbp), %rax
movq %rax, -0x238(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x2e5f0
movl %eax, -0x22c(%rbp)
jmp 0x2e0ae
movq -0x238(%rbp), %rsi
movl -0x22c(%rbp), %eax
movslq %eax, %rdx
leaq -0x128(%rbp), %rdi
callq 0x2e490
movq %rax, -0x248(%rbp)
jmp 0x2e0d3
movq -0x248(%rbp), %rax
movsd -0x240(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x1a8(%rbp), %rdi
callq 0x2e610
jmp 0x2e0f4
jmp 0x2e033
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x22480
jmp 0x2e17f
jmp 0x2e115
movq -0x140(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x140(%rbp)
jmp 0x2dff2
leaq -0x128(%rbp), %rdi
callq 0x2e810
jmp 0x2e13a
leaq -0x128(%rbp), %rdi
callq 0x2e8e0
movq %rax, -0x250(%rbp)
jmp 0x2e14f
movq -0x250(%rbp), %rsi
movq -0x8(%rbp), %rdi
callq 0x2e900
jmp 0x2e161
leaq -0x128(%rbp), %rdi
callq 0x22480
leaq -0x38(%rbp), %rdi
callq 0x2e9d0
addq $0x250, %rsp            # imm = 0x250
popq %rbp
retq
leaq -0x38(%rbp), %rdi
callq 0x2e9d0
movq -0x50(%rbp), %rdi
callq 0xa950
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)