Tho*_*mas 2 x86 assembly sse simd intrinsics
我需要能够获取4个打包整数,并使用或操作将它们一个堆叠在一起,形成一个组合整数.
最有效的方法是什么?注意,打包整数中的1将永远不会有一个共同的位置,所以我认为无符号的"添加"也可以做到这一点.
我看到了水平添加指令,但它是用于签名添加的.
评论中提到的SSSE3方式,2 phaddd是这样的:
phaddd xmm0, xmm0
phaddd xmm0, xmm0
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不是很快,SB上有4个周期,其他一切都是6个周期(AMD为8个或10个).
使用shuffle和normal添加的普通SSE2方式可能如下所示:(未测试)
pshufd xmm1, xmm0, 0x4E
paddd xmm0, xmm1
pshufd xmm1, xmm0, 0xB1
paddd xmm0, xmm1
Run Code Online (Sandbox Code Playgroud)
除AMD处理器外,其他任何操作都需要4个周期 缺点:代码规模较大,需要临时注册.