Есть ли собственный или другой эффективный способ переупаковки 32-разрядных 32-разрядных компонентов 64-разрядных компонентов регистра AVX в регистр SSE? Решение с использованием AVX2 в порядке.
До сих пор я использую следующий код, но профайлер говорит, что он медленный на Ryzen 1800X:
// Global constant
const __m256i gHigh32Permute = _mm256_set_epi32(0, 0, 0, 0, 7, 5, 3, 1);
// ...
// function code
__m256i x = /* computed here */;
const __m128i high32 = _mm256_castsi256_si128(_mm256_permutevar8x32_epi32(x),
gHigh32Permute); // This seems to take 3 cycles