// File: /workspace/github_cpp_makefile_star2_O2/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 %r12
pushq %rbx
subq $0x40, %rsp
movq 0x8(%rsi), %rax
cmpq 0x8(%rdi), %rax
jne 0x2b1aa
movq %rsi, %r15
movq %rdi, %rbx
movsd (%rdx), %xmm0
mulsd 0x70(%rdi), %xmm0
movsd %xmm0, -0x28(%rbp)
movq %rax, %rcx
shrq $0x3d, %rcx
je 0x2b089
callq 0x23674
movq 0x8(%r15), %rax
movabsq $0x1fffffffffffffff, %r12 # imm = 0x1FFFFFFFFFFFFFFF
movq (%r15), %r14
testq %r14, %r14
je 0x2b09f
xorl %ecx, %ecx
jmp 0x2b0dc
leaq (,%rax,8), %rdi
cmpq $0x4e20, %rdi           # imm = 0x4E20
ja 0x2b0c6
movq %rsp, %rcx
addq $0xf, %rdi
andq $-0x10, %rdi
subq %rdi, %rcx
movq %rcx, %rsp
movq %rcx, %r14
jmp 0x2b0dc
callq 0x236a1
movq %rax, %r14
movq 0x8(%r15), %rax
xorl %ecx, %ecx
cmpq $0x0, (%r15)
cmoveq %r14, %rcx
leaq (,%rax,8), %rdx
cmpq $0x4e21, %rdx           # imm = 0x4E21
movq %rcx, -0x58(%rbp)
movq %rax, -0x50(%rbp)
setae -0x48(%rbp)
movq 0x30(%rbx), %rax
cmpq %r12, %rax
jbe 0x2b109
callq 0x23674
movq 0x30(%rbx), %rax
movq 0x28(%rbx), %rcx
testq %rcx, %rcx
je 0x2b116
xorl %edx, %edx
jmp 0x2b154
leaq (,%rax,8), %rdi
cmpq $0x4e20, %rdi           # imm = 0x4E20
ja 0x2b13d
movq %rsp, %rdx
addq $0xf, %rdi
andq $-0x10, %rdi
subq %rdi, %rdx
movq %rdx, %rsp
movq %rdx, %rcx
jmp 0x2b154
callq 0x236a1
movq %rax, %rcx
movq 0x30(%rbx), %rax
xorl %edx, %edx
cmpq $0x0, 0x28(%rbx)
cmoveq %rcx, %rdx
leaq (,%rax,8), %rsi
cmpq $0x4e21, %rsi           # imm = 0x4E21
movq %rdx, -0x40(%rbp)
movq %rax, -0x38(%rbp)
setae -0x30(%rbp)
movq (%rbx), %rsi
movq 0x8(%rbx), %rdi
movq 0x20(%rbx), %rdx
pushq $0x1
popq %r8
movq %r14, %r9
movsd -0x28(%rbp), %xmm0
callq 0x2b1ee
leaq -0x40(%rbp), %rdi
callq 0x25cb2
leaq -0x58(%rbp), %rdi
callq 0x25cb2
leaq -0x20(%rbp), %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x222b9(%rip), %rdi     # 0x4d46a
leaq 0x222e9(%rip), %rsi     # 0x4d4a1
leaq 0x2231c(%rip), %rcx     # 0x4d4db
movl $0xc4, %edx
callq 0xe380
jmp 0x2b1cb
movq %rax, %rbx
jmp 0x2b1dc
movq %rax, %rbx
leaq -0x40(%rbp), %rdi
callq 0x25cb2
leaq -0x58(%rbp), %rdi
callq 0x25cb2
movq %rbx, %rdi
callq 0xe9f0
nop