LLVM 对 GHC 的调用约定
以下是 LLVM 文档“langref” 中的文本:
“cc 10”-GHC 公约
此调用约定是专门为 Glasgow Haskell 编译器 (GHC) 使用而实现的。它传递寄存器中的所有内容,通过禁用被调用者保存寄存器来达到这一目的。这种调用约定不应轻易使用,而只能用于特定情况,例如实现函数式编程语言时经常使用的寄存器固定性能技术的替代方案。目前,只有 X86 支持此约定,并且它具有以下限制:
- 在 X86-32 上仅支持最多 4 位类型参数。不支持浮点类型。
- 在 X86-64 上仅支持最多10 位类型参数和 6 个浮点参数。
问:
“寄存器固定”是否意味着或指的是“传递寄存器中的所有内容”。
什么是“4位类型参数”?我刚刚在Intel的IA手册中搜索,但没有找到任何内容。这是Intel CPU 的一个特性吗?
Here is the text in LLVM's doc "langref":
"cc 10" - GHC convention
This calling convention has been implemented specifically for use by the Glasgow Haskell Compiler (GHC). It passes everything in registers, going to extremes to achieve this by disabling callee save registers. This calling convention should not be used lightly but only for specific situations such as an alternative to the register pinning performance technique often used when implementing functional programming languages.At the moment only X86 supports this convention and it has the following limitations:
- On X86-32 only supports up to 4 bit type parameters. No floating point types are supported.
- On X86-64 only supports up to 10 bit type parameters and 6 floating point parameters.
Q:
does "register pinning" means or refers to "passes everything in registers", likely.
what is "4 bit type parameters"? I just searched in the Intel's IA manual, but didn't find anything. does it a feature of Intel's CPU?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
“寄存器固定”似乎是指将特定的东西分配给特定的硬件寄存器;请参阅这些 GHC LLVM 的 “注册固定”部分后端注释和链接讨论。
德克是对的 - 您可以在 定义这些约定的 LLVM tblgen 代码(查找
CC_X86_64_GHC
和CC_X86_32_GHC
)。"Register pinning" seems to refer to assigning specific things to specific hardware registers; see the "Register Pinning" section of these GHC LLVM back-end notes and the linked discussion.
Dirk is right - you can see it clearly in the LLVM tblgen code which defines these conventions (look for
CC_X86_64_GHC
andCC_X86_32_GHC
).