質問

組み込みシステム(FLACデコード、Windows CE、ARM 926 MCU)で動作するコードを最適化しようとしています。

デフォルトの実装はマクロとルックアップテーブルを使用します: ジェネラコディセタグプレ

ただし、ほとんどのCPUには、x86ではbsr、ARMではclzという専用の命令がすでにあります( http://www.devmaster.net/articles/fixed-point-optimizations/ )、それはより効率的であるはずです。

Windows CEには、組み込み関数 _CountLeadingZeros があります。その値を呼び出すだけです。ただし、マクロの4倍の速度です(1,000万回の反復で測定)。

専用のASM命令に依存する(はずの)組み込み関数が4倍遅くなる可能性はどのようにありますか?

役に立ちましたか?

解決

分解を確認してください。コンパイラが命令を挿入したことを確認しますか?備考セクションに次のテキストがあります:

この関数は次の方法で実装できます ランタイム関数の呼び出し。

それがあなたのケースで起こっていることだと思います。

CLZ命令はARMv5以降でのみ使用可能であることに注意してください。ARMv5コードが必要かどうかをコンパイラに伝える必要があります: ジェネラコディセタグプレ

(Microsoftは「ARMv5」ではなく「ARM5」を誤って使用しています)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top