SHのC/C++コードのロジック変更なしで性能改善できそうな方法memo

マイコン命令とコンパイラが特殊そうな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命令で飛ぶ。

効果があったら本記事を改定していきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です