10.16 __svc

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

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

構文

__svc(int svc_num ) return-type function-name([argument-list]);
各項目には以下の意味があります。
svc_num
SVC 命令で使用されるイミディエート値を指定します。
以下の範囲の整数を求める式を指定します。
  • ARM 命令の場合は 0 ~ 224–1(24 ビット値)
  • 16 ビット Thumb 命令の場合は 0 ~ 255(8 ビット値)

使用法

これにより、通常の関数呼び出しと同じように動作する AAPCS 準拠の操作として、関数の呼び出しがインラインでコンパイルされます。
__value_in_regs 修飾子を使用すると、16 バイトまでの小さな構造体を、AAPCS で定義されている通常の構造体受け渡しメカニズムによってではなく、レジスタに返すように指定できます。

エラー

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

__svc(42) void terminate_1(int procnum); // terminate_1 returns no results
__svc(42) int terminate_2(int procnum);  // terminate_2 returns one result
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 returns more than
                                         // one result
関連する参考文書
10.17 __svc_indirect
10.18 __svc_indirect_r7
8.42 --cpu=name コンパイラオプション
10.19 __value_in_regs
関連情報
SVC
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.