添加 SSE 寄存器的组件
我想添加 SSE 寄存器的四个组件以获得单个浮点数。我现在是这样做的:
float a[4];
_mm_storeu_ps(a, foo128);
float x = a[0] + a[1] + a[2] + a[3];
有没有直接实现这个的SSE指令?
I want to add the four components of an SSE register to get a single float. This is how I do it now:
float a[4];
_mm_storeu_ps(a, foo128);
float x = a[0] + a[1] + a[2] + a[3];
Is there an SSE instruction that directly achieves this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可能可以使用 HADDPS SSE3 指令或其编译器内在 _mm_hadd_ps,
例如,请参阅 http://msdn.microsoft.com/en-us/library/yd9wecaa(v =vs.80).aspx
如果你有两个寄存器 v1 和 v2 :
现在,v[0] 包含 v1 的分量之和,v[1] 包含 v2 的分量之和 成分。
You could probably use the HADDPS SSE3 instruction, or its compiler intrinsic _mm_hadd_ps,
For example, see http://msdn.microsoft.com/en-us/library/yd9wecaa(v=vs.80).aspx
If you have two registers v1 and v2 :
Now, v[0] contains the sum of v1's components, and v[1] contains the sum of v2's components.
如果您希望代码在 SSE3 之前的 CPU(不支持 _mm_hadd_ps)上运行,您可以使用以下代码。它使用更多指令,但在大多数 CPU 上解码为更少的微指令。
If you want your code to work on pre-SSE3 CPUs (which do not support _mm_hadd_ps), you might use the following code. It uses more instructions, but decodes to less microops on most CPUs.
好吧,我不知道任何这样的函数,但它可以使用 _mm_hadd_ps() 两次来完成。
Well, I don't know about any such function, but it can be done using _mm_hadd_ps() two times.