SIMD: откидной знак из четырех упакованных целых чисел

Допустим, у меня есть четыре упакованных целых.

__m128i val = _mm_set_epi32(42,64,123,456);

Какой самый быстрый способ перевернуть знак (умножить на -1) из четырех целых чисел в val?

1

Решение

Вы можете вычесть ваши фактические значения из набора {0,0,0,0} [это, вероятно, самый быстрый], вы можете XOR с {-1, -1, -1, -1} «все единицы», а затем добавить {1,1,1,1}. Или вы можете умножить на -1.

6

Другие решения

Просто вычтите из 0, например

val = _mm_sub_epi32(_mm_set1_epi32(0), val);
3

По вопросам рекламы [email protected]