我正在使用Digital-Mars C ++和VC ++ 10编译器,我有masm32汇编程序。如何使用mm0 .... mm7 64位寄存器在eax,eabx 32位寄存器之间切换数据? 我可以在c ++编译器asm {}或_asm {}中使用它们吗?
这样的事情可能有用:
mmTo32 eax,mm3
mmTo16 bx,mm6
mmTo8 cl,mm4
ToMM mm2,eax
我用谷歌搜索但找不到足够的信息。
谢谢。
答案 0 :(得分:5)
使用SSE2,因为XMM更好并且得到支持(感谢Harold的评论,XMM与MM寄存器无关,一定是我和AVX / SSE混在一起)。
从MSDN查看此页面:http://msdn.microsoft.com/en-us/library/dzs626wx(v=vs.71).aspx
你需要的所有内在函数都在这里。它们由编译器展开到内联汇编。
您需要_mm_loadl_pi
/ _mm_loadh_pi
和_mm_storel_pi
/ _mm_storeh_pi
来加载/存储内存中的值。
只需包含“xmmintrin.h”文件,并在项目选项中启用SSE代码生成。