5

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

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

请注意,我不能禁用 -O1 优化。

4

2 回答 2

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标志编译。

于 2013-07-16T08:35:33.587 回答
0

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

#define __SSSE3__ 1
#include <tmmintrin.h>

你需要它们的地方。

于 2013-07-16T16:00:07.127 回答