// File: /workspace/github_cpp_makefile_star2_O1/Kingsford-Group[P]ghost2/include/Eigen/src/Core/products/SelfadjointMatrixVector.h
// Function: void Eigen::SelfadjointProductMatrix<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false>, 17, false, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::Block<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, 1, true>, -1, 1, false> const>, 0, true>::scaleAndAddTo<Eigen::Block<Eigen::Matrix<double, -1, 1, 0, -1, 1>, -1, 1, false>>(Eigen::Block<Eigen::Matrix<double, -1, 1, 0, -1, 1>, -1, 1, false>&, double const&) const
void scaleAndAddTo(Dest& dest, const Scalar& alpha) const
  {
    typedef typename Dest::Scalar ResScalar;
    typedef typename Base::RhsScalar RhsScalar;
    typedef Map<Matrix<ResScalar,Dynamic,1>, Aligned> MappedDest;
    
    eigen_assert(dest.rows()==m_lhs.rows() && dest.cols()==m_rhs.cols());

    typename internal::add_const_on_value_type<ActualLhsType>::type lhs = LhsBlasTraits::extract(m_lhs);
    typename internal::add_const_on_value_type<ActualRhsType>::type rhs = RhsBlasTraits::extract(m_rhs);

    Scalar actualAlpha = alpha * LhsBlasTraits::extractScalarFactor(m_lhs)
                               * RhsBlasTraits::extractScalarFactor(m_rhs);

    enum {
      EvalToDest = (Dest::InnerStrideAtCompileTime==1),
      UseRhs = (_ActualRhsType::InnerStrideAtCompileTime==1)
    };
    
    internal::gemv_static_vector_if<ResScalar,Dest::SizeAtCompileTime,Dest::MaxSizeAtCompileTime,!EvalToDest> static_dest;
    internal::gemv_static_vector_if<RhsScalar,_ActualRhsType::SizeAtCompileTime,_ActualRhsType::MaxSizeAtCompileTime,!UseRhs> static_rhs;

    ei_declare_aligned_stack_constructed_variable(ResScalar,actualDestPtr,dest.size(),
                                                  EvalToDest ? dest.data() : static_dest.data());
                                                  
    ei_declare_aligned_stack_constructed_variable(RhsScalar,actualRhsPtr,rhs.size(),
        UseRhs ? const_cast<RhsScalar*>(rhs.data()) : static_rhs.data());
    
    if(!EvalToDest)
    {
      #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN
      int size = dest.size();
      EIGEN_DENSE_STORAGE_CTOR_PLUGIN
      #endif
      MappedDest(actualDestPtr, dest.size()) = dest;
    }
      
    if(!UseRhs)
    {
      #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN
      int size = rhs.size();
      EIGEN_DENSE_STORAGE_CTOR_PLUGIN
      #endif
      Map<typename _ActualRhsType::PlainObject>(actualRhsPtr, rhs.size()) = rhs;
    }
      
      
    internal::selfadjoint_matrix_vector_product<Scalar, Index, (internal::traits<_ActualLhsType>::Flags&RowMajorBit) ? RowMajor : ColMajor, int(LhsUpLo), bool(LhsBlasTraits::NeedToConjugate), bool(RhsBlasTraits::NeedToConjugate)>::run
      (
        lhs.rows(),                             // size
        &lhs.coeffRef(0,0),  lhs.outerStride(), // lhs info
        actualRhsPtr, 1,                        // rhs info
        actualDestPtr,                          // result info
        actualAlpha                             // scale factor
      );
    
    if(!EvalToDest)
      dest = MappedDest(actualDestPtr, dest.size());
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq 0x8(%rsi), %r13
movq 0x8(%rdi), %r14
cmpq %r14, %r13
jne 0x31498
movq %r13, %rax
shrq $0x3d, %rax
jne 0x3146a
movq %rdi, %r15
movsd (%rdx), %xmm0
mulsd 0x70(%rdi), %xmm0
movq (%rsi), %r12
testq %r12, %r12
je 0x3136b
xorl %eax, %eax
jmp 0x313ad
leaq (,%r13,8), %rdi
cmpq $0x9c4, %r13            # imm = 0x9C4
ja 0x31392
movq %rsp, %rax
addq $0xf, %rdi
andq $-0x10, %rdi
subq %rdi, %rax
movq %rax, %rsp
movq %rax, %r12
jmp 0x313ad
movsd %xmm0, -0x30(%rbp)
callq 0xd750
movsd -0x30(%rbp), %xmm0
movq %rax, %r12
testq %rax, %rax
je 0x3146a
movabsq $0x1fffffffffffffff, %rcx # imm = 0x1FFFFFFFFFFFFFFF
movq 0x30(%r15), %rbx
cmpq %rcx, %rbx
movq %r13, -0x40(%rbp)
movq %rax, -0x38(%rbp)
ja 0x314b7
movq 0x28(%r15), %rcx
testq %rcx, %rcx
je 0x313da
xorl %r13d, %r13d
jmp 0x3141f
leaq (,%rbx,8), %rdi
cmpq $0x9c4, %rbx            # imm = 0x9C4
ja 0x31401
movq %rsp, %r13
addq $0xf, %rdi
andq $-0x10, %rdi
subq %rdi, %r13
movq %r13, %rsp
movq %r13, %rcx
jmp 0x3141f
movsd %xmm0, -0x30(%rbp)
callq 0xd750
movsd -0x30(%rbp), %xmm0
movq %rax, %r13
movq %rax, %rcx
testq %rax, %rax
je 0x314e5
movq (%r15), %rsi
movq 0x20(%r15), %rdx
movl $0x1, %r8d
movq %r14, %rdi
movq %r12, %r9
callq 0x3154a
cmpq $0x9c5, %rbx            # imm = 0x9C5
jb 0x31448
movq %r13, %rdi
callq 0xd660
cmpq $0x9c5, -0x40(%rbp)     # imm = 0x9C5
jb 0x3145b
movq -0x38(%rbp), %rdi
callq 0xd660
leaq -0x28(%rbp), %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x8, %edi
callq 0xd260
movq 0x47af5(%rip), %rcx     # 0x78f70
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x47b17(%rip), %rsi     # 0x78fa0
movq 0x47ab0(%rip), %rdx     # 0x78f40
movq %rax, %rdi
callq 0xd990
leaq 0x23053(%rip), %rdi     # 0x544f2
leaq 0x23083(%rip), %rsi     # 0x54529
leaq 0x230b6(%rip), %rcx     # 0x54563
movl $0xc4, %edx
callq 0xd340
movl $0x8, %edi
callq 0xd260
movq 0x47aa8(%rip), %rcx     # 0x78f70
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x47aca(%rip), %rsi     # 0x78fa0
movq 0x47a63(%rip), %rdx     # 0x78f40
movq %rax, %rdi
callq 0xd990
movl $0x8, %edi
callq 0xd260
movq 0x47a7a(%rip), %rcx     # 0x78f70
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x47a9c(%rip), %rsi     # 0x78fa0
movq 0x47a35(%rip), %rdx     # 0x78f40
movq %rax, %rdi
callq 0xd990
jmp 0x3152b
movq %rax, %r14
cmpq $0x9c5, %rbx            # imm = 0x9C5
jb 0x3152e
movq %r13, %rdi
callq 0xd660
jmp 0x3152e
movq %rax, %r14
cmpq $0x9c5, -0x40(%rbp)     # imm = 0x9C5
jb 0x31541
movq -0x38(%rbp), %rdi
callq 0xd660
movq %r14, %rdi
callq 0xd9c0
nop