我有一个使用SSSE3内部命令的代码(注意三重S)和运行时检查是否使用它,因此我假设应用程序应该在没有SSSE3支持的CPU上执行。 但是,当使用-mssse3和-O1优化时,编译器还会插入我没有显式调用的SSSE3指令,因此程序崩溃。
当我明确调用相关的内部函数时,是否有办法启用SSSE3代码,但是阻止编译器添加自己的SSSE3代码?
请注意,我无法禁用-O1优化。
答案 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
开关的情况下编译代码,并使用
#define __SSSE3__ 1
#include <tmmintrin.h>
你需要它们。