ARM Thumb 命令セット gcc サポート

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

コンパイルオプション

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

-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 Interworking

-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
Last-modified: 2009-11-08 (日) 05:23:29 (4002d)