Je viens de découvrir LLVM et je n'en sais pas encore grand chose. Je l'ai essayé en utilisant llvm in browser. Je peux voir que tout code C que j'écris est converti en code octet LLVM qui est ensuite converti en code natif. La page montre une représentation textuelle du code d'octet. Par exemple, pour le code C suivant:Ecriture de l'octet llvm code
int array[] = { 1, 2, 3};
int foo(int X) {
return array[X];
}
Il affiche le code d'octet suivant:
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
}
Ma question est la suivante: Puis-je écrire le code d'octets et donner à l'assembleur de LLVM pour convertir en natif code sauter la première étape de l'écriture de code C tout à fait? Si oui, comment puis-je le faire? Est-ce que quelqu'un a des pointeurs pour moi?
http://llvm.org/docs /CommandGuide/index.html –