[英]Understanding std::pow Implementation in GCC
我試圖了解 std::pow function 如何在 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 function 調用另一個 function __builtin_powf 。
我想知道的是, __builtin_powf在哪里定義? 我讀到它是內置的 function,但這仍然不能幫助我了解它的實現位置。 我似乎在 GCC 源代碼的其他任何地方都找不到__builtin_powf 。 另外,它是如何翻譯成匯編的?
__builtin_powf 在哪里定義?
它在您的 C 標准庫實現中定義。 gcc
中沒有powf
的實現。
__builtin_powf
存在,因此gcc
可以檢測pow
使用情況並在編譯時計算結果(如果可以)。 好吧,字符串"__builtin_powf"
在gcc/builtins.def#L541中是“定義的”(但實際上僅作為 function 參數存在)並且內置函數似乎在gcc/builtins.c#L2100處處理,但最終pow
被處理通過標准庫。 當fold-const-call.c#L1393 中的fold_const_call_sss()
返回成功時,這意味着pow
被不斷折疊。 可以在tree-vect-patterns.c
中對調用進行矢量化/替換。 但最后,“實現”在您的 C 標准庫中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.