यह आश्चर्य की बात है कि जीसीसी इस मूल रूप से समर्थन नहीं करता है क्योंकि कोड soft-fp
नामक निर्देशिका में स्रोत में स्पष्ट रूप से उपलब्ध है। ऐसा नहीं है कि पुस्तकालय मैन्युअल संकलित करने के लिए संभव है:
$ svn co svn://gcc.gnu.org/svn/gcc/trunk/libgcc/ libgcc
$ cd libgcc/soft-fp/
$ gcc -c -O2 -msoft-float -m32 -I../config/arm/ -I.. *.c
$ ar -crv libsoft-fp.a *.o
कुछ ग फ़ाइलें जो त्रुटियों के कारण संकलन नहीं है कर रहे हैं लेकिन बहुमत संकलित करता है। हमारे स्रोत फ़ाइलों के साथ निर्देशिका में libsoft-fp.a
कॉपी करने के बाद वे अब -msoft-float
के साथ ठीक संकलन:
$ gcc -g -m32 -msoft-float test.c -lsoft-fp -L.
एक त्वरित निरीक्षण
$ objdump -D --disassembler-options=intel a.out | less
का उपयोग कर पता चलता है कि अपेक्षा के अनुरूप नहीं x87 चल बिन्दु निर्देश कहा जाता है और कोड रन मेरे उदाहरण में 8 के कारक द्वारा काफी धीमी गति से, जो बहुत सारे विभाजन का उपयोग करता है।
नोट: मैं
$ gcc -c -O2 -msoft-float -m32 -I../config/i386/ -I.. *.c
साथ नरम फ्लोट पुस्तकालय संकलित करने के लिए पसंद किया गया है, लेकिन इस तरह
adddf3.c: In function '__adddf3':
adddf3.c:46: error: unknown register name 'st(1)' in 'asm'
लगता i386
संस्करण है की तरह त्रुटि संदेश का भार में परिणाम का उपयोग करते समय st(1)
अंक x87 रजिस्टरों में से एक को अच्छी तरह से बनाए रखा नहीं गया है जो स्पष्ट रूप से उपलब्ध नहीं हैं। अजीब या सौभाग्य से arm
संस्करण i386
पर ठीक है और यह ठीक काम करता है।
प्रतिक्रिया के लिए धन्यवाद। मैंने buildroot का उपयोग करके uclibc बूटस्ट्रैपिंग करने का प्रयास किया लेकिन ऐसा लगता है कि यह .config को अनदेखा कर रहा है, मैंने इसे कम से कम UCLIBC_HAS_FPU विकल्प के लिए BR2_UCLIBC_CONFIG के तहत प्रदान किया है:/ – bdonlan
@Alex Uclibc टूलचेन लिंक टूटा हुआ है। http://uclibc.org/toolchains.html उपयुक्त होना चाहिए? – zengr