Внутренний _mm_slli_si128
выполняет логический сдвиг влево от 128-битного регистра, но ограничивается немедленными значениями сдвига и сдвигает байты не битами.
Я могу использовать встроенную функцию, например _mm_sll_epi64
или _mm_sll_epi32
, чтобы сдвинуть влево набор значений в регистре __m128i
, но они не имеют бит "переполнения".
Для сдвига на N бит представьте, что я мог бы сделать что-то вроде:
-
_mm_sll_epi64
-
_mm_srr_epi64
(для бит, который я хочу носить: переместите их в низкий порядок) - перетасовать результат srr
- или вместе.
(но, вероятно, также необходимо включить проверки N относительно 64).
Есть ли лучший способ?