C++ 如何启用SSSE3内部函数,但禁用它们在编译器优化中的使用

C++ 如何启用SSSE3内部函数,但禁用它们在编译器优化中的使用,c++,optimization,gcc,sse,sse3,C++,Optimization,Gcc,Sse,Sse3,我有一个使用SSSE3内部命令(注意三个S)的代码和一个运行时检查是否使用它的代码,因此我假设应用程序应该在没有SSSE3支持的CPU上执行。 然而,当将-mssse3与-O1优化一起使用时,编译器还会插入我没有显式调用的SSSE3指令,因此程序崩溃 当我显式调用相关的内在函数时,有没有办法启用SSSE3代码,但阻止编译器添加自己的SSSE3代码 请注意,我无法禁用-O1优化。此问题的解决方案是不使用-mssse3选项编译所有程序代码,而只使用该选项编译实际使用这些功能的部分。换言之: //

我有一个使用SSSE3内部命令(注意三个S)的代码和一个运行时检查是否使用它的代码,因此我假设应用程序应该在没有SSSE3支持的CPU上执行。 然而,当将-mssse3与-O1优化一起使用时,编译器还会插入我没有显式调用的SSSE3指令,因此程序崩溃

当我显式调用相关的内在函数时,有没有办法启用SSSE3代码,但阻止编译器添加自己的SSSE3代码


请注意,我无法禁用-O1优化。

此问题的解决方案是不使用-mssse3选项编译所有程序代码,而只使用该选项编译实际使用这些功能的部分。换言之:

 // main.cpp
 ... 

     if (use_ssse3()) 
         do_something_ssse3();
     else
         do_something_traditional();



只有“ssse3.cpp”应使用
-mssse3
标志编译

如果您使用gcc,您可以只编译代码而不使用
-mssse3
开关,并使用

#define __SSSE3__ 1
#include <tmmintrin.h>
#定义
#包括

相关问题:用不同的设置编译不同的TU。用不同的选项编译不同的文件,或者用不同的选项(pragma,attribute)编译不同的函数,或者使用gcc-4.9。@marglisse-gcc 4.9对我有什么帮助?啊,对,这里提到的很短:。gcc-4.9允许您在当前编译模式表示内部函数不可用时使用内部函数。请注意,这不起作用,因为当编译器扩展由内部函数声明的内联函数时,_内置函数u some_u内部函数将不存在,因此无法正确编译。编译器控制哪些内置函数由-msse选项声明。另请参阅。
 // ssse3.cpp:
 void do_something_ssse3()
 {
     ... 
     code goes here ... 
 }
#define __SSSE3__ 1
#include <tmmintrin.h>