SHマイコンのSFR設定は時間がかかる???

SHマイコンの SFR:システムレジスタ も時間がかかるのでしょうか? 前回記事では、割込禁止フラグをアクセスするにはC/C++言語上では一行であっても、アセンブラ(実行コード)では専用のSTR命令を経由し、直接変更できないためステート数を食うことが分かりました。

デバッグ時に、E1エミューレータ等で確認できないタイミングを検証したい時 (もしくはエミューレータ等が使えず表示部がない機器 ) では、余っているマイコンポートに出力し、オシロで計測します。とっても気軽に。SHの場合、どのように実行コードが展開されるのでしょうか?

コンパイラはC/C++ compiler package for SuperH RISC engine family V.9.04 Release 03 (無償版)です。

よくやるデバッグポートやLED反転の場合、 C/C++ だと、

最適化ありでのアセンブラ展開は、

実行コードの展開量が多いですね。SFRをダイレクトに読書きしないのは変わらず。ビット反転なのになぜ分岐が必要なのか? PARを何故2回読むのか? 不思議です。R13 にマスク値を入れるのは、オベランドに固定値を直接指定できないのでしょうかね。

12ステートで総17clock、分岐があるとパイプラインの先読みがムダになるのでざっくり+10=27clock。大体 0.3us という計算です。 RL78や78Kシリーズなら以下のように一行で済むはず。

SHでアセンブラで書くなら以下でいいような気がしますが、、、

BIT操作命令はやや特殊、Bit指定は0~7まで。8以上は第2オペランドをアドレス指定でoffsetを要すようで汎用レジスタだけでは組めないようです。SHコンパイラ、SH CPUはなんか特殊そうですね。旧三菱系のM16C、R8Cもちょっと変でしたけど、、、 やっぱり最後にのこったNEC系に部があるのでしょうか…

コメントを残す

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