Как очистить верхние 128 бит m2:
__m256i m2 = _mm256_set1_epi32(2);
__m128i m1 = _mm_set1_epi32(1);
m2 = _mm256_castsi128_si256(_mm256_castsi256_si128(m2));
m2 = _mm256_castsi128_si256(m1);
не работает. Документация Intels для _mm256_castsi128_si256
intrinsic говорит, что "верхние биты результирующего вектора undefined".
В то же время я могу легко сделать это в сборке:
VMOVDQA xmm2, xmm2 //zeros upper ymm2
VMOVDQA xmm2, xmm1
Конечно, я бы не хотел использовать "и" или _mm256_insertf128_si256()
и т.д.