簡體   English   中英

了解 GCC 中的 std::pow 實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM