はい、FPU がないため、浮動小数点は整数演算で行う必要があります。ただし、これを行うには 2 つのメカニズムがあり、一方は他方よりも 11 倍高速です。
GCC ターゲット arm-linux-gnu には通常、ARM の最初の FPU である「FPA」のコードに実際の浮動小数点命令が含まれています。これらは不正な命令トラップを引き起こし、カーネルでキャッチされてエミュレートされます。これは、コンテキストの切り替えが原因で非常に遅くなります。
-msoft-float は代わりにライブラリ関数 (libgcc.a 内) への呼び出しを挿入します。これにより、カーネル空間への切り替えが回避され、エミュレートされた FPA 命令よりも 11 倍高速になります。
使用している浮動小数点モデルについては言及しません - -msoft-float を使用してユーザーランド全体を既に構築している可能性がありますが、オブジェクト ファイルに FPA 命令が含まれていないことを確認する価値があるかもしれません。次の方法で確認できます。
objdump -d file | grep '<space><tab>f' | less
は
file
、コンパイラが出力するオブジェクト ファイル、実行可能ファイル、またはライブラリです。すべての FPA 命令は で始まりますが
f
、他の ARM 命令では始まりません。
<control-V><tab>
これらは実際のスペースとタブ文字であり、シェルを通過してタブ文字を取得する必要がある場合があります。
FPA insns を使用している場合は、-msoft-float を使用してユーザーランド全体をコンパイルする必要があります。
これらの問題に関する最も包括的な詳細情報はhttp://wiki.debian.org/ArmEabiPortであり、主に 3 番目の代替手段に関係しています:arm-linux-gnueabi
コンパイラを使用する、gcc-4.1.1 以降で利用可能な新しい代替 ABI であり、これには異なる特性。詳細については、ドキュメントを参照してください。