diff options
author | Gael Guennebaud <g.gael@free.fr> | 2010-07-07 19:49:09 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2010-07-07 19:49:09 +0200 |
commit | 31a36aa9c407d736075de8dc06f5af0d0fe912d5 (patch) | |
tree | 58febad97092226a768b89ad571d56ed7470a2b2 /Eigen/src/Core/arch/SSE/Complex.h | |
parent | 861962c55f728a1eb68c0b6915c77e8c9b424cff (diff) |
support for real * complex matrix product - step 1 (works for some special cases)
Diffstat (limited to 'Eigen/src/Core/arch/SSE/Complex.h')
-rw-r--r-- | Eigen/src/Core/arch/SSE/Complex.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/Eigen/src/Core/arch/SSE/Complex.h b/Eigen/src/Core/arch/SSE/Complex.h index 4ecfc2f43..259aebe2c 100644 --- a/Eigen/src/Core/arch/SSE/Complex.h +++ b/Eigen/src/Core/arch/SSE/Complex.h @@ -194,6 +194,15 @@ template<> struct ei_conj_helper<Packet2cf, Packet2cf, true,true> } }; +template<> struct ei_conj_helper<Packet4f, Packet2cf, false,false> +{ + EIGEN_STRONG_INLINE Packet2cf pmadd(const Packet4f& x, const Packet2cf& y, const Packet2cf& c) const + { return ei_padd(c, pmul(x,y)); } + + EIGEN_STRONG_INLINE Packet2cf pmul(const Packet4f& x, const Packet2cf& y) const + { return Packet2cf(ei_pmul(x, y.v)); } +}; + template<> EIGEN_STRONG_INLINE Packet2cf ei_pdiv<Packet2cf>(const Packet2cf& a, const Packet2cf& b) { // TODO optimize it for SSE3 and 4 @@ -359,6 +368,15 @@ template<> struct ei_conj_helper<Packet1cd, Packet1cd, true,true> } }; +template<> struct ei_conj_helper<Packet2d, Packet1cd, false,false> +{ + EIGEN_STRONG_INLINE Packet1cd pmadd(const Packet2d& x, const Packet1cd& y, const Packet1cd& c) const + { return ei_padd(c, pmul(x,y)); } + + EIGEN_STRONG_INLINE Packet1cd pmul(const Packet2d& x, const Packet1cd& y) const + { return Packet1cd(ei_pmul(x, y.v)); } +}; + template<> EIGEN_STRONG_INLINE Packet1cd ei_pdiv<Packet1cd>(const Packet1cd& a, const Packet1cd& b) { // TODO optimize it for SSE3 and 4 |