4 #if EIGEN_ARCH_ARM && EIGEN_COMP_CLANG 10 struct gebp_traits <float,float,false,false,Architecture::NEON,GEBPPacketFull>
11 : gebp_traits<float,float,false,false,Architecture::Generic,GEBPPacketFull>
13 EIGEN_STRONG_INLINE
void acc(
const AccPacket& c,
const ResPacket& alpha, ResPacket& r)
const 18 "vmla.f32 %q[r], %q[c], %q[alpha]" 25 template <
typename LaneIdType>
26 EIGEN_STRONG_INLINE
void madd(
const Packet4f& a,
const Packet4f& b,
27 Packet4f& c, Packet4f& tmp,
28 const LaneIdType&)
const {
32 template <
typename LaneIdType>
33 EIGEN_STRONG_INLINE
void madd(
const Packet4f& a,
const QuadPacket<Packet4f>& b,
34 Packet4f& c, Packet4f& tmp,
35 const LaneIdType& lane)
const {
36 madd(a, b.get(lane), c, tmp, lane);
40 #endif // EIGEN_ARCH_ARM && EIGEN_COMP_CLANG 45 struct gebp_traits <float,float,false,false,Architecture::NEON,GEBPPacketFull>
46 : gebp_traits<float,float,false,false,Architecture::Generic,GEBPPacketFull>
48 typedef float RhsPacket;
49 typedef float32x4_t RhsPacketx4;
51 EIGEN_STRONG_INLINE
void loadRhs(
const RhsScalar* b, RhsPacket& dest)
const 56 EIGEN_STRONG_INLINE
void loadRhs(
const RhsScalar* b, RhsPacketx4& dest)
const 61 EIGEN_STRONG_INLINE
void updateRhs(
const RhsScalar* b, RhsPacket& dest)
const 66 EIGEN_STRONG_INLINE
void updateRhs(
const RhsScalar*, RhsPacketx4&)
const 69 EIGEN_STRONG_INLINE
void loadRhsQuad(
const RhsScalar* b, RhsPacket& dest)
const 74 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacket& b, AccPacket& c, RhsPacket& ,
const FixedInt<0>&)
const 76 c = vfmaq_n_f32(c, a, b);
82 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c, RhsPacket& ,
const FixedInt<0>&)
const 83 { madd_helper<0>(a, b, c); }
84 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c, RhsPacket& ,
const FixedInt<1>&)
const 85 { madd_helper<1>(a, b, c); }
86 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c, RhsPacket& ,
const FixedInt<2>&)
const 87 { madd_helper<2>(a, b, c); }
88 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c, RhsPacket& ,
const FixedInt<3>&)
const 89 { madd_helper<3>(a, b, c); }
93 EIGEN_STRONG_INLINE
void madd_helper(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c)
const 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>
113 typedef double RhsPacket;
116 float64x2_t B_0, B_1;
119 EIGEN_STRONG_INLINE
void loadRhs(
const RhsScalar* b, RhsPacket& dest)
const 124 EIGEN_STRONG_INLINE
void loadRhs(
const RhsScalar* b, RhsPacketx4& dest)
const 126 dest.B_0 = vld1q_f64(b);
127 dest.B_1 = vld1q_f64(b+2);
130 EIGEN_STRONG_INLINE
void updateRhs(
const RhsScalar* b, RhsPacket& dest)
const 135 EIGEN_STRONG_INLINE
void updateRhs(
const RhsScalar*, RhsPacketx4&)
const 138 EIGEN_STRONG_INLINE
void loadRhsQuad(
const RhsScalar* b, RhsPacket& dest)
const 143 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacket& b, AccPacket& c, RhsPacket& ,
const FixedInt<0>&)
const 145 c = vfmaq_n_f64(c, a, b);
151 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c, RhsPacket& ,
const FixedInt<0>&)
const 152 { madd_helper<0>(a, b, c); }
153 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c, RhsPacket& ,
const FixedInt<1>&)
const 154 { madd_helper<1>(a, b, c); }
155 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c, RhsPacket& ,
const FixedInt<2>&)
const 156 { madd_helper<2>(a, b, c); }
157 EIGEN_STRONG_INLINE
void madd(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c, RhsPacket& ,
const FixedInt<3>&)
const 158 { madd_helper<3>(a, b, c); }
161 template <
int LaneID>
162 EIGEN_STRONG_INLINE
void madd_helper(
const LhsPacket& a,
const RhsPacketx4& b, AccPacket& c)
const 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 Namespace containing all symbols from the Eigen library.
Definition: Core:141
Definition: Eigen_Colamd.h:50