我需要为 64 位系统禁用 FMA3 指令(出于向后兼容性问题)。_set_FMA3_enable(0)
我在我的windows环境中使用过。我需要使用什么选项(或宏)来禁用 gcc 中的 FMA3?
例如。
#include <iostream>
#include <iomanip>
#include <math.h>
#include <limits>
union value
{
double real;
long long unsigned integer;
};
int main()
{
#if defined (_WIN64)
_set_FMA3_enable(0);
#endif
value x;
x.integer = 4602754097807755994;
value y;
y.real = sin(x.real);
std::cout << std::setprecision(17) << y.real << std::endl;
std::cout << y.integer << std::endl;
}
在 Visual C++ 上,它0.48674319998526994 4602440005894221058
使用_set_FMA3_enable(0)
. 0.48674319998526999 4602440005894221059
没有它(或使用 `_set_FMA3_enable(1))。
我在 gcc 环境中运行这段代码,g++ -g0 -march=x86-64 -O2 -mtune=generic -msse3 -mno-fma -DNDEBUG main.cpp
并且总是得到0.48674319998526999 4602440005894221059
.
如何_set_FMA3_enable(0)
使用 gcc 重现结果?
视觉工作室 16.7.4。gcc 版本 9.3.0(带 wsl)