您好,我试图了解更多编译器; 当使用gcc -S时 它生成一个.s文件,如
.section __TEXT,__text,regular,pure_instructions
.macosx_version_min 10, 12
.globl _main
.p2align 4, 0x90
_main: ## @main
.cfi_startproc
## BB#0:
pushq %rbp
Ltmp0:
.cfi_def_cfa_offset 16
Ltmp1:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp2:
.cfi_def_cfa_register %rbp
subq $16, %rsp
leaq L_.str(%rip), %rdi
movb $0, %al
callq _printf
xorl %ecx, %ecx
movl %eax, -4(%rbp) ## 4-byte Spill
movl %ecx, %eax
addq $16, %rsp
popq %rbp
retq
.cfi_endproc
.section __TEXT,__cstring,cstring_literals
L_.str: ## @.str
.asciz "Hello World!\n"
.subsections_via_symbols
我的问题是:这个.s汇编文件基于特定的cpu arch生成,如x86或其cpu arch无关紧要? 如果它不相关,我们是否会在命令中添加像ARMv7s这样的cpu配置" gcc -O" ?
问题2: llvm-gcc -S生成的代码与汇编语言有很大不同;是一个cpu arch无关的LLVM IR语言?并且LLVM后端处理剩余的作业以将其转换为特定的cpu拱门?
非常感谢