gpt4 book ai didi

c++ - 理解 GCC 中的 std::pow 实现

转载 作者:行者123 更新时间:2023-12-01 14:08:05 29 4
gpt4 key购买 nike

我试图了解 std::pow 函数在 GCC 中是如何工作的。我在这里查看 cmath 库的源代码 https://code.woboq.org/gcc/libstdc++-v3/include/c_global/cmath.html#_ZSt3powff .
在该文件的第 388 行,当浮点类型作为参数传递时,它们给出了 pow 的定义,如下所示

#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
inline _GLIBCXX_CONSTEXPR float
pow(float __x, float __y)
{ return __builtin_powf(__x, __y); }
这个 pow 函数调用另一个函数 __builtin_powf .
我想知道的是, 在哪里? __builtin_powf 定义?我读到它是一个内置函数,但这仍然无法帮助我理解它的实现在哪里。我好像找不到 __builtin_powf GCC 源代码中的任何其他位置。另外,它是如何翻译成汇编的?

最佳答案

where is __builtin_powf defined?


它在您的 C 标准库实现中定义。没有实现 powfgcc . __builtin_powf存在使得 gcc可以检测到 pow用法并在编译时计算结果(如果可以)。那么,字符串 "__builtin_powf""defined"gcc/builtins.def#L541 (但实际上是 only exists as function argument )和内置函数似乎在 gcc/builtins.c#L2100 处处理,但最后 pow is handled by standard lirbary .当 fold_const_call_sss() in fold-const-call.c#L1393返回成功,即 pow was folded constantly .该调用可以在 tree-vect-patterns.c 中进行矢量化/替换.但最终“实现”在您的 C 标准库中。

关于c++ - 理解 GCC 中的 std::pow 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62765431/

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