__svc

__svc キーワードは、最高 4 つの整数引数を取得し、最高 4 つの結果を value_in_regs 構造体に返すスーパーバイザコール(SVC)関数を宣言します。

__svc は、関数修飾子です。これは、関数の型に影響します。

Show/hide構文

__svc(int svc_num) return-type function-name([argument-list]);

各項目には以下の意味があります。

svc_num

SVC 命令で使用されるイミディエート値を指定します。

以下の範囲の整数を求める式を指定します。

  • ARM 命令の場合は 0 ~ 224-1(24 ビット値)

  • 16 ビット Thumb 命令の場合は 0 ~ 255(8 ビット値)

Show/hide使用法

これにより、通常の関数呼び出しと同じように動作する AAPCS 準拠の操作として、関数の呼び出しがインラインでコンパイルされます。

__value_in_regs 修飾子を使用すると、16 バイトまでの小さな構造体を、AAPCS で定義されている通常の構造体受け渡しメカニズムによってではなく、レジスタに返すように指定できます。

Show/hide

__svc(42) void terminate_1(int procnum); // terminate_1 は結果を返さない
__svc(42) int terminate_2(int procnum);  // terminate_2 は結果を 1 つ返す
typedef struct res_type
{
    int res_1;
    int res_2;
    int res_3;
    int res_4;
} res_type;
__svc(42) __value_in_regs res_type terminate_3(int procnum);
                                         // terminate_3 は
                                         // 複数の結果を返す

Show/hideエラー

SVC 命令をサポートしない ARM アーキテクチャバリアント、または ARM アーキテクチャベースのプロセッサが、--cpu オプションを使用してコマンドラインで指定されると、コンパイラはエラーを生成します。

Show/hide関連項目

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