Может кто-нибудь объяснить, почему tr2 и tr4 показывают другой результат:
auto test1 = _mm256_set1_epi8(-1);
uint64_t tr2 = _mm256_movemask_epi8(test1);
uint32_t tr3 = _mm256_movemask_epi8(test1);
uint64_t tr4 = tr3;
_mm256_movemask_epi8 (test1) должен возвращать int32, поэтому его присваивают int64 следует просто назначить младшие биты.
Вместо этого tr2 печатает 0xFFFFFFFFFFFFFFFF и tr4 печатает 0x00000000FFFFFFFF
Есть ли какая-либо производительность при выполнении этого как tr4?
Я новичок в C ++ и встроенных функциях, поэтому, возможно, мне не хватает чего-то очевидного.
Я использую компилятор Visual Studio 2019 C ++.