asm アセンブリー・ステートメントのコードの解釈と以降の生成を制御する。
言語レベルに関係なく、デフォルトは -qasm=gcc です。サブオプションなしで -qasm を指定した場合は、デフォルトを指定した場合と同等です。
.-asm=gcc-. >>- -q--+-noasm---+--------------------------------------------><
言語レベルに関係なく、このデフォルトも -qasm=gcc です。
.-asm=gcc----. >>- -q--+-asm=stdcpp-+----------------------------------------->< '-noasm------'
-qasm オプションとその否定フォームは、アセンブリー・ステートメントに対してコードが排出されるかどうかを制御します。オプションの肯定フォームは、ソース・コードでのアセンブリー・ステートメントのコードの生成をコンパイラーに命令します。サブオプションは、アセンブリー・ステートメントの内容の解釈に使用される構文を指定します。例えば、-qasm=gcc を指定した場合、コンパイラーにアセンブリー・ステートメントの拡張 GCC 構文とセマンティクスを認識するよう命令します。
トークン asm は C 言語のキーワードではありません。
したがって、言語レベル stdc89 と stdc99(それぞれ C89 および C99 標準への厳密な準拠を強制する) では、アセンブリー・コードを生成するソースをコンパイルするためにオプション -qkeyword=asm も指定されている必要があります。
他のすべての言語レベルでは、オプション -qnokeyword=asm が有効になっていない限り、トークン asm はキーワードとして扱われます。C では、コンパイラー特定のバリアント __asm と __asm__ はすべての言語レベルでキーワードとなっており、使用不可にすることはできません。
トークン asm、__asm、および __asm__ はすべての言語レベルでキーワードです。-qnokeyword=token のサブオプションは、これらのそれぞれの予約語を使用不可にするために使用することができます。
事前定義マクロ
asm がキーワードとして扱われる場合、コンパイラーは指定されたアセンブリー言語構文に応じて、次の相互に排他的なマクロの 1 つを事前定義します。アセンブラー・コードが生成される場合、マクロは 1 の値を持ちます。そうでない場合は 0 になります。
通知メッセージ
オプション -qinfo=eff も有効な場合は、アセンブリー・ステートメントに対してコードが生成されない場合、コンパイラーは通知メッセージを出します。
アセンブリー・ステートメントが有効な言語フィーチャーとして認識されたときには、オプション -qinfo=por は通知メッセージでそれを報告するようコンパイラーに命令します。
このコマンドが効果を持つためには、システム・アセンブラー・プログラムが使用可能になっている必要があります。詳しくは、-qasm_asコンパイラー・オプションを参照してください。
以下のコードの断片は、インライン・ステートメントでの asm 構文に対する GCC 規則の例を示しています。
int a, b, c; int main() { asm("add %0, %1, %2" : "=r"(a) : "r"(b), "r"(c) ); }
関連情報