SIMD:翻转四个打包整数的符号

时间:2013-01-29 15:41:22

标签: c++ simd

假设我有四个打包的内容。

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

翻转val中四个整数的符号(乘以-1)的最快方法是什么?

2 个答案:

答案 0 :(得分:6)

你可以从一组{0,0,0,0} [可能是最快的]中减去你的实际值,你可以用{-1,-1,-1,-1}“全部”进行异或,然后加{ 1,1,1,1}。或者你可以乘以-1。

答案 1 :(得分:3)

从0减去,例如

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