LLVM的GHC调用约定

时间:2011-06-18 08:53:45

标签: haskell compiler-construction llvm x86-64 ghc

以下是LLVM's doc "langref"中的文字:

  

“cc 10” - GHC会议

     

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

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

问:

  1. 确实“注册固定”是指或者指的是“将寄存器中的所有内容传递”。

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

1 个答案:

答案 0 :(得分:7)

  1. “寄存器固定”似乎是指将特定内容分配给特定的硬件寄存器;请参阅"Register Pinning" section of these GHC LLVM back-end noteslinked discussion

  2. Dirk是对的 - 您可以在LLVM tblgen code which defines these conventions中清楚地看到它(寻找CC_X86_64_GHCCC_X86_32_GHC)。