Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly LLVM-IR CodeGen测试用例中的这个内联程序集意味着什么?_Assembly_Llvm_Inline Assembly_Llvm Ir - Fatal编程技术网

Assembly LLVM-IR CodeGen测试用例中的这个内联程序集意味着什么?

Assembly LLVM-IR CodeGen测试用例中的这个内联程序集意味着什么?,assembly,llvm,inline-assembly,llvm-ir,Assembly,Llvm,Inline Assembly,Llvm Ir,我试图理解LLVM CodeGen/Generic测试用例,以便将其作为新处理器的后端 这是测试用例(llvm/test/CodeGen/Generic/2007-04-08-multipleframeindex.ll): 内联asm究竟应该实现什么 如注释所示,当我通过llc运行它时,我在输出上看到了这一点(对于x86_64): …但我不完全确定这是如何从输入中生成的。例如,%eax来自哪里?生成的这一行是什么意思/作用?我猜这是因为输入操作数$1与输出操作数$0位于同一位置,并且必须在寄存器

我试图理解LLVM CodeGen/Generic测试用例,以便将其作为新处理器的后端

这是测试用例(llvm/test/CodeGen/Generic/2007-04-08-multipleframeindex.ll):

内联asm究竟应该实现什么

如注释所示,当我通过llc运行它时,我在输出上看到了这一点(对于x86_64):


…但我不完全确定这是如何从输入中生成的。例如,%eax来自哪里?生成的这一行是什么意思/作用?

我猜这是因为输入操作数
$1
与输出操作数
$0
位于同一位置,并且必须在寄存器中。它也被指定为一个常数零。编译器为
$0
选择了
%eax
,因此也选择了
$1
,并通过
xorl%eax,%eax
预先将其归零

生成的代码是无效的,我假设它不是要组装的,可能测试引擎只是检查输出程序集是否是预期的

; 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
}
    %A = call i32 asm sideeffect "inline asm $0 $2 $3 $4", "=r,0,i,m,m"( i32 0, i32 1, i8** %foo, i32** %bar )
    .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
   inline asm %eax $1 -24(%rsp) -32(%rsp)