Es ist überraschend, dass gcc dies nicht nativ unterstützt, da der Code in der Quelle in einem Verzeichnis namens soft-fp
eindeutig verfügbar ist. Es ist möglich, dass die Bibliothek manuell zu kompilieren:
$ 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
Es gibt ein paar c-Dateien sind, die aufgrund von Fehlern nicht kompilieren, aber die Mehrheit nicht kompiliert. Nach dem Kopieren libsoft-fp.a
in das Verzeichnis mit unseren Quelldateien kompilieren sie jetzt gut mit -msoft-float
:
$ gcc -g -m32 -msoft-float test.c -lsoft-fp -L.
Einer schnellen Inspektion
$ objdump -D --disassembler-options=intel a.out | less
mit zeigt, dass wie erwartet keine x87 Gleitkommaanweisungen aufgerufen und den Code ausgeführt werden deutlich langsamer, um einen Faktor von 8 in meinem Beispiel, das viel Teilung verwendet.
Hinweis: hätte ich die Soft-Float-Bibliothek mit
$ gcc -c -O2 -msoft-float -m32 -I../config/i386/ -I.. *.c
aber das führt zu Belastungen von Fehlermeldungen wie
adddf3.c: In function '__adddf3':
adddf3.c:46: error: unknown register name 'st(1)' in 'asm'
scheint, wie die i386
zu kompilieren bevorzugte Version ist nicht gut gepflegt, da st(1)
auf eines der x87-Register zeigt, die offensichtlich nicht verfügbar sind, wenn -msoft-float
verwendet wird. Seltsam oder zum Glück die arm
Version kompiliert in Ordnung auf i386
und scheint gut zu funktionieren.
Danke für die Antwort. Ich habe versucht, uclibc mit buildroot bootstrapping, aber es scheint zu ignorieren die .config Ich habe es unter BR2_UCLIBC_CONFIG, zumindest für die UCLIBC_HAS_FPU-Option:/ – bdonlan
@Alex Der uclib Toolchain-Link ist gebrochen. http://uclibc.org/toolchains.html sollte angemessen sein? – zengr