К моему большому разочарованию, я обнаружил, что инструкции по байтовому сдвигу _mm256_slli_si256 и < strong>_mm256_srli_si256 работают только с двумя половинами регистров AVX по отдельности, а между ними вводятся нули. (Это отличие от _mm_slli_si128 и _mm_srli_si128, которые обрабатывают целые регистры SSE.)
Можете ли вы порекомендовать мне короткую замену?< /p>
ОБНОВЛЕНИЕ:
Код: Выделить всё
_mm256_slli_si256
Код: Выделить всё
_mm256_alignr_epi8(A, _mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 3, 0)), N)
// or
_mm256_slli_si256(_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 3, 0)), N)
(Или используйте vpermq, _mm256_permute4x64_epi64, который лучше, чем vpermi128 на некоторых процессорах, но хуже на Zen 2 и 3.)
p>
Но вопрос остаётся по _mm256_srli_si256.
Подробнее здесь: https://stackoverflow.com/questions/252 ... e-crossing