458 const Index vectorDelta = vectorSize * ((PanelMode) ? stride : depth);
459 Index rir = ((PanelMode) ? (vectorSize * offset) : 0), rii;
463 for (;
j + vectorSize <=
rows;
j += vectorSize) {
464 const DataMapper lhs2 = UseLhs ? lhs.getSubMapper(
j, 0) : lhs.getSubMapper(0,
j);
467 rii = rir + vectorDelta;
469 dhs_ccopy(blockAt, lhs2,
i, rir, rii, depth, vectorSize);
471 for (;
i < depth;
i++) {
472 PacketBlock<Packet, 1> blockr, blocki;
473 PacketBlock<PacketC, 2> cblock;
475 if (((StorageOrder ==
ColMajor) && UseLhs) || (((StorageOrder ==
RowMajor) && !UseLhs))) {
477 cblock.packet[0] = lhs2.template loadPacket<PacketC>(0,
i);
478 cblock.packet[1] = lhs2.template loadPacket<PacketC>(2,
i);
480 cblock.packet[0] = lhs2.template loadPacket<PacketC>(
i, 0);
481 cblock.packet[1] = lhs2.template loadPacket<PacketC>(
i, 2);
485 cblock.packet[0] =
pload2(lhs2(0,
i), lhs2(1,
i));
486 cblock.packet[1] =
pload2(lhs2(2,
i), lhs2(3,
i));
488 cblock.packet[0] =
pload2(lhs2(
i, 0), lhs2(
i, 1));
489 cblock.packet[1] =
pload2(lhs2(
i, 2), lhs2(
i, 3));
493 blockr.packet[0] = vec_perm(cblock.packet[0].v, cblock.packet[1].v,
p16uc_GETREAL32);
494 blocki.packet[0] = vec_perm(cblock.packet[0].v, cblock.packet[1].v,
p16uc_GETIMAG32);
497 blocki.packet[0] = -blocki.packet[0];
500 pstore<Scalar>(blockAt + rir, blockr.packet[0]);
501 pstore<Scalar>(blockAt + rii, blocki.packet[0]);
507 rir += ((PanelMode) ? (vectorSize * (2 * stride - depth)) : vectorDelta);
511 if (PanelMode) rir -= (offset * (vectorSize - 1));
514 const DataMapper lhs2 = lhs.getSubMapper(0,
j);
515 rii = rir + ((PanelMode) ? stride : depth);
518 blockAt[rir] = lhs2(
i, 0).real();
521 blockAt[rii] = -lhs2(
i, 0).imag();
523 blockAt[rii] = lhs2(
i, 0).imag();
529 rir += ((PanelMode) ? (2 * stride - depth) : depth);
533 if (PanelMode) rir += (offset * (
rows -
j - vectorSize));
534 rii = rir + (((PanelMode) ? stride : depth) * (
rows -
j));
539 blockAt[rir] = lhs(
k,
i).real();
542 blockAt[rii] = -lhs(
k,
i).imag();
544 blockAt[rii] = lhs(
k,
i).imag();
int rows
Definition: Tutorial_commainit_02.cpp:1
SCALAR Scalar
Definition: bench_gemm.cpp:45
char char char int int * k
Definition: level2_impl.h:374
EIGEN_STRONG_INLINE Packet2cf pload2(const std::complex< float > &from0, const std::complex< float > &from1)
Definition: AltiVec/Complex.h:185
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
EIGEN_ALWAYS_INLINE void dhs_ccopy(Scalar *blockAt, const DataMapper &lhs2, Index &i, Index &rir, Index &rii, Index depth, const Index vectorSize)
Definition: MatrixProduct.h:420
@ vectorsize
Definition: MatrixProduct.h:67
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2