10 #ifndef EIGEN_SELFADJOINT_MATRIX_VECTOR_H 
   11 #define EIGEN_SELFADJOINT_MATRIX_VECTOR_H 
   23 template<
typename Scalar, 
typename Index, 
int StorageOrder, 
int UpLo, 
bool ConjugateLhs, 
bool ConjugateRhs, 
int Version=Specialized>
 
   26 template<
typename Scalar, 
typename Index, 
int StorageOrder, 
int UpLo, 
bool ConjugateLhs, 
bool ConjugateRhs, 
int Version>
 
   38 template<
typename Scalar, 
typename Index, 
int StorageOrder, 
int UpLo, 
bool ConjugateLhs, 
bool ConjugateRhs, 
int Version>
 
   51     IsRowMajor = StorageOrder==
RowMajor ? 1 : 0,
 
   52     IsLower = UpLo == 
Lower ? 1 : 0,
 
   53     FirstTriangular = IsRowMajor == IsLower
 
   70   for (
Index j=FirstTriangular ? bound : 0;
 
   71        j<(FirstTriangular ? 
size : bound);j+=2)
 
   76     Scalar t0 = cjAlpha * rhs[j];
 
   77     Packet ptmp0 = pset1<Packet>(t0);
 
   78     Scalar t1 = cjAlpha * rhs[j+1];
 
   79     Packet ptmp1 = pset1<Packet>(t1);
 
   82     Packet ptmp2 = pset1<Packet>(t2);
 
   84     Packet ptmp3 = pset1<Packet>(t3);
 
   86     Index starti = FirstTriangular ? 0 : j+2;
 
   89     Index alignedEnd = alignedStart + ((endi-alignedStart)/(PacketSize))*(PacketSize);
 
   95       res[j]   += cj0.
pmul(A1[j],   t1);
 
   96       t3       += cj1.
pmul(A1[j],   rhs[j]);
 
  100       res[j+1] += cj0.
pmul(A0[j+1],t0);
 
  101       t2 += cj1.
pmul(A0[j+1], rhs[j+1]);
 
  104     for (
Index i=starti; i<alignedStart; ++i)
 
  106       res[i] += cj0.
pmul(A0[i], t0) + cj0.
pmul(A1[i],t1);
 
  107       t2 += cj1.
pmul(A0[i], rhs[i]);
 
  108       t3 += cj1.
pmul(A1[i], rhs[i]);
 
  116     for (
Index i=alignedStart; i<alignedEnd; i+=PacketSize)
 
  118       Packet A0i = ploadu<Packet>(a0It);  a0It  += PacketSize;
 
  119       Packet A1i = ploadu<Packet>(a1It);  a1It  += PacketSize;
 
  120       Packet Bi  = ploadu<Packet>(rhsIt); rhsIt += PacketSize; 
 
  121       Packet Xi  = pload <Packet>(resIt);
 
  123       Xi    = pcj0.
pmadd(A0i,ptmp0, pcj0.
pmadd(A1i,ptmp1,Xi));
 
  124       ptmp2 = pcj1.
pmadd(A0i,  Bi, ptmp2);
 
  125       ptmp3 = pcj1.
pmadd(A1i,  Bi, ptmp3);
 
  126       pstore(resIt,Xi); resIt += PacketSize;
 
  128     for (
Index i=alignedEnd; i<endi; i++)
 
  130       res[i] += cj0.
pmul(A0[i], t0) + cj0.
pmul(A1[i],t1);
 
  131       t2 += cj1.
pmul(A0[i], rhs[i]);
 
  132       t3 += cj1.
pmul(A1[i], rhs[i]);
 
  138   for (
Index j=FirstTriangular ? 0 : bound;j<(FirstTriangular ? bound : 
size);j++)
 
  142     Scalar t1 = cjAlpha * rhs[j];
 
  145     for (
Index i=FirstTriangular ? 0 : j+1; i<(FirstTriangular ? j : 
size); i++)
 
  147       res[i] += cj0.
pmul(A0[i], t1);
 
  148       t2 += cj1.
pmul(A0[i], rhs[i]);
 
  150     res[j] += 
alpha * t2;
 
  162 template<
typename Lhs, 
int LhsMode, 
typename Rhs>
 
  163 struct selfadjoint_product_impl<
Lhs,LhsMode,false,
Rhs,0,true>
 
  177   template<
typename Dest>
 
  184     eigen_assert(dest.rows()==a_lhs.rows() && dest.cols()==a_rhs.cols());
 
  189     Scalar actualAlpha = 
alpha * LhsBlasTraits::extractScalarFactor(a_lhs)
 
  190                                * RhsBlasTraits::extractScalarFactor(a_rhs);
 
  193       EvalToDest = (Dest::InnerStrideAtCompileTime==1),
 
  194       UseRhs = (ActualRhsTypeCleaned::InnerStrideAtCompileTime==1)
 
  201                                                   EvalToDest ? dest.data() : static_dest.data());
 
  204         UseRhs ? 
const_cast<RhsScalar*
>(rhs.data()) : static_rhs.data());
 
  208       #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN 
  210       EIGEN_DENSE_STORAGE_CTOR_PLUGIN
 
  212       MappedDest(actualDestPtr, dest.size()) = dest;
 
  217       #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN 
  219       EIGEN_DENSE_STORAGE_CTOR_PLUGIN
 
  226                                                 int(LhsUpLo), bool(LhsBlasTraits::NeedToConjugate), bool(RhsBlasTraits::NeedToConjugate)>
::run 
  229         &lhs.coeffRef(0,0),  lhs.outerStride(), 
 
  236       dest = MappedDest(actualDestPtr, dest.size());
 
  240 template<
typename Lhs, 
typename Rhs, 
int RhsMode>
 
  241 struct selfadjoint_product_impl<
Lhs,0,true,
Rhs,RhsMode,false>
 
  246   template<
typename Dest>
 
  260 #endif // EIGEN_SELFADJOINT_MATRIX_VECTOR_H