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

Mar*_*k S 5 c++ optimization gcc sse sse3

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

有什么方法可以在我明确调用相关的内部函数时启用SSSE3代码,但是阻止编译器添加自己的SSSE3代码?

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

Mat*_*son 10

此问题的解决方案是不使用-mssse3选项编译所有程序代码,并且仅使用该选项编译实际使用这些功能的部分.换一种说法:

 // main.cpp
 ... 

     if (use_ssse3()) 
         do_something_ssse3();
     else
         do_something_traditional();
Run Code Online (Sandbox Code Playgroud)
 // traditional.cpp:
 void do_something_traditional()
 {
     ... 
     code goes here ... 
 }
Run Code Online (Sandbox Code Playgroud)
 // ssse3.cpp:
 void do_something_ssse3()
 {
     ... 
     code goes here ... 
 }
Run Code Online (Sandbox Code Playgroud)

只应使用-mssse3标志编译"ssse3.cpp" .