C++ __builtin_* 函数源代码
C++ __builtin_* functions source codes
我想了解如何在 C++ 中找到 __builtin 函数的源代码,例如 __builtin_cbrt()
。如果你知道,你能帮帮我吗?
I want to learn how can I find
首先熟悉您正在使用的语言 - 学习 C 和 C++ 编程语言。了解 git
和 autotools
等工具以及这些编程语言的环境。熟悉浏览文件所需的工具集 - 至少 grep
,但我推荐它(方式)更快的替代品 - “the silver searcher”ag
或 ack
,但要注意工具像 ctags 或 GNU Global。
然后研究。 GNU 项目是开源的 - 很容易找到 GNU 项目的源代码,现在它们甚至在 github.
上有镜像
那就只是一种“感觉”或“体验”。当然,一个项目将在名为“builtins.c”或类似名称的文件中包含内置函数。保持好奇、理性和创造性。如果你想在代码库中添加一个内置函数,你会把它放在哪里?熟悉您正在使用的项目结构。并期望大型和旧项目的东西散落在各处。
首先我找到gcc sources with builtins.def (BUILT_IN_CBRT, "cbrt"
, and some references of BUILT_IN_CBRT in builtins.c.
克隆 gcc
存储库后,我扫描 BUILT_IN_CBRT
宏名称。浏览代码将我带到 CASE_CFN_CBRT
宏名称,这将我带到 fold-const-call.c:
CASE_CFN_CBRT:
return do_mpfr_arg1 (result, mpfr_cbrt, arg, format);
根据文件的名称fold-const-call.c
我怀疑这部分代码仅在折叠常量调用时被占用。
从那里我可以浏览 google 关于 mpfr_cbrt
符号,它引导我到 GNU MPFR 库。我在 github 上找到了 MPRF 库的克隆并搜索名为 cbrt
的文件,我在 MPRF 库中找到了带有 cbrt 源的 cbrt.c with mpfr_cbrt() sources。我怀疑,当 __builtin_cbrt
折叠在常量表达式中时,这是将被调用并计算数字的 cbrt
的代码。
当不在 constnat 表达式中时,我怀疑 [fold_const_call_ss]https://code.woboq.org/gcc/gcc/fold-const-call.c.html#_ZL18fold_const_call_ssP10real_value11combined_fnPKS_PK11real_format) is not called at all, instead some fold_const_*
function returns 到 gcc 表达式不能不断折叠所以调用实际 cbrt()
生成标准函数。
我想了解如何在 C++ 中找到 __builtin 函数的源代码,例如 __builtin_cbrt()
。如果你知道,你能帮帮我吗?
I want to learn how can I find
首先熟悉您正在使用的语言 - 学习 C 和 C++ 编程语言。了解 git
和 autotools
等工具以及这些编程语言的环境。熟悉浏览文件所需的工具集 - 至少 grep
,但我推荐它(方式)更快的替代品 - “the silver searcher”ag
或 ack
,但要注意工具像 ctags 或 GNU Global。
然后研究。 GNU 项目是开源的 - 很容易找到 GNU 项目的源代码,现在它们甚至在 github.
上有镜像那就只是一种“感觉”或“体验”。当然,一个项目将在名为“builtins.c”或类似名称的文件中包含内置函数。保持好奇、理性和创造性。如果你想在代码库中添加一个内置函数,你会把它放在哪里?熟悉您正在使用的项目结构。并期望大型和旧项目的东西散落在各处。
首先我找到gcc sources with builtins.def (BUILT_IN_CBRT, "cbrt"
, and some references of BUILT_IN_CBRT in builtins.c.
克隆 gcc
存储库后,我扫描 BUILT_IN_CBRT
宏名称。浏览代码将我带到 CASE_CFN_CBRT
宏名称,这将我带到 fold-const-call.c:
CASE_CFN_CBRT:
return do_mpfr_arg1 (result, mpfr_cbrt, arg, format);
根据文件的名称fold-const-call.c
我怀疑这部分代码仅在折叠常量调用时被占用。
从那里我可以浏览 google 关于 mpfr_cbrt
符号,它引导我到 GNU MPFR 库。我在 github 上找到了 MPRF 库的克隆并搜索名为 cbrt
的文件,我在 MPRF 库中找到了带有 cbrt 源的 cbrt.c with mpfr_cbrt() sources。我怀疑,当 __builtin_cbrt
折叠在常量表达式中时,这是将被调用并计算数字的 cbrt
的代码。
当不在 constnat 表达式中时,我怀疑 [fold_const_call_ss]https://code.woboq.org/gcc/gcc/fold-const-call.c.html#_ZL18fold_const_call_ssP10real_value11combined_fnPKS_PK11real_format) is not called at all, instead some fold_const_*
function returns 到 gcc 表达式不能不断折叠所以调用实际 cbrt()
生成标准函数。