फ़ाइलLLVM/बजना MIPS करने के लिए outputing, लेकिन 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
का उपयोग कैसा दिखता है का एक अच्छा सा निर्माण करने के लिए कर सकते हैं एमआईपीएस कोड, (पाठ को तोड़ने से बचने के लिए नीचे रखा गया है) दुर्भाग्यवश, जब मैं इसे एमआईपीएस के लिए अपने भरोसेमंद स्पिम सिम्युलेटर में चलाता हूं और चलाता हूं तो मुझे लगता है कि एसपीआईएम वस्तुओं की लगभग हर पंक्ति में है। न केवल '.Section.mdebug.abi32' लाइनें, लेकिन '.ffi *' फ़ॉर्म की किसी भी पंक्ति - और इससे भी अधिक भ्रमित (क्योंकि यह मुझे एमआईपीएस की तरह दिखती है ...) लाइन 'lui $ 2,% hi (__gnu_local_gp) "पर आपत्ति है।
मैं MIPS के विभिन्न जायके कि SPIM और LLVM से निपटने के बारे में कुछ जानकारी के लिए देख रहा हूँ, या किसी एक 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
यदि आप लिनक्स चला रहे हैं तो एक और मार्ग, मिप्स के लिए क्यूईएमयू लिनक्स उपयोगकर्ता मोड एमुलेटर का उपयोग करना होगा। यही वह है जो मैं अपने क्लैंग आधारित ईएलएलसीसी उपकरण श्रृंखला के लिए उपयोग करता हूं। (Http://ellcc.org) –