如何启用SSSE3内部函数,但禁用它们在编译器优化中的使用
How to enable SSSE3 intrinsics but disable their use in compiler optimization
我有一个使用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>
在你需要的地方。
相关文章:
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- VS2017调试器:没有地址,可能是由于编译器优化
- 何时允许编译器优化复制构造函数
- 如何使用 GCC 编译器优化创建静态库?
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 是否允许编译器优化掉局部易失性变量
- 删除编译器优化并在发布中启用 pdb 文件
- 静态 constexpr 的编译器优化
- 如何让MSVC编译器优化多步POD初始化?
- 按位不操作的编译器优化
- 模板专用化与编译器优化
- 编译器优化:G 比英特尔慢
- 运算符重载关联性编译器优化
- Intel OpenCL编译器:优化结构使用情况
- C 中编译器优化的影响
- 视觉C++ 2017 错误?编译器优化表达式
- 虚拟功能编译器优化C
- 未定义的行为确实有助于现代编译器优化生成的代码