quiero definir una función en el ensamblaje LLVM que toma como argumento:montaje LLVM: llamar a una función utilizando varargs
- un identificador a un sub-función
- un vararg
Este la función debe hacer un preprocesamiento, encontrar la función correcta para el identificador y llamarlo usando vararg, y devolver su resultado.
Algo así como:
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
}
No parece ser posible. ¿Hay alguna forma de hacer eso? Creo que debería ser posible usar un ensamblador simple.
Se trata de una función de envío para un lenguaje orientado a objetos. Yo preferiría que fuera rápido.
Lo que me gustaría es una manera de:
- eliminar de la pila el primer argumento utilizado por @ 1
- rama a la segunda función.
La segunda función sería entonces ser ejecutado en el lugar de la primera (que es una llamada de cola), pero con una lista de argumentos que no se sabe exactamente a la primera función (vararg de la primera función).
¿Existe una opción para escribir dicho código en C, compilarlo con clang/llvm-gcc y desensamblar el '.bc'? – osgx
Hay un desensamblador llvm: 'llvm-dis'. Lo que quiero hacer no se puede hacer en C. – Mildred