fix ICE and warning with gcc 4.2.4

This commit is contained in:
Gael Guennebaud 2011-02-21 16:11:18 +01:00
parent e129e985c3
commit fb1a29fed5

View File

@ -105,15 +105,19 @@ template<> EIGEN_STRONG_INLINE void prefetch<std::complex<float> >(const std::co
template<> EIGEN_STRONG_INLINE Packet2cf pset1<Packet2cf>(const std::complex<float>& from) template<> EIGEN_STRONG_INLINE Packet2cf pset1<Packet2cf>(const std::complex<float>& from)
{ {
Packet2cf res; Packet2cf res;
#if EIGEN_GNUC_AT_MOST(4,2)
// workaround annoying "may be used uninitialized in this function" warning with gcc 4.2
res.v = _mm_loadl_pi(_mm_set1_ps(0.0f), (const __m64*)&from);
#else
res.v = _mm_loadl_pi(res.v, (const __m64*)&from); res.v = _mm_loadl_pi(res.v, (const __m64*)&from);
#endif
return Packet2cf(_mm_movelh_ps(res.v,res.v)); return Packet2cf(_mm_movelh_ps(res.v,res.v));
} }
template<> EIGEN_STRONG_INLINE std::complex<float> pfirst<Packet2cf>(const Packet2cf& a) template<> EIGEN_STRONG_INLINE std::complex<float> pfirst<Packet2cf>(const Packet2cf& a)
{ {
#if (defined __GNUC__) && (((__GNUC__==4) && (__GNUC_MINOR__==2) && (__GNUC_PATCHLEVEL__<=3)) || ((__GNUC__==4) && (__GNUC_MINOR__==3))) #if EIGEN_GNUC_AT_MOST(4,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. // Workaround gcc 4.2 ICE - this is not performance wise ideal, but who cares...
// this is not performance wise ideal, but who cares...
// This workaround also fix invalid code generation with gcc 4.3 // This workaround also fix invalid code generation with gcc 4.3
EIGEN_ALIGN16 std::complex<float> res[2]; EIGEN_ALIGN16 std::complex<float> res[2];
_mm_store_ps((float*)res, a.v); _mm_store_ps((float*)res, a.v);