Intel 15.0.1 (composer_xe_2015.1.133) immintrin.h defines _mm256_setr_m128 as the following:
#define _mm256_setr_m128(lo, hi) _mm256_set_m128((hi), (lo))
This is not compatible with Eigen/src/Core/arch/AVX/MathFunctions.h:
// For some reason, this function didn't make it into the avxintirn.h
// used by the compiler, so we'll just wrap it.
#define _mm256_setr_m128(lo, hi) \
_mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1)
Perhaps the #define in MathFunctions.h should be protected with an #ifndef ? Would that break anything?
So far this is just a warning, but I am curious why the cast is needed?
Apologies for drudging this up again -- thanks for fixing so quickly -- but was the change to the following line correct?
- Packet8i sign_flip_mask = _mm256_setr_m128(lo, hi);
+ Packet8i sign_flip_mask = _mm256_setr_m128(hi, lo);
I see that the order of lo/hi was swapped, but the set-reverse "setr" function is still called rather than the "set" function. I point this out because the other diffs in this commit have swapped the lo/hi order *AND* changed it from setr to just set.