Инструкция Call
CALL := [%IDENT '=' ABITY] 'call' VAL '(' (ARG), ')' ARG := ABITY %IDENT # Regular argument | 'env' VAL # Environment argument (first) | '...' # Variadic marker (last) ABITY := BASETY | :IDENT
Инструкция call является специальной по нескольким причинам. Это не трехадресная инструкция и требует указания всех аргументов. Кроме того, тип возврата может быть либо базовым, либо составным. Эти особенности необходимы для компиляции вызовов совместимо с С (т.е. для соблюдения ABI).
The call instruction is special in several ways. It is not a three-address instruction and requires the type of all its arguments to be given. Also, the return type can be either a base type or an aggregate type. These specifics are required to compile calls with C compatibility (i.e., to respect the ABI).
Когда составной тип используется как тип аргумента или тип возвращаемого значения, значение, переданное или возвращаемое, должно быть указателем на ячейку памяти, в которой находится это значение. Описанное связано с тем, что составные типы не являются штатными для промежуточного языка.
When an aggregate type is used as argument type or return type, the value respectively passed or returned needs to be a pointer to a memory location holding the value. This is because aggregate types are not first-class citizens of the IL.
Если вызываемая функция не возвращает значение, необходимо указать в выражении временное значение для возвращаемого, даже если оно никогда не используется впоследствии.
Unless the called function does not return a value, a return temporary must be specified, even if it is never used afterwards.
Параметр окружения может быть передан в качестве первого аргумента, используя ключевое слово env. Переданное значение должно быть 64-битным целым числом. Если вызываемая функция не ожидает параметра окружения, она будет безопасно удалена. Дополнительную информацию о параметрах среды см. в разделе «Функции».
An environment parameter can be passed as first argument using the env keyword. The passed value must be a 64-bit integer. If the called function does not expect an environment parameter, it will be safely discarded. See the Functions section for more information about environment parameters.
Когда вызванная функция вариативна, последний аргумент должен быть ... .
When the called function is variadic, the last argument must be ... .
Источник: c9x.me