理解GCC中的std::pow实现
Understanding std::pow Implementation in GCC
我正在努力理解std::pow函数在GCC中是如何工作的。我在这里查看cmath库的源代码https://code.woboq.org/gcc/libstdc++-v3/include/c_global/cmath.html#_ZSt3powff.
在该文件的第388行,当float类型作为参数传递时,它们给出了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。此外,它是如何翻译成汇编的?
__builtin_powf在哪里定义?
它是在C标准库实现中定义的。在gcc
中没有实现powf
。
__builtin_powf
的存在使得gcc
可以检测pow
的使用,并在编译时计算结果(如果可以的话(。字符串"__builtin_powf"
是";定义的";在gcc/builtins.def#L541中(但实际上只作为函数参数存在(,内建函数似乎在gcc/builtins.c#L2100中处理,但最终pow
由c标准库处理。当foldconstcall.c#L1393中的fold_const_call_sss()
返回成功时,意味着pow
一直处于折叠状态。该调用可以在tree-vect-patterns.c
中进行向量化/替换。但最终;实现";在您的C标准库中。
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- 在C++中如何在没有pow的情况下进行基础计算
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 理解GCC中的std::pow实现
- 使用递归实现 pow(A, B) % C,其中 A、B 和 C 是正整数
- C/C 中POW()函数的实现是否随平台或编译器而变化
- 来自wiki的pow(power)模板实现
- pow()在cmath中的实现和高效替换