Con*_*ado 23 assembly gcc macports avx osx-lion
我正在尝试编译一个使用新英特尔处理器中存在的pclmulqdq指令的程序.我已经使用macports安装了GCC 4.6但是当我编译我的程序(使用内在的_mm_clmulepi64_si128)时,我得到了
/var/folders/ps/sfjmtgx5771_qbqnh4c9xclr0000gn/T//ccEAWWhd.s:16:no such
instruction: `pclmulqdq $0, %xmm0,%xmm1'
Run Code Online (Sandbox Code Playgroud)
似乎GCC能够从instrinsic生成正确的汇编代码,但汇编程序无法识别该指令.
我已经使用macports安装了binutils,但问题仍然存在.我怎么知道哪个汇编程序gcc正在使用?XCode汇编程序可能不支持它,但binutils汇编程序应该.
小智 24
解决这个问题的一个更简单的解决方案是添加-Wa,-q到编译器标志.as(手册页1.38版):
-q
使用clang(1)集成汇编程序代替基于GNU的系统汇编程序.
该-Wa部分将它从编译器驱动程序传递给汇编程序,就像-Wl将参数传递给链接器一样.
Con*_*ado 13
Mac OS X不支持GNU汇编程序(GAS).
为了使用AVX,我不得不:
奇怪的是,虽然clang汇编程序支持AVX,但clang编译器无法识别AVX instrinsics,迫使上面的丑陋的解决方法.