mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-05-02 00:34:14 +08:00
Remove custom unaligned loads for SSE. They were only useful for core2 CPU.
This commit is contained in:
parent
a4c76f8d34
commit
c2bf2f56ef
@ -314,58 +314,27 @@ template<> EIGEN_STRONG_INLINE Packet4i pload<Packet4i>(const int* from) { E
|
|||||||
return _mm_loadu_ps(from);
|
return _mm_loadu_ps(from);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
template<> EIGEN_STRONG_INLINE Packet2d ploadu<Packet2d>(const double* from) { EIGEN_DEBUG_UNALIGNED_LOAD return _mm_loadu_pd(from); }
|
|
||||||
template<> EIGEN_STRONG_INLINE Packet4i ploadu<Packet4i>(const int* from) { EIGEN_DEBUG_UNALIGNED_LOAD return _mm_loadu_si128(reinterpret_cast<const __m128i*>(from)); }
|
|
||||||
#else
|
#else
|
||||||
// NOTE: with the code below, MSVC's compiler crashes!
|
// NOTE: with the code below, MSVC's compiler crashes!
|
||||||
|
|
||||||
#if EIGEN_COMP_GNUC && (EIGEN_ARCH_i386 || (EIGEN_ARCH_x86_64 && EIGEN_GNUC_AT_LEAST(4, 8)))
|
|
||||||
// bug 195: gcc/i386 emits weird x87 fldl/fstpl instructions for _mm_load_sd
|
|
||||||
#define EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS 1
|
|
||||||
#elif EIGEN_COMP_CLANG
|
|
||||||
// bug 201: Segfaults in __mm_loadh_pd with clang 2.8
|
|
||||||
#define EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS 1
|
|
||||||
#else
|
|
||||||
#define EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template<> EIGEN_STRONG_INLINE Packet4f ploadu<Packet4f>(const float* from)
|
template<> EIGEN_STRONG_INLINE Packet4f ploadu<Packet4f>(const float* from)
|
||||||
{
|
{
|
||||||
EIGEN_DEBUG_UNALIGNED_LOAD
|
EIGEN_DEBUG_UNALIGNED_LOAD
|
||||||
#if EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS
|
|
||||||
return _mm_loadu_ps(from);
|
return _mm_loadu_ps(from);
|
||||||
#else
|
|
||||||
__m128d res;
|
|
||||||
res = _mm_load_sd((const double*)(from)) ;
|
|
||||||
res = _mm_loadh_pd(res, (const double*)(from+2)) ;
|
|
||||||
return _mm_castpd_ps(res);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
template<> EIGEN_STRONG_INLINE Packet2d ploadu<Packet2d>(const double* from)
|
template<> EIGEN_STRONG_INLINE Packet2d ploadu<Packet2d>(const double* from)
|
||||||
{
|
{
|
||||||
EIGEN_DEBUG_UNALIGNED_LOAD
|
EIGEN_DEBUG_UNALIGNED_LOAD
|
||||||
#if EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS
|
|
||||||
return _mm_loadu_pd(from);
|
return _mm_loadu_pd(from);
|
||||||
#else
|
|
||||||
__m128d res;
|
|
||||||
res = _mm_load_sd(from) ;
|
|
||||||
res = _mm_loadh_pd(res,from+1);
|
|
||||||
return res;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
template<> EIGEN_STRONG_INLINE Packet4i ploadu<Packet4i>(const int* from)
|
template<> EIGEN_STRONG_INLINE Packet4i ploadu<Packet4i>(const int* from)
|
||||||
{
|
{
|
||||||
EIGEN_DEBUG_UNALIGNED_LOAD
|
EIGEN_DEBUG_UNALIGNED_LOAD
|
||||||
#if EIGEN_AVOID_CUSTOM_UNALIGNED_LOADS
|
|
||||||
return _mm_loadu_si128(reinterpret_cast<const __m128i*>(from));
|
return _mm_loadu_si128(reinterpret_cast<const __m128i*>(from));
|
||||||
#else
|
|
||||||
__m128d res;
|
|
||||||
res = _mm_load_sd((const double*)(from)) ;
|
|
||||||
res = _mm_loadh_pd(res, (const double*)(from+2)) ;
|
|
||||||
return _mm_castpd_si128(res);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
template<> EIGEN_STRONG_INLINE Packet4f ploaddup<Packet4f>(const float* from)
|
template<> EIGEN_STRONG_INLINE Packet4f ploaddup<Packet4f>(const float* from)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user