Сборка LLVM: вызовите функцию с помощью varargs

Я хочу определить функцию в сборке LLVM, которая принимает в качестве аргумента:

  • идентификатор для подфункции
  • a vararg

Эта функция должна выполнить некоторую предварительную обработку, найти правильную функцию для идентификатора, вызвать ее с помощью vararg и вернуть ее результат.

Что-то вроде:

define ??? @1 (i32 %identifier, ...vararg...)
{
  switch i32 %identifier, label %def, i32 1, label %a
a:
  %1 = tail call @function_for_a, ...vararg...
  ret ??? %1
def:
  ret void
}

Кажется, это невозможно. Есть ли еще способ сделать это? Я думаю, что это должно быть возможно с использованием простого ассемблера.

Это функция диспетчеризации для объектно-ориентированного языка. Я бы предпочел, чтобы это было быстро.

Я бы хотел способ:

  • удалить из стека первый аргумент, используемый ветвью @ 1
  • для второй функции.

Вторая функция будет затем выполняться вместо первой (это хвостовой вызов), но со списком аргументов, который не известен точно первой функции (vararg первой функции).

6
задан Mildred 10 August 2011 в 20:03
поделиться