4

現在、DSP 関連のコードを Shark で最適化しようとしていますが、浮動小数点から整数への変換に多くの時間を費やしていることがわかりました。

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

iPhone には ARM11 FP コプロセッサが搭載されているように見えるので、コードを FTOSI 命令に置き換えることができないかと考えています。ARM Web サイトで入手できるドキュメントがいくつかありますが、手動で最適化されたアセンブリをインライン化した経験はありません。誰かが前にそれをしたことがありますか?
コードをインライン化できると思います

__asm__ volatile

しかし、指示が​​利用可能かどうかを確認するにはどうすればよいですか?
どうすれば自分の値を渡すことができますか?

EDIT1: Louis が既に指摘したように、「Compile for Thumb」をオフにしてコンパイルしていることを忘れていました。

EDIT2: float を unsigned Int ではなく signed Int16 に変換したいので、ARM 命令を FTOUI から FTOSI に変更しました。これは元の投稿の間違いでした。

4

1 に答える 1

3

これは当然の質問かもしれませんが、ARM をターゲットにしていると確信していますか? デフォルトでは、iPhone SDK はすべてのアプリを THUMB 用にコンパイルします。THUMB は、すべてのソフトウェア浮動小数点 (float/int 変換を含む) を使用します。

いずれにせよ、デバイスに VFP コプロセッサがある場合は、命令があります。FPSID レジスタを読み取り、サポートされているモデルであることを確認することで、適切なコプロセッサがあるかどうかを確認できます。

すべての iPhone がサポートしていると仮定しても安全だと思います。とりわけ、Apple のアセンブラーはオペコードをサポートしており、LLVM ARM バックエンドはそれを型変換に使用します。つまり、Apple が最終的に電話で LLVM をサポートすると、コンパイラーは FTOUI 命令を生成します。

于 2009-07-16T10:10:02.977 に答える