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