У меня есть вектор восьми беззнаковых 8-битных чисел в диапазоне 0 .. 12 в xmm0
. Я хочу, чтобы выполнить следующий перевод по каждому элементу e
в векторе:Как перевернуть диапазон в SSE, сохраняя одно значение без изменений?
if (e != 12)
e = 11 - e;
То есть, число 0, 1, ..., 11 заменены на 11, 10, ..., 0, тогда как 12 остается неизменным. Других ценностей не происходит, мне все равно, что с ними происходит.
Как я могу эффективно реализовать эту операцию с помощью набора инструкций SSE4?
Ого, я совсем забыл О пользователе pshufb! Для первого я подумал о выполнении ((12 - v) + 243) - 243), где добавление является насыщающим добавлением, которое переместит результат в нужные места. Но при всех массах для этого, ваш подход, скорее всего, быстрее. – fuz