Acabo de descubrir LLVM y todavía no sé mucho sobre él. Lo he estado probando usando llvm in browser. Puedo ver que cualquier código C que escribo se convierte a código de bytes LLVM que luego se convierte en código nativo. La página muestra una representación textual del código de bytes. Por ejemplo, para el siguiente código C:Escribiendo el código de byte de llvm
int array[] = { 1, 2, 3};
int foo(int X) {
return array[X];
}
Se muestra el siguiente código de bytes:
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-linux-gnu"
@array = global [3 x i32] [i32 1, i32 2, i32 3] ; <[3 x i32]*> [#uses=1]
define i32 @foo(i32 %X) nounwind readonly {
entry:
%0 = sext i32 %X to i64 ; <i64> [#uses=1]
%1 = getelementptr inbounds [3 x i32]* @array, i64 0, i64 %0 ; <i32*> [#uses=1]
%2 = load i32* %1, align 4 ; <i32> [#uses=1]
ret i32 %2
}
Mi pregunta es: ¿Puedo escribir el código de bytes y darle al ensamblador llvm para convertir a los nativos ¿omitiendo el primer paso de escribir el código C por completo? Si es así, ¿cómo lo hago? ¿Alguien tiene alguna indicación para mí?
http://llvm.org/docs /CommandGuide/index.html –