2012-01-17 14 views
0

RVDS 4.0を使用してCortex A8の実行可能ファイルを構築しようとしています。私のコードではNEONを使用していますが、fpuオプションをnoneまたはSoftVFPに設定する必要があります。 ARMのWebサイトには、fpuがSoftVFPに設定されている場合、NEONが無効になっていることが記載されています。これはVFPとNEONがレジスタを共有するためですか?fpuをSoftVFPまたはnoneに設定したCortex A8でNEONを有効にする

fpuがSoftVFPに設定されているときにNEONを使用できない理由、またはfpuがSOftVFPに設定されている場合でもNEONを有効にするオプションがあるかどうかを説明できますか?

ありがとう

+0

StackOverflowのVFPタグは、プログラミング言語とデータベースである「Visual FoxPro」の略です。おそらくあなたの質問には関係ありません。 –

+0

ありがとうございます。私は自分の質問を編集しました – user1116700

答えて

0

なぜ、--cpu = 7-Aを使用しないのですか?そのcurrect --fpuオプションを暗示する必要があり

softVFPを、私はNEONは単にはい、NEONとVFPレジスタは共有されている

+0

Nope - ARMv7aはFPUを意味するものではなく、FPUなしでv7aを実装するSoCがあります.VFPvsomethingorotherにはいくつかあり、Neonにもいくつかあります。 – rsaxvc

0

が実装されていないと思い、エミュレーションライブラリです。 VFPを認識しているOSであれば、NEONも正しく処理されるため、オペレーティングシステムのコンテキスト切り替えサポートが簡素化されます。

関数の引数/結果を別のレジスタに格納するため、softVFP用に作成されたコードとハードウェアVFP用に構築されたコードをリンクすることは安全ではありません。

SoftVFPライブラリにリンクする必要があるが、SoCがサポートしていることが分かっている場合は、特別なケースがあります(これはわかりますか?A8にはNEONなし)。特殊なケースはsoftvfp +と呼ばれます。これが動作する方法は、関数の引数は整数レジスタに渡されますが、関数の中ではコンパイラがFPUを使用することも、NEONを使用することもできます。 CortexA8とNEONをターゲットとするARMのコンパイラでは、 "--fpu = softvfp + vfpv3"を使用することをお勧めします。

これに関連するARMコンパイラのオプションについては、これを参照してください。他の多くのコンパイラにも同様のスイッチがあります。

ARMのRVCT3.xと上記コンパイラのために、あなたは(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/CIHCJIFE.html)をお勧めします:

softVFPを+

VFPv3のは、ソフトウェアで、VFPv3のに適合する、ハードウェアのベクタ浮動小数点ユニットを選択します浮動ポイントリンケージ。 VFPv3ユニットを実装するシステムでThumbコードとARMコードをインターワークする場合は、このオプションを選択します。

GCCでは、 "-mfloat-abi = softfp"が必要です。 "-mfpu = 'neon'"と思っています。 GCCのマニュアル(http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html)から:

-mfloat-ABI =名前

指定する浮動小数点ABIに使用します。許容される値は、 'soft'、 'softfp'、 'hard'です。 'soft'を指定すると、GCCは浮動小数点演算のライブラリ呼び出しを含む出力を生成します。 'softfp'は、ハードウェア浮動小数点命令を使用してコードを生成することができますが、依然としてソフトフロート呼び出し規則を使用します。 'ハード'は浮動小数点命令の生成を可能にし、FPU固有の呼び出し規約を使用します。

デフォルトは、特定のターゲット構成によって異なります。ハードフロートおよびソフトフロートABIはリンク互換ではないことに注意してください。同じABIでプログラム全体をコンパイルし、互換性のあるライブラリセットにリンクする必要があります。

関連する問題