2 #ifdef EIGEN_POWER_USE_PREFETCH 3 #define EIGEN_POWER_PREFETCH(p) prefetch(p) 5 #define EIGEN_POWER_PREFETCH(p) 12 template<
typename Scalar,
typename Packet,
typename DataMapper,
typename Index, const Index accRows>
14 const DataMapper&
res,
26 template<
typename Scalar,
typename Packet,
typename DataMapper,
typename Index, const Index accRows, const Index accCols>
28 const DataMapper& res,
42 template<
typename Scalar,
typename Packet,
typename DataMapper,
typename Index, const Index accCols>
44 const DataMapper& res,
56 template<
typename Packet>
59 template<
typename Scalar,
typename Packet,
typename Packetc,
typename DataMapper,
typename Index, const Index accRows, const Index accCols,
bool ConjugateLhs,
bool ConjugateRhs,
bool LhsIsReal,
bool RhsIsReal>
61 const DataMapper& res,
75 template<
typename Scalar,
typename Packet,
typename Packetc,
typename DataMapper,
typename Index, const Index accRows, const Index accCols,
bool ConjugateLhs,
bool ConjugateRhs,
bool LhsIsReal,
bool RhsIsReal>
77 const DataMapper& res,
93 template<
typename Scalar,
typename Packet,
typename Packetc,
typename DataMapper,
typename Index, const Index accCols,
bool ConjugateLhs,
bool ConjugateRhs,
bool LhsIsReal,
bool RhsIsReal>
95 const DataMapper& res,
105 Index remaining_cols,
107 const Packet& pAlphaImag);
109 template<
typename Scalar,
typename Packet>
112 template<
typename DataMapper,
typename Packet,
typename Index, const Index accCols,
int N,
int StorageOrder>
115 template<
typename DataMapper,
typename Packet,
typename Index, const Index accCols,
int N,
int StorageOrder>
118 template<
typename Packet>
121 template<
typename Packet,
int N>
122 EIGEN_ALWAYS_INLINE void bscalec(PacketBlock<Packet,N>& aReal, PacketBlock<Packet,N>& aImag,
const Packet& bReal,
const Packet& bImag, PacketBlock<Packet,N>& cReal, PacketBlock<Packet,N>& cImag);
135 16, 17, 18, 19, 20, 21, 22, 23};
139 24, 25, 26, 27, 28, 29, 30, 31};
143 template<
typename Packet,
typename Packetc>
146 acc1.
packet[0].v = vec_perm(taccReal.
packet[0], taccImag.
packet[0], p16uc_SETCOMPLEX32_FIRST);
147 acc1.
packet[1].v = vec_perm(taccReal.
packet[1], taccImag.
packet[1], p16uc_SETCOMPLEX32_FIRST);
148 acc1.
packet[2].v = vec_perm(taccReal.
packet[2], taccImag.
packet[2], p16uc_SETCOMPLEX32_FIRST);
149 acc1.
packet[3].v = vec_perm(taccReal.
packet[3], taccImag.
packet[3], p16uc_SETCOMPLEX32_FIRST);
151 acc2.
packet[0].v = vec_perm(taccReal.
packet[0], taccImag.
packet[0], p16uc_SETCOMPLEX32_SECOND);
152 acc2.
packet[1].v = vec_perm(taccReal.
packet[1], taccImag.
packet[1], p16uc_SETCOMPLEX32_SECOND);
153 acc2.
packet[2].v = vec_perm(taccReal.
packet[2], taccImag.
packet[2], p16uc_SETCOMPLEX32_SECOND);
154 acc2.
packet[3].v = vec_perm(taccReal.
packet[3], taccImag.
packet[3], p16uc_SETCOMPLEX32_SECOND);
157 template<
typename Packet,
typename Packetc>
160 bcouple_common<Packet, Packetc>(taccReal, taccImag, acc1, acc2);
162 acc1.packet[0] = padd<Packetc>(tRes.
packet[0], acc1.packet[0]);
163 acc1.packet[1] = padd<Packetc>(tRes.
packet[1], acc1.packet[1]);
164 acc1.packet[2] = padd<Packetc>(tRes.
packet[2], acc1.packet[2]);
165 acc1.packet[3] = padd<Packetc>(tRes.
packet[3], acc1.packet[3]);
173 template<
typename Packet,
typename Packetc>
176 acc1.
packet[0].v = vec_perm(taccReal.
packet[0], taccImag.
packet[0], p16uc_SETCOMPLEX32_FIRST);
178 acc2.
packet[0].v = vec_perm(taccReal.
packet[0], taccImag.
packet[0], p16uc_SETCOMPLEX32_SECOND);
181 template<
typename Packet,
typename Packetc>
184 bcouple_common<Packet, Packetc>(taccReal, taccImag, acc1, acc2);
186 acc1.packet[0] = padd<Packetc>(tRes.
packet[0], acc1.packet[0]);
194 acc1.packet[0].v = vec_perm(taccReal.packet[0], taccImag.packet[0], p16uc_SETCOMPLEX64_FIRST);
195 acc1.packet[1].v = vec_perm(taccReal.packet[1], taccImag.packet[1], p16uc_SETCOMPLEX64_FIRST);
196 acc1.packet[2].v = vec_perm(taccReal.packet[2], taccImag.packet[2], p16uc_SETCOMPLEX64_FIRST);
197 acc1.packet[3].v = vec_perm(taccReal.packet[3], taccImag.packet[3], p16uc_SETCOMPLEX64_FIRST);
199 acc2.packet[0].v = vec_perm(taccReal.packet[0], taccImag.packet[0], p16uc_SETCOMPLEX64_SECOND);
200 acc2.packet[1].v = vec_perm(taccReal.packet[1], taccImag.packet[1], p16uc_SETCOMPLEX64_SECOND);
201 acc2.packet[2].v = vec_perm(taccReal.packet[2], taccImag.packet[2], p16uc_SETCOMPLEX64_SECOND);
202 acc2.packet[3].v = vec_perm(taccReal.packet[3], taccImag.packet[3], p16uc_SETCOMPLEX64_SECOND);
208 acc1.packet[0].v = vec_perm(taccReal.packet[0], taccImag.packet[0], p16uc_SETCOMPLEX64_FIRST);
210 acc2.packet[0].v = vec_perm(taccReal.packet[0], taccImag.packet[0], p16uc_SETCOMPLEX64_SECOND);
214 template<
typename Scalar,
typename Packet>
217 return ploadu<Packet>(rhs);
EIGEN_STRONG_INLINE void gemm_extra_col(const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index row, Index col, Index remaining_rows, Index remaining_cols, const Packet &pAlpha)
#define EIGEN_ALWAYS_INLINE
#define EIGEN_STRONG_INLINE
__vector unsigned char Packet16uc
static const Packet16uc p16uc_SETCOMPLEX32_SECOND
EIGEN_ALWAYS_INLINE Packet ploadRhs(const Scalar *rhs)
static const Packet16uc p16uc_SETCOMPLEX64_SECOND
static const Packet16uc p16uc_SETCOMPLEX32_FIRST
EIGEN_ALWAYS_INLINE void bscalec(PacketBlock< Packet, N > &aReal, PacketBlock< Packet, N > &aImag, const Packet &bReal, const Packet &bImag, PacketBlock< Packet, N > &cReal, PacketBlock< Packet, N > &cImag)
Namespace containing all symbols from the Eigen library.
EIGEN_ALWAYS_INLINE void bcouple_common< Packet2d, Packet1cd >(PacketBlock< Packet2d, 4 > &taccReal, PacketBlock< Packet2d, 4 > &taccImag, PacketBlock< Packet1cd, 4 > &acc1, PacketBlock< Packet1cd, 4 > &acc2)
EIGEN_STRONG_INLINE void gemm_complex_extra_row(const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index row, Index col, Index rows, Index cols, Index remaining_rows, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
EIGEN_ALWAYS_INLINE Packet bmask(const int remaining_rows)
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
EIGEN_ALWAYS_INLINE void bcouple_common(PacketBlock< Packet, 4 > &taccReal, PacketBlock< Packet, 4 > &taccImag, PacketBlock< Packetc, 4 > &acc1, PacketBlock< Packetc, 4 > &acc2)
EIGEN_STRONG_INLINE void gemm_extra_row(const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index row, Index col, Index rows, Index cols, Index remaining_rows, const Packet &pAlpha, const Packet &pMask)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
EIGEN_STRONG_INLINE void gemm_complex_extra_col(const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index row, Index col, Index remaining_rows, Index remaining_cols, const Packet &pAlphaReal, const Packet &pAlphaImag)
static const Packet16uc p16uc_SETCOMPLEX64_FIRST
EIGEN_ALWAYS_INLINE void bload(PacketBlock< Packet, 4 > &acc, const DataMapper &res, Index row, Index col)
EIGEN_ALWAYS_INLINE Packet ploadLhs(const Scalar *lhs)
EIGEN_STRONG_INLINE void gemm_complex_unrolled_col(const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index &row, Index rows, Index col, Index remaining_cols, const Packet &pAlphaReal, const Packet &pAlphaImag)
EIGEN_ALWAYS_INLINE void bscale(PacketBlock< Packet, 4 > &acc, PacketBlock< Packet, 4 > &accZ, const Packet &pAlpha)
EIGEN_ALWAYS_INLINE void bcouple(PacketBlock< Packet, 4 > &taccReal, PacketBlock< Packet, 4 > &taccImag, PacketBlock< Packetc, 8 > &tRes, PacketBlock< Packetc, 4 > &acc1, PacketBlock< Packetc, 4 > &acc2)
EIGEN_STRONG_INLINE void gemm_unrolled_col(const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index &row, Index rows, Index col, Index remaining_cols, const Packet &pAlpha)