マイコン命令とコンパイラが特殊そうなSHマイコンにて、各種マニュアルを読んで、ロジック変更なしで性能改善できそうな方法memoです。まだ試していません。
対象 | 内容 |
コード | なんでもいいauto変数は4byteで確保する。 CPU汎用レジスタが全て4byteのため、1/2byteを使うと、 4byteからの変換コードが挿入されるため。とくにforのループ回数は効きそう。 |
コード | なんでもいいauto変数はsignedで確保する。 cpuのデフォルトがsignedのため、unsignedを使うと変換コードが挿入されるため。 |
コード | 構造体メンバは、使用頻度の高い順で並べる。 |
コード | なるべく「if 0 比較演算子 変数」で判定する。 0と判定だと、CPU汎用レジスタを使わないため。 |
コード | 除数は、なるべく1、2byteを用いる。 |
コード | caseが5個まではif文にする。 |
コード | 引数の参照渡し。C++ のみ。値渡しだと引数値がスタックに退避されるため。 これは一般的なハナシ。実際に試すと、実行コードが1ステート減る。() |
コード | 関数の引数は4つまでとする。これは4つまでならスタックを使わず、CPU汎用レジスタに引数を載せれるため。 |
リンケージ | optimize=register レジスタ退避・回復の最適を用いる。 これは不要なレジスタ退避・回復を削除する。 |
リンケージ | optimize=branch 分岐命令の最適化を用いる。 call先が近い場合、call命令でなくgoto命令で飛ぶ。 |
効果があったら本記事を改定していきます。