From c0d51314359c54156b5daf3b24d88b5a60d97c74 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Wed, 9 Feb 2011 13:04:35 +0100 Subject: [PATCH] workaround gcc 4.2.1 ICE (fix bug #145) --- Eigen/src/Core/arch/SSE/Complex.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Eigen/src/Core/arch/SSE/Complex.h b/Eigen/src/Core/arch/SSE/Complex.h index 902ebd9a9..2155ec614 100644 --- a/Eigen/src/Core/arch/SSE/Complex.h +++ b/Eigen/src/Core/arch/SSE/Complex.h @@ -111,9 +111,17 @@ template<> EIGEN_STRONG_INLINE Packet2cf pset1(const std::complex EIGEN_STRONG_INLINE std::complex pfirst(const Packet2cf& a) { + #if (defined __GNUC__) && (__GNUC__==4) && (__GNUC_MINOR__==2) && (__GNUC_MINOR__==2) && (__GNUC_PATCHLEVEL__<=3) + // workaround gcc 4.2.1 ICE (mac's gcc version) - I'm not sure how the 4.2.2 and 4.2.3 deal with it, but 4.2.4 works well. + // this is not performance wise ideal, but who cares... + EIGEN_ALIGN16 std::complex res[2]; + _mm_store_ps((float*)res, a.v); + return res[0]; + #else std::complex res; _mm_storel_pi((__m64*)&res, a.v); return res; + #endif } template<> EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf& a) { return Packet2cf(_mm_castpd_ps(preverse(_mm_castps_pd(a.v)))); }