「Thumb 用にコンパイル」と VFP コードは互いにどのように関連していますか?
iPhone 2G/3G では、Thumb 命令セットに浮動小数点計算が含まれていないことを私は知っています (3GS では、Thumb2 には明らかに..)。では、thumb 用にコンパイルし、浮動小数点計算に VFP コードを使用するとどうなるでしょうか?
私はそれがかなり詳細であることを知っています-しかし、おそらく誰かがここで知っています... c
「Thumb 用にコンパイル」と VFP コードは互いにどのように関連していますか?
iPhone 2G/3G では、Thumb 命令セットに浮動小数点計算が含まれていないことを私は知っています (3GS では、Thumb2 には明らかに..)。では、thumb 用にコンパイルし、浮動小数点計算に VFP コードを使用するとどうなるでしょうか?
私はそれがかなり詳細であることを知っています-しかし、おそらく誰かがここで知っています... c
「VFP コードを使用する」の意味がわかりません。VFP で実行するためにコンパイルされる浮動小数点コードのことですか、それとも実際の VFP アセンブリ命令のことですか?
親指モードでコンパイルして浮動小数点を使用する場合、コード内の浮動小数点演算ごとに関数呼び出しが行われます。これらの関数呼び出し (名前は のようになります__muldf3vfp
) は、モードを ARM に切り替え、データを浮動小数点レジスタに移動し、演算を実行し、データを整数レジスタに戻して戻ります。ARM モードでコンパイルする場合、これは 1 つの命令しかないものに対しては大変な作業になるため、float を多用するコードでは Thumb を使用しないでください。
Thumb モードで VFP アセンブリ命令を使用しようとすると、アセンブラ エラーが発生します。
ご指摘のとおり、3GS は、VFP および NEON レジスタにアクセスできる thumb2 をサポートしているため、この状況は当てはまりません。
また、サム コンパイルと ARM コンパイルの切り替えはソース ファイルごとに実行できるため、プロジェクトの大部分をサムでコンパイルし、多くの浮動小数点を実行するいくつかのルーチンに ARM を使用できます。アセンブリ コードを記述したい場合は、ARM と Thumb を関数ごとに切り替えることができます。