C および C++ コードのインラインアセンブラの Thumb 命令セットの制限

C または C++ を Thumb ステートでコンパイルするときはインラインアセンブラを使用できません。また、インラインアセンブラは Thumb 命令をアセンブルしません。代わりに、自動的にコンパイラが ARM ステートに切り替わります。

Thumb 用にコンパイルするコードを含むソースファイルにインラインアセンブリ言語を含める場合、インラインアセンブラコードを含む関数を #pragma arm ステートメントと #pragma thumb ステートメントで囲んで下さい。以下に例を示します。

...         // Thumb コード
#pragma arm // ARM コード。コード生成を ARM 命令セットに切り替えて、
            // インラインアセンブラを使用できるようにする。

int add(int i, int j)
{
    int res;
    __asm
    {
        ADD   res, i, j   // ここに追加
    }
    return res;
}
#pragma thumb   // Thumb コード。Thumb 命令セットに再度切り替える。
                // インラインアセンブラが使用できなくなる

また、コードをコンパイルする際は、--apcs /interwork コンパイラコマンドラインオプションを使用する必要があります。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0472EJ
Non-ConfidentialID081711