11 #ifndef EIGEN_COMPLEX_NEON_H
12 #define EIGEN_COMPLEX_NEON_H
14 #include "../../InternalHeaderCheck.h"
23 #if EIGEN_COMP_CLANG || EIGEN_COMP_CASTXML
24 uint32x4_t ret = { 0x00000000, 0x80000000, 0x00000000, 0x80000000 };
27 static const uint32_t conj_XOR_DATA[] = { 0x00000000, 0x80000000, 0x00000000, 0x80000000 };
28 return vld1q_u32( conj_XOR_DATA );
34 static const uint32_t conj_XOR_DATA[] = { 0x00000000, 0x80000000 };
35 return vld1_u32( conj_XOR_DATA );
42 EIGEN_STRONG_INLINE Packet1cf() {}
43 EIGEN_STRONG_INLINE
explicit Packet1cf(
const Packet2f&
a) :
v(
a) {}
48 EIGEN_STRONG_INLINE Packet2cf() {}
49 EIGEN_STRONG_INLINE
explicit Packet2cf(
const Packet4f&
a) :
v(
a) {}
53 template<>
struct packet_traits<
std::complex<float> > : default_packet_traits
55 typedef Packet2cf type;
56 typedef Packet1cf half;
77 template<>
struct unpacket_traits<Packet1cf>
79 typedef std::complex<float> type;
80 typedef Packet1cf half;
87 masked_load_available =
false,
88 masked_store_available =
false
91 template<>
struct unpacket_traits<Packet2cf>
93 typedef std::complex<float> type;
94 typedef Packet1cf half;
101 masked_load_available =
false,
102 masked_store_available =
false
107 {
return Packet1cf(vset_lane_f32(
a, vdup_n_f32(0.f), 0)); }
109 {
return Packet2cf(vreinterpretq_f32_u64(vmovl_u32(vreinterpret_u32_f32(
a)))); }
112 {
return Packet1cf(vld1_f32(
reinterpret_cast<const float*
>(&from))); }
113 template<> EIGEN_STRONG_INLINE Packet2cf
pset1<Packet2cf>(
const std::complex<float>& from)
115 const float32x2_t r64 = vld1_f32(
reinterpret_cast<const float*
>(&from));
116 return Packet2cf(vcombine_f32(r64, r64));
119 template<> EIGEN_STRONG_INLINE Packet1cf
padd<Packet1cf>(
const Packet1cf&
a,
const Packet1cf&
b)
121 template<> EIGEN_STRONG_INLINE Packet2cf
padd<Packet2cf>(
const Packet2cf&
a,
const Packet2cf&
b)
124 template<> EIGEN_STRONG_INLINE Packet1cf
psub<Packet1cf>(
const Packet1cf&
a,
const Packet1cf&
b)
126 template<> EIGEN_STRONG_INLINE Packet2cf
psub<Packet2cf>(
const Packet2cf&
a,
const Packet2cf&
b)
129 template<> EIGEN_STRONG_INLINE Packet1cf
pnegate(
const Packet1cf&
a) {
return Packet1cf(pnegate<Packet2f>(
a.v)); }
130 template<> EIGEN_STRONG_INLINE Packet2cf
pnegate(
const Packet2cf&
a) {
return Packet2cf(pnegate<Packet4f>(
a.v)); }
132 template<> EIGEN_STRONG_INLINE Packet1cf
pconj(
const Packet1cf&
a)
135 return Packet1cf(vreinterpret_f32_u32(veor_u32(
b,
p2ui_CONJ_XOR())));
137 template<> EIGEN_STRONG_INLINE Packet2cf
pconj(
const Packet2cf&
a)
140 return Packet2cf(vreinterpretq_f32_u32(veorq_u32(
b,
p4ui_CONJ_XOR())));
143 template<> EIGEN_STRONG_INLINE Packet1cf
pmul<Packet1cf>(
const Packet1cf&
a,
const Packet1cf&
b)
148 v1 = vdup_lane_f32(
a.v, 0);
150 v2 = vdup_lane_f32(
a.v, 1);
152 v1 = vmul_f32(
v1,
b.v);
154 v2 = vmul_f32(
v2,
b.v);
160 return Packet1cf(vadd_f32(
v1,
v2));
162 template<> EIGEN_STRONG_INLINE Packet2cf
pmul<Packet2cf>(
const Packet2cf&
a,
const Packet2cf&
b)
167 v1 = vcombine_f32(vdup_lane_f32(vget_low_f32(
a.v), 0), vdup_lane_f32(vget_high_f32(
a.v), 0));
169 v2 = vcombine_f32(vdup_lane_f32(vget_low_f32(
a.v), 1), vdup_lane_f32(vget_high_f32(
a.v), 1));
171 v1 = vmulq_f32(
v1,
b.v);
173 v2 = vmulq_f32(
v2,
b.v);
175 v2 = vreinterpretq_f32_u32(veorq_u32(vreinterpretq_u32_f32(
v2),
p4ui_CONJ_XOR()));
177 v2 = vrev64q_f32(
v2);
179 return Packet2cf(vaddq_f32(
v1,
v2));
182 template<> EIGEN_STRONG_INLINE Packet1cf
pcmp_eq(
const Packet1cf&
a,
const Packet1cf&
b)
189 Packet2f eq_swapped = vrev64_f32(eq);
193 template<> EIGEN_STRONG_INLINE Packet2cf
pcmp_eq(
const Packet2cf&
a,
const Packet2cf&
b)
200 Packet4f eq_swapped = vrev64q_f32(eq);
205 template<> EIGEN_STRONG_INLINE Packet1cf
pand<Packet1cf>(
const Packet1cf&
a,
const Packet1cf&
b)
206 {
return Packet1cf(vreinterpret_f32_u32(vand_u32(vreinterpret_u32_f32(
a.v), vreinterpret_u32_f32(
b.v)))); }
207 template<> EIGEN_STRONG_INLINE Packet2cf
pand<Packet2cf>(
const Packet2cf&
a,
const Packet2cf&
b)
208 {
return Packet2cf(vreinterpretq_f32_u32(vandq_u32(vreinterpretq_u32_f32(
a.v), vreinterpretq_u32_f32(
b.v)))); }
210 template<> EIGEN_STRONG_INLINE Packet1cf
por<Packet1cf>(
const Packet1cf&
a,
const Packet1cf&
b)
211 {
return Packet1cf(vreinterpret_f32_u32(vorr_u32(vreinterpret_u32_f32(
a.v), vreinterpret_u32_f32(
b.v)))); }
212 template<> EIGEN_STRONG_INLINE Packet2cf
por<Packet2cf>(
const Packet2cf&
a,
const Packet2cf&
b)
213 {
return Packet2cf(vreinterpretq_f32_u32(vorrq_u32(vreinterpretq_u32_f32(
a.v), vreinterpretq_u32_f32(
b.v)))); }
215 template<> EIGEN_STRONG_INLINE Packet1cf
pxor<Packet1cf>(
const Packet1cf&
a,
const Packet1cf&
b)
216 {
return Packet1cf(vreinterpret_f32_u32(veor_u32(vreinterpret_u32_f32(
a.v), vreinterpret_u32_f32(
b.v)))); }
217 template<> EIGEN_STRONG_INLINE Packet2cf
pxor<Packet2cf>(
const Packet2cf&
a,
const Packet2cf&
b)
218 {
return Packet2cf(vreinterpretq_f32_u32(veorq_u32(vreinterpretq_u32_f32(
a.v), vreinterpretq_u32_f32(
b.v)))); }
221 {
return Packet1cf(vreinterpret_f32_u32(vbic_u32(vreinterpret_u32_f32(
a.v), vreinterpret_u32_f32(
b.v)))); }
222 template<> EIGEN_STRONG_INLINE Packet2cf
pandnot<Packet2cf>(
const Packet2cf&
a,
const Packet2cf&
b)
223 {
return Packet2cf(vreinterpretq_f32_u32(vbicq_u32(vreinterpretq_u32_f32(
a.v), vreinterpretq_u32_f32(
b.v)))); }
227 template<> EIGEN_STRONG_INLINE Packet2cf
pload<Packet2cf>(
const std::complex<float>* from)
232 template<> EIGEN_STRONG_INLINE Packet2cf
ploadu<Packet2cf>(
const std::complex<float>* from)
237 template<> EIGEN_STRONG_INLINE Packet2cf
ploaddup<Packet2cf>(
const std::complex<float>* from)
240 template<> EIGEN_STRONG_INLINE
void pstore <std::complex<float> >(std::complex<float> *to,
const Packet1cf& from)
242 template<> EIGEN_STRONG_INLINE
void pstore <std::complex<float> >(std::complex<float> *to,
const Packet2cf& from)
245 template<> EIGEN_STRONG_INLINE
void pstoreu<std::complex<float> >(std::complex<float> *to,
const Packet1cf& from)
247 template<> EIGEN_STRONG_INLINE
void pstoreu<std::complex<float> >(std::complex<float> *to,
const Packet2cf& from)
251 const std::complex<float>* from,
Index stride)
254 return Packet1cf(vset_lane_f32(
std::imag(from[0*stride]), tmp, 1));
256 template<>
EIGEN_DEVICE_FUNC inline Packet2cf pgather<std::complex<float>, Packet2cf>(
257 const std::complex<float>* from,
Index stride)
263 return Packet2cf(
res);
267 std::complex<float>* to,
const Packet1cf& from,
Index stride)
268 { to[stride*0] = std::complex<float>(vget_lane_f32(from.v, 0), vget_lane_f32(from.v, 1)); }
269 template<>
EIGEN_DEVICE_FUNC inline void pscatter<std::complex<float>, Packet2cf>(
270 std::complex<float>* to,
const Packet2cf& from,
Index stride)
272 to[stride*0] = std::complex<float>(vgetq_lane_f32(from.v, 0), vgetq_lane_f32(from.v, 1));
273 to[stride*1] = std::complex<float>(vgetq_lane_f32(from.v, 2), vgetq_lane_f32(from.v, 3));
276 template<> EIGEN_STRONG_INLINE
void prefetch<std::complex<float> >(
const std::complex<float> *addr)
279 template<> EIGEN_STRONG_INLINE std::complex<float>
pfirst<Packet1cf>(
const Packet1cf&
a)
282 vst1_f32(
reinterpret_cast<float*
>(&
x),
a.v);
285 template<> EIGEN_STRONG_INLINE std::complex<float>
pfirst<Packet2cf>(
const Packet2cf&
a)
288 vst1q_f32(
reinterpret_cast<float*
>(
x),
a.v);
292 template<> EIGEN_STRONG_INLINE Packet1cf
preverse(
const Packet1cf&
a) {
return a; }
293 template<> EIGEN_STRONG_INLINE Packet2cf
preverse(
const Packet2cf&
a)
294 {
return Packet2cf(vcombine_f32(vget_high_f32(
a.v), vget_low_f32(
a.v))); }
297 {
return Packet1cf(vrev64_f32(
a.v)); }
299 {
return Packet2cf(vrev64q_f32(
a.v)); }
301 template<> EIGEN_STRONG_INLINE std::complex<float>
predux<Packet1cf>(
const Packet1cf&
a)
303 std::complex<float> s;
304 vst1_f32((
float *)&s,
a.v);
307 template<> EIGEN_STRONG_INLINE std::complex<float>
predux<Packet2cf>(
const Packet2cf&
a)
309 std::complex<float> s;
310 vst1_f32(
reinterpret_cast<float*
>(&s), vadd_f32(vget_low_f32(
a.v), vget_high_f32(
a.v)));
316 std::complex<float> s;
317 vst1_f32((
float *)&s,
a.v);
322 float32x2_t a1, a2,
v1,
v2, prod;
323 std::complex<float> s;
325 a1 = vget_low_f32(
a.v);
326 a2 = vget_high_f32(
a.v);
328 v1 = vdup_lane_f32(a1, 0);
330 v2 = vdup_lane_f32(a1, 1);
332 v1 = vmul_f32(
v1, a2);
334 v2 = vmul_f32(
v2, a2);
340 prod = vadd_f32(
v1,
v2);
342 vst1_f32(
reinterpret_cast<float*
>(&s), prod);
350 template<> EIGEN_STRONG_INLINE Packet1cf
pdiv<Packet1cf>(const Packet1cf&
a, const Packet1cf&
b)
354 template<> EIGEN_STRONG_INLINE Packet2cf
pdiv<Packet2cf>(
const Packet2cf&
a,
const Packet2cf&
b)
362 Packet4f tmp = vcombine_f32(vget_high_f32(kernel.packet[0].v), vget_high_f32(kernel.packet[1].v));
363 kernel.packet[0].v = vcombine_f32(vget_low_f32(kernel.packet[0].v), vget_low_f32(kernel.packet[1].v));
364 kernel.packet[1].v = tmp;
368 return psqrt_complex<Packet1cf>(
a);
372 return psqrt_complex<Packet2cf>(
a);
376 #if EIGEN_ARCH_ARM64 && !EIGEN_APPLE_DOUBLE_NEON_BUG
379 #if EIGEN_COMP_CLANG || EIGEN_COMP_CASTXML || EIGEN_COMP_CPE
380 static uint64x2_t p2ul_CONJ_XOR = {0x0, 0x8000000000000000};
382 const uint64_t p2ul_conj_XOR_DATA[] = { 0x0, 0x8000000000000000 };
383 static uint64x2_t p2ul_CONJ_XOR = vld1q_u64( p2ul_conj_XOR_DATA );
388 EIGEN_STRONG_INLINE Packet1cd() {}
389 EIGEN_STRONG_INLINE
explicit Packet1cd(
const Packet2d&
a) :
v(
a) {}
393 template<>
struct packet_traits<
std::complex<double> > : default_packet_traits
395 typedef Packet1cd type;
396 typedef Packet1cd half;
417 template<>
struct unpacket_traits<Packet1cd>
419 typedef std::complex<double> type;
420 typedef Packet1cd half;
427 masked_load_available=
false,
428 masked_store_available=
false
432 template<> EIGEN_STRONG_INLINE Packet1cd
pload<Packet1cd>(
const std::complex<double>* from)
435 template<> EIGEN_STRONG_INLINE Packet1cd
ploadu<Packet1cd>(
const std::complex<double>* from)
438 template<> EIGEN_STRONG_INLINE Packet1cd
pset1<Packet1cd>(
const std::complex<double>& from)
444 template<> EIGEN_STRONG_INLINE Packet1cd
padd<Packet1cd>(
const Packet1cd&
a,
const Packet1cd&
b)
447 template<> EIGEN_STRONG_INLINE Packet1cd
psub<Packet1cd>(
const Packet1cd&
a,
const Packet1cd&
b)
450 template<> EIGEN_STRONG_INLINE Packet1cd
pnegate(
const Packet1cd&
a)
451 {
return Packet1cd(pnegate<Packet2d>(
a.v)); }
453 template<> EIGEN_STRONG_INLINE Packet1cd
pconj(
const Packet1cd&
a)
454 {
return Packet1cd(vreinterpretq_f64_u64(veorq_u64(vreinterpretq_u64_f64(
a.v), p2ul_CONJ_XOR))); }
456 template<> EIGEN_STRONG_INLINE Packet1cd
pmul<Packet1cd>(
const Packet1cd&
a,
const Packet1cd&
b)
461 v1 = vdupq_lane_f64(vget_low_f64(
a.v), 0);
463 v2 = vdupq_lane_f64(vget_high_f64(
a.v), 0);
465 v1 = vmulq_f64(
v1,
b.v);
467 v2 = vmulq_f64(
v2,
b.v);
469 v2 = vreinterpretq_f64_u64(veorq_u64(vreinterpretq_u64_f64(
v2), p2ul_CONJ_XOR));
471 v2 = preverse<Packet2d>(
v2);
473 return Packet1cd(vaddq_f64(
v1,
v2));
476 template<> EIGEN_STRONG_INLINE Packet1cd
pcmp_eq(
const Packet1cd&
a,
const Packet1cd&
b)
483 Packet2d eq_swapped = vreinterpretq_f64_u32(vrev64q_u32(vreinterpretq_u32_f64(eq)));
488 template<> EIGEN_STRONG_INLINE Packet1cd
pand<Packet1cd>(
const Packet1cd&
a,
const Packet1cd&
b)
489 {
return Packet1cd(vreinterpretq_f64_u64(vandq_u64(vreinterpretq_u64_f64(
a.v),vreinterpretq_u64_f64(
b.v)))); }
491 template<> EIGEN_STRONG_INLINE Packet1cd
por<Packet1cd>(
const Packet1cd&
a,
const Packet1cd&
b)
492 {
return Packet1cd(vreinterpretq_f64_u64(vorrq_u64(vreinterpretq_u64_f64(
a.v),vreinterpretq_u64_f64(
b.v)))); }
494 template<> EIGEN_STRONG_INLINE Packet1cd
pxor<Packet1cd>(
const Packet1cd&
a,
const Packet1cd&
b)
495 {
return Packet1cd(vreinterpretq_f64_u64(veorq_u64(vreinterpretq_u64_f64(
a.v),vreinterpretq_u64_f64(
b.v)))); }
497 template<> EIGEN_STRONG_INLINE Packet1cd
pandnot<Packet1cd>(
const Packet1cd&
a,
const Packet1cd&
b)
498 {
return Packet1cd(vreinterpretq_f64_u64(vbicq_u64(vreinterpretq_u64_f64(
a.v),vreinterpretq_u64_f64(
b.v)))); }
500 template<> EIGEN_STRONG_INLINE Packet1cd
ploaddup<Packet1cd>(
const std::complex<double>* from)
503 template<> EIGEN_STRONG_INLINE
void pstore <std::complex<double> >(std::complex<double> *to,
const Packet1cd& from)
506 template<> EIGEN_STRONG_INLINE
void pstoreu<std::complex<double> >(std::complex<double> *to,
const Packet1cd& from)
509 template<> EIGEN_STRONG_INLINE
void prefetch<std::complex<double> >(
const std::complex<double> *addr)
512 template<>
EIGEN_DEVICE_FUNC inline Packet1cd pgather<std::complex<double>, Packet1cd>(
513 const std::complex<double>* from,
Index stride)
518 return Packet1cd(
res);
521 template<>
EIGEN_DEVICE_FUNC inline void pscatter<std::complex<double>, Packet1cd>(
522 std::complex<double>* to,
const Packet1cd& from,
Index stride)
523 { to[stride*0] = std::complex<double>(vgetq_lane_f64(from.v, 0), vgetq_lane_f64(from.v, 1)); }
525 template<> EIGEN_STRONG_INLINE std::complex<double>
pfirst<Packet1cd>(
const Packet1cd&
a)
528 pstore<std::complex<double> >(&
res,
a);
532 template<> EIGEN_STRONG_INLINE Packet1cd
preverse(
const Packet1cd&
a) {
return a; }
540 template<> EIGEN_STRONG_INLINE Packet1cd
pdiv<Packet1cd>(
const Packet1cd&
a,
const Packet1cd&
b)
545 EIGEN_STRONG_INLINE Packet1cd
pcplxflip(
const Packet1cd&
x)
548 EIGEN_STRONG_INLINE
void ptranspose(PacketBlock<Packet1cd,2>& kernel)
550 Packet2d tmp = vcombine_f64(vget_high_f64(kernel.packet[0].v), vget_high_f64(kernel.packet[1].v));
551 kernel.packet[0].v = vcombine_f64(vget_low_f64(kernel.packet[0].v), vget_low_f64(kernel.packet[1].v));
552 kernel.packet[1].v = tmp;
556 return psqrt_complex<Packet1cd>(
a);
Array< int, Dynamic, 1 > v
const ImagReturnType imag() const
RealReturnType real() const
#define EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(PACKET_CPLX, PACKET_REAL)
#define EIGEN_DEBUG_ALIGNED_STORE
#define EIGEN_DEBUG_ALIGNED_LOAD
#define EIGEN_DEBUG_UNALIGNED_STORE
#define EIGEN_DEBUG_UNALIGNED_LOAD
#define EIGEN_DEVICE_FUNC
#define EIGEN_ARM_PREFETCH(ADDR)
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Map< RowVectorXf > v2(M2.data(), M2.size())
M1<< 1, 2, 3, 4, 5, 6, 7, 8, 9;Map< RowVectorXf > v1(M1.data(), M1.size())
std::complex< float > predux< Packet1cf >(const Packet1cf &a)
Packet1cf por< Packet1cf >(const Packet1cf &a, const Packet1cf &b)
uint32x2_t p2ui_CONJ_XOR()
Packet1cd pxor< Packet1cd >(const Packet1cd &a, const Packet1cd &b)
Packet2cf pandnot< Packet2cf >(const Packet2cf &a, const Packet2cf &b)
void pstore(Scalar *to, const Packet &from)
Packet1cf psqrt< Packet1cf >(const Packet1cf &a)
Packet1cf ploadu< Packet1cf >(const std::complex< float > *from)
std::complex< float > predux< Packet2cf >(const Packet2cf &a)
Packet1cd pload< Packet1cd >(const std::complex< double > *from)
Packet2cf padd< Packet2cf >(const Packet2cf &a, const Packet2cf &b)
Packet2cf ploaddup< Packet2cf >(const std::complex< float > *from)
std::complex< float > pfirst< Packet2cf >(const Packet2cf &a)
Packet2cf pset1< Packet2cf >(const std::complex< float > &from)
Packet1cf pandnot< Packet1cf >(const Packet1cf &a, const Packet1cf &b)
Packet1cd pmul< Packet1cd >(const Packet1cd &a, const Packet1cd &b)
Packet1cf ploaddup< Packet1cf >(const std::complex< float > *from)
Packet1cd pdiv< Packet1cd >(const Packet1cd &a, const Packet1cd &b)
Packet1cd pandnot< Packet1cd >(const Packet1cd &a, const Packet1cd &b)
Packet2cf ploadu< Packet2cf >(const std::complex< float > *from)
Packet1cd padd< Packet1cd >(const Packet1cd &a, const Packet1cd &b)
Packet2cf pnegate(const Packet2cf &a)
Packet1cd ploadu< Packet1cd >(const std::complex< double > *from)
Packet1cf pxor< Packet1cf >(const Packet1cf &a, const Packet1cf &b)
Packet4f pand< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet2cf por< Packet2cf >(const Packet2cf &a, const Packet2cf &b)
Packet1cf pmul< Packet1cf >(const Packet1cf &a, const Packet1cf &b)
Packet1cd pcplxflip(const Packet1cd &x)
Packet4f pcmp_eq< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet2d pand< Packet2d >(const Packet2d &a, const Packet2d &b)
std::complex< double > pfirst< Packet1cd >(const Packet1cd &a)
void pstoreu(Scalar *to, const Packet &from)
Packet2cf pcmp_eq(const Packet2cf &a, const Packet2cf &b)
Packet1cf pset1< Packet1cf >(const std::complex< float > &from)
bfloat16 pfirst(const Packet8bf &a)
Packet2cf pmul< Packet2cf >(const Packet2cf &a, const Packet2cf &b)
__vector unsigned int Packet4ui
void ptranspose(PacketBlock< Packet2cf, 2 > &kernel)
static Packet4ui p4ui_CONJ_XOR
Packet2f padd< Packet2f >(const Packet2f &a, const Packet2f &b)
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pdiv_complex(const Packet &x, const Packet &y)
Packet2cf pcplxflip< Packet2cf >(const Packet2cf &x)
Packet1cd pand< Packet1cd >(const Packet1cd &a, const Packet1cd &b)
Packet2cf pxor< Packet2cf >(const Packet2cf &a, const Packet2cf &b)
Packet4f padd< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet4f ploadu< Packet4f >(const float *from)
std::complex< double > predux_mul< Packet1cd >(const Packet1cd &a)
Packet2d padd< Packet2d >(const Packet2d &a, const Packet2d &b)
std::complex< float > predux_mul< Packet1cf >(const Packet1cf &a)
Packet1cf pand< Packet1cf >(const Packet1cf &a, const Packet1cf &b)
Packet2f pand< Packet2f >(const Packet2f &a, const Packet2f &b)
std::complex< double > predux< Packet1cd >(const Packet1cd &a)
Packet2f psub< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet2d pset1< Packet2d >(const double &from)
Packet1cd por< Packet1cd >(const Packet1cd &a, const Packet1cd &b)
Packet2d ploadu< Packet2d >(const double *from)
Packet1cf pcast< float, Packet1cf >(const float &a)
Packet2cf pload< Packet2cf >(const std::complex< float > *from)
Packet2d psub< Packet2d >(const Packet2d &a, const Packet2d &b)
Packet2cf pand< Packet2cf >(const Packet2cf &a, const Packet2cf &b)
Packet1cd ploaddup< Packet1cd >(const std::complex< double > *from)
Packet1cd psqrt< Packet1cd >(const Packet1cd &a)
Packet pdiv(const Packet &a, const Packet &b)
Packet1cd pset1< Packet1cd >(const std::complex< double > &from)
Packet2cf pconj(const Packet2cf &a)
std::complex< float > pfirst< Packet1cf >(const Packet1cf &a)
Packet2cf pdiv< Packet2cf >(const Packet2cf &a, const Packet2cf &b)
Packet2f ploadu< Packet2f >(const float *from)
Packet2d pload< Packet2d >(const double *from)
Packet4f psub< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet2cf preverse(const Packet2cf &a)
Packet4f pload< Packet4f >(const float *from)
Packet2f pload< Packet2f >(const float *from)
Packet1cf pload< Packet1cf >(const std::complex< float > *from)
Packet1cf psub< Packet1cf >(const Packet1cf &a, const Packet1cf &b)
Packet2cf pcast< Packet2f, Packet2cf >(const Packet2f &a)
Packet2f pcmp_eq< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet1cf pcplxflip< Packet1cf >(const Packet1cf &a)
Packet2cf psub< Packet2cf >(const Packet2cf &a, const Packet2cf &b)
Packet1cd psub< Packet1cd >(const Packet1cd &a, const Packet1cd &b)
Packet1cf padd< Packet1cf >(const Packet1cf &a, const Packet1cf &b)
Packet2cf psqrt< Packet2cf >(const Packet2cf &a)
std::complex< float > predux_mul< Packet2cf >(const Packet2cf &a)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.