Я хочу, чтобы VC ++ генерировал код, подобный следующему:
vpxor ymm0, ymm0, ymm0
vmovdqa xmm0, xmm7
На человеческом языке мне нужно 32-байтовое значение __m256i
, где младшие 16 байтов берутся из другой переменной, а старшие 16 байтов равны нулю Эквивалент _mm256_castsi128_si256
intrinsi c, только мне нужно, чтобы старшие 128 бит были равны нулю, а не неопределенным.
Вот что я пробовал:
_mm256_setr_m128i( low, _mm_setzero_si128() )
_mm256_insertf128_si256( _mm256_setzero_si256(), low, 0 )
Оба строки выше компилируются в vinsertf128
, относительно медленно, с задержкой 3-4 цикла, намного медленнее, чем vmovdqa
. Любое решение для VC ++ 2017?