* ARM Thumb 命令セット gcc サポート ひとまずまとめ [#qdac79e8] いろいろつついてみて,わかったことをひとまずまとめてみる. ** Thumb Interwork と Super Interwork [#g4695c0e] ** Thumb Interwork と Super Interworking [#g4695c0e] これら 2 つの枠組みの性格としては,おそらく :Thumb Interwork|ARM モードと Thumb モードの切り替えは toolchain 任せ :Super Interwork|ARM モードと Thumb モードの切り替えを自分で管理する :Super Interworking|ARM モードと Thumb モードの切り替えを自分で管理する というようなところなのだろう. ** 根本的な問題 [#gdab6902] Thumb Interwork, Super Interwork に共通する問題として C プログラムの場合,ARM モードと Thumb モードの指定はファイル単位でしか行えない,という制限がある. Thumb Interwork, Super Interworking に共通する問題として C プログラムの場合,ARM モードと Thumb モードの指定はファイル単位でしか行えない,という制限がある. 例えばデータ処理で - 前処理は呼び出し頻度が低いので Thumb 命令で - 本処理は頻度が高いので ARM 命令で コンパイルしたい,なんてことは十分有り得るだろう. で,このようなプログラムの場合,(規模にもよるが)前処理と本処理は1つのソースファイルにまとめるのが普通である. が,gcc の縛りにより,1 つのソースファイル中で任意に ARM モード・Thumb モードの切り替えはできない. フルスクラッチでプログラムを起こす場合は「しょうがないから ARM モードの部分と Thumb モードの部分でソースを分けよう」なんてこともできるが,既存のプログラムを移植するような場合は…ちょっと考えたくない. ソースファイル内で例えば #pragma ARM とかのコンパイラ指令でモードを行き来できたりすると,移植はしやすいんだけどなぁ.