LLVM 对 GHC 的调用约定

发布于 2024-11-16 04:56:21 字数 608 浏览 2 评论 0原文

以下是 LLVM 文档“langref” 中的文本:

“cc 10”-GHC 公约

此调用约定是专门为 Glasgow Haskell 编译器 (GHC) 使用而实现的。它传递寄存器中的所有内容,通过禁用被调用者保存寄存器来达到这一目的。这种调用约定不应轻易使用,而只能用于特定情况,例如实现函数式编程语言时经常使用的寄存器固定性能技术的替代方案。目前,只有 X86 支持此约定,并且它具有以下限制:

  • 在 X86-32 上仅支持最多 4 位类型参数。不支持浮点类型。
  • 在 X86-64 上仅支持最多10 位类型参数和 6 个浮点参数

问:

  1. “寄存器固定”是否意味着或指的是“传递寄存器中的所有内容”。

  2. 什么是“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:

  1. does "register pinning" means or refers to "passes everything in registers", likely.

  2. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

染火枫林 2024-11-23 04:56:21
  1. “寄存器固定”似乎是指将特定的东西分配给特定的硬件寄存器;请参阅这些 GHC LLVM 的 “注册固定”部分后端注释链接讨论

  2. 德克是对的 - 您可以在 定义这些约定的 LLVM tblgen 代码(查找CC_X86_64_GHCCC_X86_32_GHC)。

  1. "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.

  2. Dirk is right - you can see it clearly in the LLVM tblgen code which defines these conventions (look for CC_X86_64_GHC and CC_X86_32_GHC).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文