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