gccはコードが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
エラーによるコンパイルされませんが、大半はコンパイルんいくつかのCファイルがあります。私たちのソースファイルとディレクトリに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)
は、-msoft-float
を使用しているときには明らかに利用できないx87レジスタの1つを指しています。 i386
で、奇妙なことに幸運なことにarm
のバージョンが正しくコンパイルされていて、うまく動作しているようです。
お返事ありがとうございます。私はbuildrootを使用してuclibcをブートストラップしようとしましたが、.configファイルを無視しているようですが、少なくともUCLIBC_HAS_FPUオプションのためにBR2_UCLIBC_CONFIGの下で提供しました。/ – bdonlan
@Alex uclibcツールチェーンのリンクが壊れています。 http://uclibc.org/toolchains.htmlは適切なはずですか? – zengr