15#include "./InternalHeaderCheck.h"
22template <
typename DstEvaluatorTypeT,
typename SrcEvaluatorTypeT>
23class generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT,
24 swap_assign_op<typename DstEvaluatorTypeT::Scalar>, Specialized>
25 :
public generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT,
26 swap_assign_op<typename DstEvaluatorTypeT::Scalar>, BuiltIn> {
28 using Base = generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT,
29 swap_assign_op<typename DstEvaluatorTypeT::Scalar>, BuiltIn>;
34 using Scalar =
typename Base::Scalar;
35 using DstXprType =
typename Base::DstXprType;
36 using Functor = swap_assign_op<Scalar>;
38 EIGEN_DEVICE_FUNC
constexpr EIGEN_STRONG_INLINE generic_dense_assignment_kernel(DstEvaluatorTypeT &dst,
39 const SrcEvaluatorTypeT &src,
42 : Base(dst, src, func, dstExpr) {}
44 template <
int StoreMode,
int LoadMode,
typename PacketType>
45 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignPacket(Index row, Index col) {
46 PacketType tmp = m_src.template packet<LoadMode, PacketType>(row, col);
47 const_cast<SrcEvaluatorTypeT &
>(m_src).
template writePacket<LoadMode>(
48 row, col, m_dst.template packet<StoreMode, PacketType>(row, col));
49 m_dst.template writePacket<StoreMode>(row, col, tmp);
52 template <
int StoreMode,
int LoadMode,
typename PacketType>
53 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignPacket(Index index) {
54 PacketType tmp = m_src.template packet<LoadMode, PacketType>(index);
55 const_cast<SrcEvaluatorTypeT &
>(m_src).
template writePacket<LoadMode>(
56 index, m_dst.template packet<StoreMode, PacketType>(index));
57 m_dst.template writePacket<StoreMode>(index, tmp);
60 template <
int StoreMode,
int LoadMode,
typename PacketType>
61 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignPacketByOuterInner(Index outer, Index inner) {
62 Index row = Base::rowIndexByOuterInner(outer, inner);
63 Index col = Base::colIndexByOuterInner(outer, inner);
64 assignPacket<StoreMode, LoadMode, PacketType>(row, col);
67 template <
int StoreMode,
int LoadMode,
typename PacketType>
68 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignPacketSegment(Index row, Index col, Index begin, Index count) {
69 PacketType tmp = m_src.template packetSegment<LoadMode, PacketType>(row, col, begin, count);
70 const_cast<SrcEvaluatorTypeT &
>(m_src).
template writePacketSegment<LoadMode>(
71 row, col, m_dst.template packetSegment<StoreMode, PacketType>(row, col, begin, count), begin, count);
72 m_dst.template writePacketSegment<StoreMode>(row, col, tmp, begin, count);
75 template <
int StoreMode,
int LoadMode,
typename PacketType>
76 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignPacketSegment(Index index, Index begin, Index count) {
77 PacketType tmp = m_src.template packetSegment<LoadMode, PacketType>(index, begin, count);
78 const_cast<SrcEvaluatorTypeT &
>(m_src).
template writePacketSegment<LoadMode>(
79 index, m_dst.template packetSegment<StoreMode, PacketType>(index, begin, count), begin, count);
80 m_dst.template writePacketSegment<StoreMode>(index, tmp, begin, count);
83 template <
int StoreMode,
int LoadMode,
typename PacketType>
84 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignPacketSegmentByOuterInner(Index outer, Index inner, Index begin,
86 Index row = Base::rowIndexByOuterInner(outer, inner);
87 Index col = Base::colIndexByOuterInner(outer, inner);
88 assignPacketSegment<StoreMode, LoadMode, PacketType>(row, col, begin, count);