Lines 419-425
template<> EIGEN_STRONG_INLINE Packet4d pmin<Packet4d>(const Packet4d& a, const
Link Here
|
419 |
#endif |
419 |
#endif |
420 |
} |
420 |
} |
421 |
template<> EIGEN_STRONG_INLINE Packet8i pmin<Packet8i>(const Packet8i& a, const Packet8i& b) { |
421 |
template<> EIGEN_STRONG_INLINE Packet8i pmin<Packet8i>(const Packet8i& a, const Packet8i& b) { |
|
|
422 |
#ifdef EIGEN_VECTORIZE_AVX2 |
422 |
return _mm256_min_epi32(a, b); |
423 |
return _mm256_min_epi32(a, b); |
|
|
424 |
#else |
425 |
__m128i lo = _mm_min_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0)); |
426 |
__m128i hi = _mm_min_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1)); |
427 |
return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1); |
428 |
#endif |
423 |
} |
429 |
} |
424 |
|
430 |
|
425 |
template<> EIGEN_STRONG_INLINE Packet8f pmax<Packet8f>(const Packet8f& a, const Packet8f& b) { |
431 |
template<> EIGEN_STRONG_INLINE Packet8f pmax<Packet8f>(const Packet8f& a, const Packet8f& b) { |
Lines 451-457
template<> EIGEN_STRONG_INLINE Packet4d pmax<Packet4d>(const Packet4d& a, const
Link Here
|
451 |
#endif |
451 |
#endif |
452 |
} |
452 |
} |
453 |
template<> EIGEN_STRONG_INLINE Packet8i pmax<Packet8i>(const Packet8i& a, const Packet8i& b) { |
453 |
template<> EIGEN_STRONG_INLINE Packet8i pmax<Packet8i>(const Packet8i& a, const Packet8i& b) { |
|
|
454 |
#ifdef EIGEN_VECTORIZE_AVX2 |
454 |
return _mm256_max_epi32(a, b); |
455 |
return _mm256_max_epi32(a, b); |
|
|
456 |
#else |
457 |
__m128i lo = _mm_max_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0)); |
458 |
__m128i hi = _mm_max_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1)); |
459 |
return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1); |
460 |
#endif |
455 |
} |
461 |
} |
456 |
|
462 |
|
457 |
// Add specializations for min/max with prescribed NaN progation. |
463 |
// Add specializations for min/max with prescribed NaN progation. |
458 |
- |
|
|