我试图理解std::pow函数在GCC中是如何工作的。我在www.example.com查看了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是在哪里定义的?我读到它是一个内置函数,但这仍然不能帮助我理解它的实现在哪里。我似乎在GCC源代码的其他地方找不到**__builtin_powf**。还有,它是如何翻译成汇编的?
1条答案
按热度按时间gfttwv5a1#
__builtin_powf在哪里定义?
它是在C标准库实现中定义的。
gcc
中没有powf
的实现。__builtin_powf
的存在是为了让gcc
能够检测pow
的使用情况,并在编译时计算结果。(但实际上仅作为函数参数存在),并且内置函数似乎在gcc/builtins.c#L2100中处理,但最后pow
由C标准库处理,当fold-const-call.c#L1393中的fold_const_call_sss()
返回成功时,这意味着pow
不断地被折叠。调用可以在tree-vect-patterns.c
中被矢量化/替换。但是最后的“实现”在你的C标准库中。