LLVM的GHC调用约定

Nyb*_*ble 7 compiler-construction haskell x86-64 llvm ghc

这是LLVM文档"langref"中的文本:

"cc 10" - GHC会议

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

  • 在X86-32上,最多只支持4位类型参数.不支持任何浮点类型.
  • 在X86-64上,最多只支持10位类型参数和6个浮点参数.

问:

  1. "寄存器固定"是指或者指的是"将寄存器中的所有内容传递".

  2. 什么是"4位型参数"?我刚刚在英特尔的IA手册中搜索过,但没有找到任何东西.它是英特尔CPU的一个特色吗?

Mat*_*ery 8

  1. "寄存器固定"似乎是指将特定内容分配给特定的硬件寄存器; 请参阅这些GHC LLVM后端注释"注册固定"部分链接的讨论.

  2. Dirk是对的 - 你可以在LLVM tblgen代码中清楚地看到它,它定义了这些约定(寻找CC_X86_64_GHCCC_X86_32_GHC).