파일LLVM은/그 소리 MIPS로하고 출력하기 만 SPIM 작동하지 ....
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}
을 감안할 때
나는 어떻게 생겼는지의 좋은 비트를 생성하는 명령
clang -emit-llvm hello.c -c -o hello.bc
llc hello.bc -march=mipsel -relocation-model=static -o hello.s
을 사용할 수 있습니다 불행히도 MIPS에 대한 신뢰할 수있는 SPIM 시뮬레이터에서 실행하려고하면 SPIM 객체가 거의 모든 행에 표시됩니다. '. 섹션 .mdebug.abi32'뿐만 아니라 '.cfi *'형식의 줄을 - 더 혼란 스럽기 때문에 (MIPS와 비슷하기 때문에 ...) 'lui $ 2, % hi (__gnu_local_gp) "에 반대한다.
내가 SPIM와 LLVM이 대처하는 것이 MIPS의 다른 맛에 대한 몇 가지 정보를 찾고, 또는 누군가는이 MIPS 받아 내가 실행할 수있는 MIPS 시뮬레이터의 예를 제공합니다 LLVM 생산되는 코드입니다.
.Section .mdebug.abi32
.previous
.file "hello.bc"
.text
.globl main
.align 2
.type main,@function
.set nomips16 # @main
.ent main
main:
.cfi_startproc
.frame $sp,32,$ra
.mask 0x80000000,-4
.fmask 0x00000000,0
.set noreorder
.set nomacro
# BB#0: # %entry
addiu $sp, $sp, -32
$tmp2:
.cfi_def_cfa_offset 32
sw $ra, 28($sp) # 4-byte Folded Spill
$tmp3:
.cfi_offset 31, -4
lui $2, %hi(__gnu_local_gp)
addiu $2, $2, %lo(__gnu_local_gp)
sw $2, 16($sp)
sw $zero, 24($sp)
lui $2, %hi($.str)
addiu $4, $2, %lo($.str)
jal printf
nop
addiu $2, $zero, 0
lw $ra, 28($sp) # 4-byte Folded Reload
addiu $sp, $sp, 32
jr $ra
nop
.set macro
.set reorder
.end main
$tmp4:
.size main, ($tmp4)-main
.cfi_endproc
.type $.str,@object # @.str
.section .rodata.str1.1,"aMS",@progbits,1
$.str:
.asciz "hello world\n"
.size $.str, 13
Linux를 사용하는 다른 경로는 Mips 용 QEMU Linux 사용자 모드 에뮬레이터를 사용하는 것입니다. 그것이 내가 clang 기반 ELLCC 툴 체인에 사용하는 것입니다. (http://ellcc.org) –