gpt4 book ai didi

gcc - gcc -fno-trapping-math 有什么作用?

转载 作者:行者123 更新时间:2023-12-04 19:28:26 24 4
gpt4 key购买 nike

我找不到任何 -fno-trapping-math 选项有效的示例。

我希望 -ftrapping-math 禁用可能影响是否生成陷阱的优化。例如,使用 x87 指令或 FMA 指令计算具有扩展精度的中间值可以防止发生溢出异常。 -ftrapping-math 选项不会阻止这一点。

公共(public)子表达式消除可能导致发生一个异常而不是两个,例如优化 1./x + 1./x = 2./x 将在 x=0 时生成一个陷阱而不是两个。 -ftrapping-math 选项不会阻止这一点。

请给出一些 -fno-trapping-math 阻止的优化示例。

您能否推荐任何比 gcc 手册更好地解释不同浮点优化选项的文档,也许还有每个选项优化的代码的具体示例?可能适用于其他编译器。

最佳答案

一个简单的例子如下:

float foo()
{
float a = 0;
float nan = a/a;
return nan;
}

使用 GCC 7.3 for x64 编译,位于 -O3 :
foo():
pxor xmm0, xmm0
divss xmm0, xmm0
ret

...这是不言自明的。请注意,它实际上是在做 div(尽管知道 0/0 是 nan),这并不是特别便宜!它必须这样做,因为您的代码可能试图故意引发浮点陷阱。

-O3 -fno-signaling-nans -fno-trapping-math :
foo():
movss xmm0, DWORD PTR .LC0[rip]
ret
.LC0:
.long 2143289344

也就是说,“只需加载一个 NaN 并返回它”。只要您不依赖陷阱,这是相同的行为。

关于gcc - gcc -fno-trapping-math 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50374771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com