fix a couple of issues with pcplxflip

This commit is contained in:
Gael Guennebaud 2011-02-23 17:51:40 +03:00
parent 939f0327b6
commit 6e01780541
4 changed files with 10 additions and 5 deletions

View File

@ -225,6 +225,11 @@ template<typename Packet> inline typename unpacket_traits<Packet>::type predux_m
template<typename Packet> inline Packet preverse(const Packet& a) template<typename Packet> inline Packet preverse(const Packet& a)
{ return a; } { return a; }
/** \internal \returns \a a with real and imaginary part flipped (for complex type only) */
template<typename Packet> inline Packet pcplxflip(const Packet& a)
{ return Packet(imag(a),real(a)); }
/************************** /**************************
* Special math functions * Special math functions
***************************/ ***************************/

View File

@ -215,9 +215,9 @@ template<> EIGEN_STRONG_INLINE Packet2cf pdiv<Packet2cf>(const Packet2cf& a, con
return Packet2cf(pdiv(res.v, vec_add(s,vec_perm(s, s, p16uc_COMPLEX_REV)))); return Packet2cf(pdiv(res.v, vec_add(s,vec_perm(s, s, p16uc_COMPLEX_REV))));
} }
EIGEN_STRONG_INLINE Packet2cf pcplxflip/*<Packet2cf>*/(const Packet2cf& x) template<> EIGEN_STRONG_INLINE Packet2cf pcplxflip<Packet2cf>(const Packet2cf& x)
{ {
return Packet2cf(vec_perm(x, x, p16uc_COMPLEX_REV)); return Packet2cf(vec_perm(x.v, x.v, p16uc_COMPLEX_REV));
} }
} // end namespace internal } // end namespace internal

View File

@ -144,7 +144,7 @@ template<> EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf& a)
return Packet2cf(a_r128); return Packet2cf(a_r128);
} }
EIGEN_STRONG_INLINE Packet2cf pcplxflip(const Packet2cf& a) template<> EIGEN_STRONG_INLINE Packet2cf pcplxflip<Packet2cf>(const Packet2cf& a)
{ {
return Packet2cf(vrev64q_f32(a.v)); return Packet2cf(vrev64q_f32(a.v));
} }

View File

@ -239,7 +239,7 @@ template<> EIGEN_STRONG_INLINE Packet2cf pdiv<Packet2cf>(const Packet2cf& a, con
return Packet2cf(_mm_div_ps(res.v,_mm_add_ps(s,_mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(s), 0xb1))))); return Packet2cf(_mm_div_ps(res.v,_mm_add_ps(s,_mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(s), 0xb1)))));
} }
EIGEN_STRONG_INLINE Packet2cf pcplxflip/*<Packet2cf>*/(const Packet2cf& x) template<> EIGEN_STRONG_INLINE Packet2cf pcplxflip<Packet2cf>(const Packet2cf& x)
{ {
return Packet2cf(vec4f_swizzle1(x.v, 1, 0, 3, 2)); return Packet2cf(vec4f_swizzle1(x.v, 1, 0, 3, 2));
} }
@ -433,7 +433,7 @@ template<> EIGEN_STRONG_INLINE Packet1cd pdiv<Packet1cd>(const Packet1cd& a, con
return Packet1cd(_mm_div_pd(res.v, _mm_add_pd(s,_mm_shuffle_pd(s, s, 0x1)))); return Packet1cd(_mm_div_pd(res.v, _mm_add_pd(s,_mm_shuffle_pd(s, s, 0x1))));
} }
EIGEN_STRONG_INLINE Packet1cd pcplxflip/*<Packet1cd>*/(const Packet1cd& x) template<> EIGEN_STRONG_INLINE Packet1cd pcplxflip<Packet1cd>(const Packet1cd& x)
{ {
return Packet1cd(preverse(x.v)); return Packet1cd(preverse(x.v));
} }