IARコンパイラを最高の最適化レベルで使用して、MSP430用の組み込みコードを書いています(速度やサイズは何も変わりません)。
関数を静的として定義し、同じファイル内で一度だけ参照します。関数には内部リンケージがあり、一度だけ使用されるため、オプティマイザーがインライン展開を実行することを期待していました。そうしない理由はありません。
関数は短く、16 ワードのマシン コードになります。ISR から呼び出されます。inline キーワードを追加すると関数がインラインになりますが、オプティマイザにはヒントが必要なようです。インラインにすると、 / が 1と 1の 2 つのpush
/pop
がスタックに保存されます。calla
reta
(キーワードがなくても)インライン展開が実行されると期待するのは正しいinline
ですか、それとも何か不足していますか?
編集:さらにいくつかのテストでは、インライン展開が関数のサイズに依存し、しきい値が非常に低いことが示されました。15 ワードか 16 ワードのマシン コードのようです。それ以上では、キーワードが指定されていない場合、オプティマイザーは展開しません。
なぜそうしないのかはまだわかりません (読みやすさはオプティマイザーの関心事ではないはずですよね?) が、IAR だけがこれに答えることができることは理解しています。