添加128位XMM寄存器的上部和下部的64位
-
19-09-2019 - |
题
我在xmm0
两个压缩四字整数和我需要将它们加在一起,并将结果存储在存储器中的位置。我可以保证各整数的值是小于的 2 ^ 15 即可。现在,我做了以下内容:
int temp;
....
movdq2q mm0, xmm0
psrldq xmm0, 8
movdq2q mm1, xmm0
paddq mm0,mm1
movd temp, mm0
有没有更好的方式来做到这一点?
解决方案
首先,为什么您使用四字来表示,将适合于一个16位格式的值?留下一边,一对夫妇的解决方案:
pshufd xmm1, xmm0, EEh
paddq xmm0, xmm1
movd temp, xmm0
或
movdqa xmm1, xmm0
psrldq xmm1, 8
paddq xmm0, xmm1
movd temp, xmm0
或
movhlps xmm1, xmm0
paddq xmm0, xmm1
movd temp, xmm0
请注意,你实际上并不需要使用paddq
,你可以用一个脱身窄,如果你喜欢补充说。
修改总结四个双四字 - 你有什么是非常好的。既然你知道,在他们所有的数据适合每个插槽的低位双,你可以尝试这样的:
shufps xmm0, xmm2, 88h
shufps xmm4, xmm6, 88h
paddd xmm0, xmm4
psrlq xmm1, xmm0, 32
paddd xmm0, xmm1
movhlps xmm1, xmm0
paddd xmm0, xmm0
movd temp, xmm0
,其可以或可以不被证明是更快。
至于EMMS,它只是一个指令。接触所述MMX寄存器,它使用的x87浮点指令需要有emms
任何代码之前的任何代码之后。
不隶属于 StackOverflow