Với fileLLVM/kêu vang outputing để MIPS, nhưng không làm việc trong SPIM ....
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}
tôi có thể sử dụng các lệnh
clang -emit-llvm hello.c -c -o hello.bc
llc hello.bc -march=mipsel -relocation-model=static -o hello.s
để sản xuất một chút tốt đẹp của những gì trông giống như MIPS code, (đặt bên dưới, để tránh phá vỡ các văn bản) không may, khi tôi cố gắng và chạy nó trong mô phỏng SPIM đáng tin cậy của tôi cho MIPS tôi thấy rằng các đối tượng SPIM đến hầu như mọi dòng của nó. Không chỉ các dòng '.Section .mdebug.abi32' mà còn là bất kỳ dòng nào của biểu mẫu '.cfi *' - và thậm chí còn gây nhầm lẫn hơn (vì nó trông giống như MIPS với tôi ...) dòng 'lui $ 2,% hi (__gnu_local_gp)" được phản đối.
tôi đang tìm kiếm một số thông tin về những hương vị khác nhau của MIPS rằng SPIM và LLVM đối phó với, hoặc một người nào đó để đưa ra một ví dụ về một mô phỏng MIPS tôi có thể chạy mà chấp nhận MIPS mã mà LLVM đang sản xuất
.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
Một tuyến đường khác, nếu bạn đang chạy Linux, sẽ sử dụng trình giả lập chế độ người dùng QEMU Linux cho Mips. Đó là những gì tôi sử dụng cho chuỗi công cụ ELLCC dựa trên clang của tôi. (http://ellcc.org) –