Add a packetmath unit test, re-enable the comma-initializer unit test,

and bug fix in PacketMath/SSE
This commit is contained in:
Gael Guennebaud
2008-08-20 20:08:38 +00:00
parent ff8e98c974
commit fd681507dc
6 changed files with 184 additions and 7 deletions

View File

@@ -219,7 +219,8 @@ struct ei_palign_impl<Offset,__m128>
{
inline static void run(__m128& first, const __m128& second)
{
first = _mm_castsi128_ps(_mm_alignr_epi8(_mm_castps_si128(first), _mm_castps_si128(second), (4-Offset)*4));
if (Offset!=0)
first = _mm_castsi128_ps(_mm_alignr_epi8(_mm_castps_si128(second), _mm_castps_si128(first), (Offset)*4));
}
};
@@ -228,7 +229,18 @@ struct ei_palign_impl<Offset,__m128i>
{
inline static void run(__m128i& first, const __m128i& second)
{
first = _mm_alignr_epi8(first, second, (4-Offset)*4);
if (Offset!=0)
first = _mm_alignr_epi8(second,first, (Offset)*4);
}
};
template<int Offset>
struct ei_palign_impl<Offset,__m128d>
{
inline static void run(__m128d& first, const __m128d& second)
{
if (Offset==1)
first = _mm_castsi128_pd(_mm_alignr_epi8(_mm_castpd_si128(second), _mm_castpd_si128(first), 8));
}
};
#else
@@ -278,6 +290,19 @@ struct ei_palign_impl<Offset,__m128i>
}
}
};
template<int Offset>
struct ei_palign_impl<Offset,__m128d>
{
inline static void run(__m128d& first, const __m128d& second)
{
if (Offset==1)
{
first = _mm_castps_pd(_mm_movehl_ps(_mm_castpd_ps(first),_mm_castpd_ps(first)));
first = _mm_castps_pd(_mm_movelh_ps(_mm_castpd_ps(first),_mm_castpd_ps(second)));
}
}
};
#endif
#endif // EIGEN_PACKET_MATH_SSE_H