如何找到内在函数的源代码 - gfortran

How to find the source code of intrinsic functions - gfortran

你好,我正在为我的项目使用 gfortran,我的教授告诉我要了解位操作函数代码/它们是如何工作的。
这些是我已经采取但失败的步骤:

  1. 我试图找到存储所有函数的内部函数文件。尽管我确实设法找到了该文件,但它似乎没有帮助,因为该文件只有函数名称和变量类型。(我将在下面附上内部函数填充)。

  2. 我尝试在 google 中搜索,但我只得到了函数的功能,而不是源代码。

谁能告诉我在哪里可以找到这些函数的源代码? 主要是我需要位操作函数。

OS: Windows
IDE:代码块
编译器:GNU 编译器
This fortran file is inside codeblocks folder

内部函数是在编译器内部实现的函数。有些在运行时库中(例如,libgfortran),因此您可以找到它们的一些源代码,有些可能实际上根本不作为函数存在,编译器会在此类函数所在的位置插入一些(汇编,机器)代码被调用。

内部函数通常不是用 Fortran 实现的,而是用 C 或 C++ 等系统编程语言实现的。有些最终会为特定的 CPU 架构调用用汇编语言编写的代码。许多人会调用标准 C 库中的函数,例如GLIBC 实施。

有些理论上可以用 Fortran 编写,有些则不能(例如参数数量不确定的函数,如 min 或类型转换函数,如 transfer)。许多使用仅对编译器可用的内部信息(例如数组描述符或多态对象描述符的内容)。

如果您有兴趣,您当然可以搜索这些函数是如何在开源编译器中实现的,比如在 libgfortran 中 https://github.com/gcc-mirror/gcc/tree/master/libgfortran 但在 Fortran 中编程并不是必需的。

只要从the standard documents, compiler manuals或参考教材中了解他们的描述即可。


具体到位操作函数:

它们在上面链接的手册中有很好的描述,教科书中也会提供示例。

如果你想看到实际的机器代码,你可以尝试编译一个简单的代码来调用这样的函数,例如在像 https://godbolt.org/z/7Yq6acrYr

这样的在线编译器中

如您所见,编译器最终将对 ishft 的调用转换为包含 x86-64 sal 指令的机器代码。没有调用外部函数。


请注意,fortran_procedures.f90 文件只是由某人提供,供您参考,其中包含您可以在标准文档或手册中找到的信息。不是可以编译的Fortran源码