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

Tra*_*isG 1 c++ simd

假设我有四个打包的整数.

__m128i val = _mm_set_epi32(42,64,123,456);
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*son 6

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