J'essaie de comprendre un testcase LLVM CodeGen/Generic afin que je puisse le faire passer pour un backend pour un nouveau processeur.Que signifie cet assemblage en ligne dans un test LLVM-IR CodeGen?
C'est le cas de test (LLVM/test/CodeGen/Générique/2007-04-08-MultipleFrameIndices.ll):
; RUN: llc -no-integrated-as < %s
; XFAIL: sparc-sun-solaris2
; PR1308
; PR1557
define i32 @stuff(i32, ...) {
%foo = alloca i8*
%bar = alloca i32*
%A = call i32 asm sideeffect "inline asm $0 $2 $3 $4", "=r,0,i,m,m"(i32 0, i32 1, i8** %foo, i32** %bar)
ret i32 %A
}
Je me demande spécifiquement sur cette partie:
%A = call i32 asm sideeffect "inline asm $0 $2 $3 $4", "=r,0,i,m,m"(i32 0, i32 1, i8** %foo, i32** %bar)
Qu'est-ce que exactement asm en ligne devrait accomplir?
Quand je le lance à travers llc comme indiqué dans le commentaire, je vois cela sur la sortie (pour x86_64):
.text
.file "<stdin>"
.globl stuff
.align 16, 0x90
.type stuff,@function
stuff: # @stuff
.cfi_startproc
# BB#0:
leaq -8(%rsp), %rax
movq %rax, -24(%rsp)
leaq -16(%rsp), %rax
movq %rax, -32(%rsp)
xorl %eax, %eax
#APP
inline asm %eax $1 -24(%rsp) -32(%rsp)
#NO_APP
retq
.Ltmp0:
.size stuff, .Ltmp0-stuff
.cfi_endproc
.section ".note.GNU-stack","",@progbits
Il semble avoir pour résultat la ligne suivante dans le code asm de sortie :
inline asm %eax $1 -24(%rsp) -32(%rsp)
... mais je ne suis pas tout à fait sûr comment cela a été généré à partir de l'entrée. D'où vient le% eax, par exemple? Que signifie cette ligne générée?