// File: /workspace/github_cpp_makefile_star2_O2/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_product_op<double, double>, Eigen::SparseMatrix<double, 0, int> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 0, -1, -1> const> const>>(Eigen::SparseMatrix<double, 0, int>&, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::SparseMatrix<double, 0, int> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 0, -1, -1> const> 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
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rsi, %r15
movq %rdi, %rbx
movq 0x8(%rsi), %rax
movq %rax, 0xa8(%rsp)
andq $0x0, 0xb0(%rsp)
movsd 0x20(%rsi), %xmm0
movsd %xmm0, 0xb8(%rsp)
movq 0x18(%rsi), %r14
cmpb $0x1, (%rsi)
jne 0x129e2
movq 0x10(%r15), %rsi
movq %rbx, %rdi
movq %r14, %rdx
callq 0x12014
movq %rbx, %rdi
callq 0x12294
movq 0x10(%r15), %rax
movq 0x18(%r15), %rsi
cmpq %rsi, %rax
cmovgq %rax, %rsi
addq %rsi, %rsi
movq %rbx, %rdi
callq 0x122d0
xorl %r15d, %r15d
testq %r14, %r14
cmovleq %r15, %r14
leaq 0x18(%rsp), %r12
leaq 0xa0(%rsp), %r13
cmpq %r14, %r15
je 0x12ab9
movq %rbx, %rdi
movq %r15, %rsi
callq 0x12300
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x12b1e
movq 0x30(%rsp), %rax
cmpq 0x38(%rsp), %rax
jge 0x129da
movq 0x40(%rsp), %rcx
movsd (%rcx), %xmm0
movsd %xmm0, 0x10(%rsp)
movq 0x18(%rsp), %rcx
movq 0x20(%rsp), %rdx
movsd (%rcx,%rax,8), %xmm0
movsd %xmm0, 0x8(%rsp)
movslq (%rdx,%rax,4), %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x12392
movsd 0x10(%rsp), %xmm0
mulsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x30(%rsp), %rax
incq %rax
movq %rax, 0x30(%rsp)
jmp 0x12981
incq %r15
jmp 0x1295a
movq 0x10(%r15), %rsi
leaq 0x18(%rsp), %rdi
movq %r14, %rdx
callq 0xee46
movq 0x10(%r15), %rax
movq 0x18(%r15), %rsi
cmpq %rsi, %rax
cmovgq %rax, %rsi
addq %rsi, %rsi
leaq 0x18(%rsp), %rdi
callq 0x122d0
xorl %r15d, %r15d
testq %r14, %r14
cmovleq %r15, %r14
leaq 0x18(%rsp), %r12
leaq 0x60(%rsp), %r13
leaq 0xa0(%rsp), %rbp
cmpq %r14, %r15
je 0x12ac3
movq %r12, %rdi
movq %r15, %rsi
callq 0x12300
movq %r13, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x12b1e
movq 0x78(%rsp), %rax
cmpq 0x80(%rsp), %rax
jge 0x12ab1
movq 0x88(%rsp), %rcx
movsd (%rcx), %xmm0
movsd %xmm0, 0x10(%rsp)
movq 0x60(%rsp), %rcx
movq 0x68(%rsp), %rdx
movsd (%rcx,%rax,8), %xmm0
movsd %xmm0, 0x8(%rsp)
movslq (%rdx,%rax,4), %rdx
movq %r12, %rdi
movq %r15, %rsi
callq 0x12392
movsd 0x10(%rsp), %xmm0
mulsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x78(%rsp), %rax
incq %rax
movq %rax, 0x78(%rsp)
jmp 0x12a52
incq %r15
jmp 0x12a2b
movq %rbx, %rdi
callq 0x124d8
jmp 0x12ae7
leaq 0x18(%rsp), %rdi
callq 0x124d8
leaq 0x18(%rsp), %rsi
movb $0x1, (%rsi)
movq %rbx, %rdi
callq 0x1251a
leaq 0x18(%rsp), %rdi
callq 0xf37a
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x12b03
jmp 0x12b12
jmp 0x12b03
jmp 0x12b03
jmp 0x12b12
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0xf37a
jmp 0x12b15
movq %rax, %rbx
movq %rbx, %rdi
callq 0x76c0
nop