mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
* add ei_pdiv intrinsic, make quotient functor vectorizable
* add vdw benchmark from Tim's real-world use case
This commit is contained in:
@@ -59,6 +59,8 @@ inline vector int ei_pmul(const vector int a, const vector int b)
|
||||
return vec_add( lowProduct, highProduct );
|
||||
}
|
||||
|
||||
inline vector float ei_pdiv(const vector float a, const vector float b) { return vec_div(a,b); }
|
||||
|
||||
inline vector float ei_pmadd(const vector float a, const vector float b, const vector float c) { return vec_madd(a, b, c); }
|
||||
|
||||
inline vector float ei_pmin(const vector float a, const vector float b) { return vec_min(a,b); }
|
||||
|
||||
@@ -55,6 +55,9 @@ template<> inline __m128i ei_pmul(const __m128i& a, const __m128i& b)
|
||||
_mm_setr_epi32(0xffffffff,0,0xffffffff,0)), 4));
|
||||
}
|
||||
|
||||
template<> inline __m128 ei_pdiv(const __m128& a, const __m128& b) { return _mm_div_ps(a,b); }
|
||||
template<> inline __m128d ei_pdiv(const __m128d& a, const __m128d& b) { return _mm_div_pd(a,b); }
|
||||
|
||||
// for some weird raisons, it has to be overloaded for packet integer
|
||||
template<> inline __m128i ei_pmadd(const __m128i& a, const __m128i& b, const __m128i& c) { return ei_padd(ei_pmul(a,b), c); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user