Поиск операции sse 128-битного сдвига для непрямого значения сдвига.

Встроенная функция _mm_slli_si128будет выполнять логический сдвиг влево из 128-битного регистра, но он ограничен непосредственными значениями сдвига и сдвигами на байты, а не на биты.

Я могу использовать встроенную функцию, например _mm_sll_epi64или _mm_sll_epi32, чтобы сдвинуть влево набор значений в регистре __m128i, но они не содержат " биты переполнения.

Для сдвига на N битов представьте, что я мог бы сделать что-то вроде:

  • _mm_sll_epi64
  • _mm_srr_epi64(для битов, которые я хочу перенести: переместить их в младший разряд)
  • перетасовать srr результат
  • или все вместе.

(но, вероятно, также необходимо включить проверки N относительно 64).

Есть ли лучший способ?

13
задан Peeter Joot 2 April 2012 в 18:36
поделиться