Tweet


* ARM Thumb 命令セット gcc サポート [#h71dec22]

gcc 上での Thumb 命令サポートについて.

** コンパイルオプション [#q8dbc9da]

gcc のドキュメントから Thumb 命令に関するオプションを拾ってみると

- -mthumb-interwork / -mno-thumb-interwork
- -mthumb
- -mtpcs-frame / -mno-tpcs-frame / -mtpcs-leaf-frame
- -mcallee-super-interworking / -mcaller-super-interworking

というあたりかな.

ざっくり見て
ざっくり分類すると,こんなところかな.
:Thumb 命令自体の有効/無効|
これは当然.
:リンク時の問題|
:関数呼び出し・リンク時の問題|
ARM 命令モードの状態で Thumb 命令を使った関数はそのままでは呼ぶことはできない.
必ずどこかでモード切り替えが必要となる.
で,どこでどう切り替えることにしよう,という約束事が必要になるのだけれど,そういうあたり.
:スタックフレーム|
どういう形式のスタックフレームを採用するかのオプション.

** Thumb Interwork [#q0601b1d]

~-mthumb-interwork の説明によると

     Generate code which supports calling between the ARM and Thumb
     instruction sets.  Without this option the two instruction sets
     cannot be reliably used inside one program.  The default is
     `-mno-thumb-interwork', since slightly larger code is generated
     when `-mthumb-interwork' is specified.

ARM 命令セットと Thumb 命令セットをチャンポンに使ってプログラムをリンクできる枠組みのようです.

** Super Interwork [#da811c3c]
** Super Interworking [#da811c3c]
~-mcallee-super-interworking の説明によると

     Gives all externally visible functions in the file being compiled
     an ARM instruction set header which switches to Thumb mode before
     executing the rest of the function.  This allows these functions
     to be called from non-interworking code.

上記の Thumb Interwork の枠組みを使わずに呼び出し元 or 呼び出し先でモード切り替えを行うことで,非 Thumb Interwork コードとインターフェースしよう,ということのようですね.



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS