4.1.2. インターワークに適した状況

Thumb 命令をサポートする ARM プロセッサ用のコードを記述する場合、アプリケーションの大部分が Thumb 状態で実行されるように記述することがほとんどです。この方法を使用すると、コード密度を最大限に向上させることができます。さらに、8 ビット幅または 16 ビット幅のメモリを使用することで最高のパフォーマンスを得ることができます。しかし、以下のような理由で、アプリケーションの一部を ARM 状態で実行する場合も考えられます。

速度

アプリケーションには、速度が重要になる部分があります。このようなセクションは、Thumb 状態よりも ARM 状態で実行した方が効率的な場合があります。状況によっては、1 つの ARM 命令で、等価な Thumb 命令を使用するよりも多くの処理を行うことができます。

例えば、小容量の高速 32 ビットメモリを実装しているシステムがあるとします。このメモリから ARM コードを実行する場合、8 ビットまたは 16 ビットのメモリから各命令をフェッチすることによるオーバーヘッドが発生せずに済みます。

機能

Thumb 命令は、等価な ARM 命令に比べると柔軟性の点で劣ります。また、操作によっては Thumb 状態では実行できないものもあります。以下の操作を実行するには、ARM 状態に切り替える必要があります。

  • 割り込みのイネーブルやディセーブルおよびモードの切り替えを行うための CPSR へのアクセス

  • コプロセッサへのアクセス

  • C でサポートされていない DSP 演算命令

例外処理

プロセッサ例外が発生すると、プロセッサは自動的に ARM 状態に移行します。つまり、例外ハンドラが後で Thumb 状態に移行して例外のメイン処理を実行する場合でも、この例外ハンドラの最初の部分は ARM 命令でコーディングする必要があります。このような処理の最後にハンドラからメインアプリケーションに戻るには、プロセッサは ARM 状態に戻る必要があります。

スタンドアロンの Thumb プログラム

Thumb 命令をサポートする ARM プロセッサは、常に ARM 状態で起動します。デバッガで単純な Thumb アセンブリ言語プログラムを実行するには、Thumb 状態への切り替えを実行してからメイン Thumb ルーチンを呼び出す ARM ヘッダを追加する必要があります。この例については、ARM ヘッダのサンプルを参照して下さい。

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential