Da die DateiLLVM/Clang MIPS outputing, aber nicht in SPIM arbeiten ....
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}
kann ich die Befehle verwenden
clang -emit-llvm hello.c -c -o hello.bc
llc hello.bc -march=mipsel -relocation-model=static -o hello.s
ein schönes Stück zu produzieren, was aussieht MIPS-Code, (unten platziert, um den Text nicht zu zerbrechen) Leider finde ich, wenn ich es in meinem treuen SPIM-Simulator für MIPS ausprobiere und finde, dass SPIM Objekte in fast jeder Zeile davon anspricht. Nicht nur die '.Section .mdebug.abi32' Zeilen, sondern auch jede Zeile der Form '.cfi *' - und noch verwirrender (weil es wie MIPS für mich aussieht ...) die Zeile 'lui $ 2,% hi (__gnu_local_gp)“wird widersprochen.
Suche nach Informationen über die verschiedene Aromen von MIPS dass SPIM und LLVM bewältigen, oder jemand ein Beispiel für einen MIPS-Simulator geben kann ich ausführen, dass nimmt der MIPS Code dass LLVM produziert.
.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
Eine andere Route, wenn Sie Linux ausführen, wäre die Verwendung des QEMU Linux User Mode Emulators für Mips. Das ist es, was ich für meine CLAR basierte ELLCC Werkzeugkette benutze. (http://ellcc.org) –