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

时间:2013-07-16 07:52:15

标签: c++ optimization gcc sse sse3

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

当我明确调用相关的内部函数时,是否有办法启用SSSE3代码,但是阻止编译器添加自己的SSSE3代码?

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

2 个答案:

答案 0 :(得分:10)

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

 // main.cpp
 ... 

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

 // traditional.cpp:
 void do_something_traditional()
 {
     ... 
     code goes here ... 
 }

 // ssse3.cpp:
 void do_something_ssse3()
 {
     ... 
     code goes here ... 
 }

只有" ssse3.cpp"应使用-mssse3标志进行编译。

答案 1 :(得分:0)

如果您使用gcc,您可以在不使用-mssse3开关的情况下编译代码,并使用

拉入SSSE3内在函数
#define __SSSE3__ 1
#include <tmmintrin.h>

你需要它们。