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

How to enable SSSE3 intrinsics but disable their use in compiler optimization

本文关键字:编译器 优化 何启用 启用 内部函数 SSSE3      更新时间:2023-10-16

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

当我EXPLICITLY调用相关的内部函数时,是否有方法启用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>

在你需要的地方。