4.1. インターワークについて

インターワークを使用すると、ARM コードと Thumb コードを混用することにより、以下の動作を実現できます。

つまり、インターワーク用のコードをコンパイルまたはアセンブルした場合、モジュールで使用される命令セットを考慮することなく、コードから異なるモジュールのルーチンを呼び出すことができます。

ARM リンカでは、ARM 関数がいつ Thumb 状態から呼び出され、Thumb 関数がいつ ARM 状態から呼び出されるのかを検出します。また ARM リンカでは、必要に応じて、呼び出し命令と復帰命令を変更するか、またはベニア と呼ばれる小さなコードセグメントを挿入することによって、プロセッサ状態を変更します。

ARMv5T 以降のアーキテクチャでは、特別な命令を使用しなくてもプロセッサ状態を変更できます。通常、ARMv5T プロセッサではインターワークによるオーバーヘッドはありません。

Note

ARMv5TE 以降のアーキテクチャ用のコンパイルはインターワークを前提としており、常にインターワークを行うコードを生成します。ただし、ARMv5TE 用にビルドされたアセンブリコードはインターワークを前提としていないため、--apcs /interwork アセンブラオプションを使用してアセンブリコードをビルドする必要があります。

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