mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-09-23 14:53:13 +08:00
Avoid using uninitialized inputs and if available, use slightly more efficient movsd
instruction for pset1<Packet2cf>
.
This commit is contained in:
parent
a2c0542010
commit
9357feedc7
@ -113,19 +113,13 @@ template<> EIGEN_STRONG_INLINE Packet2cf ploadu<Packet2cf>(const std::complex<fl
|
|||||||
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)
|
#ifdef EIGEN_VECTORIZE_SSE3
|
||||||
// Workaround annoying "may be used uninitialized in this function" warning with gcc 4.2
|
res.v = _mm_castpd_ps(_mm_loaddup_pd(reinterpret_cast<double const*>(&from)));
|
||||||
res.v = _mm_loadl_pi(_mm_set1_ps(0.0f), reinterpret_cast<const __m64*>(&from));
|
|
||||||
#elif EIGEN_GNUC_AT_LEAST(4,6)
|
|
||||||
// Suppress annoying "may be used uninitialized in this function" warning with gcc >= 4.6
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wuninitialized"
|
|
||||||
res.v = _mm_loadl_pi(res.v, (const __m64*)&from);
|
|
||||||
#pragma GCC diagnostic pop
|
|
||||||
#else
|
#else
|
||||||
res.v = _mm_loadl_pi(res.v, (const __m64*)&from);
|
res.v = _mm_castpd_ps(_mm_load_sd(reinterpret_cast<double const*>(&from)));
|
||||||
|
res.v = _mm_movelh_ps(res.v, res.v);
|
||||||
#endif
|
#endif
|
||||||
return Packet2cf(_mm_movelh_ps(res.v,res.v));
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> EIGEN_STRONG_INLINE Packet2cf ploaddup<Packet2cf>(const std::complex<float>* from) { return pset1<Packet2cf>(*from); }
|
template<> EIGEN_STRONG_INLINE Packet2cf ploaddup<Packet2cf>(const std::complex<float>* from) { return pset1<Packet2cf>(*from); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user