MSVC和ICC都支持内在函数_addcarry_u64和_addcarryx_u64.
根据英特尔的内在指南和白皮书,这些应分别映射到adcx和adox.但是,通过查看生成的程序集,很明显它们分别映射到adc并且adcx没有映射到的内在函数adox.
另外,告诉编译器
我不确定如何使用MSVC和ICC启用ADX./arch:AVX2在MSVC中启用AVX2 或-march=core-avx2在Linux上启用ICC没有任何区别.
MSVC的文档列出_addcarryx_u64了ADX技术,_addcarry_u64但没有列出的技术.但是,MSVC针对这些内在函数的文档中的链接直接指向Intel Intrinsic指南,该指南与MSVC自己的文档和生成的程序集相矛盾.
由此我得出结论,英特尔的内在指南和白皮书是错误的.
这对于MSVC感觉有一定意义,它不允许内联汇编它应该提供一种使用adc它的方式_addcarry_u64.
其中的一大优点adcx,并adox为他们在不同的标志(进操作CF和溢出OF),这使得两个独立平行进位链.但是,由于没有内在的adox可能性如何?对于ICC,至少有一个可以使用内联汇编,但在64位模式下使用MSVC是不可能的.
微软和英特尔的文档(白皮书和在线内在指南)都同意了.
该_addcarry_u64征的文件说只生产adc.该_addcarryx_u64征可以产生两种adcx或adox.然而,在MSVC 2013和2015中,_addcarryx_u64只生产adcx.ICC同时生产.
目前我正在使用Visual C++内联汇编来使用SSE嵌入一些核心功能; 但是我认为在x64模式下不支持内联汇编.
在x64架构中构建软件时如何使用SSE?