4 #if EIGEN_ARCH_ARM && EIGEN_COMP_CLANG 11 : gebp_traits<float,float,false,false,Architecture::Generic,GEBPPacketFull>
18 "vmla.f32 %q[r], %q[c], %q[alpha]" 25 template <
typename LaneIdType>
28 const LaneIdType&)
const {
32 template <
typename LaneIdType>
35 const LaneIdType& lane)
const {
36 madd(a, b.get(lane),
c, tmp, lane);
40 #endif // EIGEN_ARCH_ARM && EIGEN_COMP_CLANG 46 : gebp_traits<float,float,false,false,Architecture::Generic,GEBPPacketFull>
76 c = vfmaq_n_f32(c, a, b);
83 { madd_helper<0>(
a,
b,
c); }
85 { madd_helper<1>(
a,
b,
c); }
87 { madd_helper<2>(
a,
b,
c); }
89 { madd_helper<3>(
a,
b,
c); }
95 #if EIGEN_COMP_GNUC_STRICT && !(EIGEN_GNUC_AT_LEAST(9,0)) 98 if(LaneID==0)
asm(
"fmla %0.4s, %1.4s, %2.s[0]\n" :
"+w" (
c) :
"w" (a),
"w" (
b) : );
99 else if(LaneID==1)
asm(
"fmla %0.4s, %1.4s, %2.s[1]\n" :
"+w" (
c) :
"w" (a),
"w" (
b) : );
100 else if(LaneID==2)
asm(
"fmla %0.4s, %1.4s, %2.s[2]\n" :
"+w" (
c) :
"w" (a),
"w" (
b) : );
101 else if(LaneID==3)
asm(
"fmla %0.4s, %1.4s, %2.s[3]\n" :
"+w" (
c) :
"w" (a),
"w" (
b) : );
103 c = vfmaq_laneq_f32(c, a, b, LaneID);
110 struct gebp_traits <double,double,false,false,Architecture::
NEON>
111 : gebp_traits<double,double,false,false,Architecture::Generic>
116 float64x2_t B_0, B_1;
126 dest.B_0 = vld1q_f64(b);
127 dest.B_1 = vld1q_f64(b+2);
145 c = vfmaq_n_f64(c, a, b);
152 { madd_helper<0>(
a,
b,
c); }
154 { madd_helper<1>(
a,
b,
c); }
156 { madd_helper<2>(
a,
b,
c); }
158 { madd_helper<3>(
a,
b,
c); }
161 template <
int LaneID>
164 #if EIGEN_COMP_GNUC_STRICT && !(EIGEN_GNUC_AT_LEAST(9,0)) 167 if(LaneID==0)
asm(
"fmla %0.2d, %1.2d, %2.d[0]\n" :
"+w" (
c) :
"w" (a),
"w" (b.B_0) : );
168 else if(LaneID==1)
asm(
"fmla %0.2d, %1.2d, %2.d[1]\n" :
"+w" (
c) :
"w" (a),
"w" (b.B_0) : );
169 else if(LaneID==2)
asm(
"fmla %0.2d, %1.2d, %2.d[0]\n" :
"+w" (
c) :
"w" (a),
"w" (b.B_1) : );
170 else if(LaneID==3)
asm(
"fmla %0.2d, %1.2d, %2.d[1]\n" :
"+w" (
c) :
"w" (a),
"w" (b.B_1) : );
172 if(LaneID==0) c = vfmaq_laneq_f64(c, a, b.B_0, 0);
173 else if(LaneID==1) c = vfmaq_laneq_f64(c, a, b.B_0, 1);
174 else if(LaneID==2) c = vfmaq_laneq_f64(c, a, b.B_1, 0);
175 else if(LaneID==3) c = vfmaq_laneq_f64(c, a, b.B_1, 1);
180 #endif // EIGEN_ARCH_ARM64 #define EIGEN_STRONG_INLINE
QuadPacket< RhsPacket > RhsPacketx4
Namespace containing all symbols from the Eigen library.
EIGEN_STRONG_INLINE void madd(const LhsPacketType &a, const RhsPacketType &b, AccPacketType &c, RhsPacketType &tmp, const LaneIdType &) const
EIGEN_STRONG_INLINE void updateRhs(const RhsScalar *b, RhsPacketType &dest) const
conditional< Vectorizable, _ResPacket, ResScalar >::type ResPacket
EIGEN_STRONG_INLINE void loadRhs(const RhsScalar *b, RhsPacketType &dest) const
EIGEN_STRONG_INLINE void acc(const AccPacket &c, const ResPacket &alpha, ResPacket &r) const
EIGEN_STRONG_INLINE void loadRhsQuad(const RhsScalar *b, RhsPacket &dest) const
conditional< Vectorizable, _LhsPacket, LhsScalar >::type LhsPacket
conditional< Vectorizable, _RhsPacket, RhsScalar >::type RhsPacket