Соглашение о вызовах LLVM для GHC - PullRequest
6 голосов
/ 18 июня 2011

Вот текст в Документ LLVM "langref" :

"куб. См. 10" - соглашение GHC

Это соглашение о вызовах было реализовано специально для использования компилятором Glasgow Haskell (GHC). Он передает все в регистрах, доходя до крайностей, чтобы добиться этого путем отключения регистров сохранения вызываемого абонента. Это соглашение о вызовах не следует использовать легкомысленно, а только для конкретных ситуаций, таких как альтернатива методике производительности закрепления регистров , часто используемой при реализации функциональных языков программирования. В настоящее время только X86 поддерживает это соглашение и имеет следующее ограничения:

  • На X86-32 поддерживает только до 4-битные параметры типа . Типы с плавающей запятой не поддерживаются.
  • На X86-64 поддерживает только до 10-битных параметров типа и 6 параметров с плавающей запятой .

Q:

  1. действительно означает "регистрация закрепления" или, скорее всего, "передает все в регистры".

  2. что такое "4-битные параметры типа"? Я просто искал в руководстве Intel по IA, но ничего не нашел. это особенность процессора Intel?

1 Ответ

7 голосов
/ 18 июня 2011
  1. «Закрепление регистров», по-видимому, относится к назначению определенных вещей конкретным аппаратным регистрам; см. раздел «Регистрация закрепления» этих внутренних замечаний GHC LLVM и связанное обсуждение .

  2. Дирк прав - вы можете ясно увидеть это в коде LLVM tblgen, который определяет эти соглашения (ищите CC_X86_64_GHC и CC_X86_32_GHC).

...