9.1.5 引数割り付けの具体例

引数割り付けの具体例を示します。なお、アドレスは全ての図で右から左に向かって増加します(左側が上位アドレス)。

例 1.

レジスタ渡しの対象の型である引数は、宣言順にレジスタR1〜R4に割り付けます。
途中でレジスタ渡しとならない引数があった場合、それ以降の引数はレジスタ渡しの対象となります。スタック上では、その引数の境界調整数に補正したアドレスに配置されます。

 

例 2.

サイズが16バイト以下、かつ4の倍数である構造体および共用体型の引数は、レジスタ渡しの対象となります。それ以外の構造体および共用体型の引数は、スタック渡しとなります。

 

例 3.

関数原型により可変個の引数を持つ関数として宣言している場合、対応する型のない引数およびその直前の引数は、宣言順にスタック渡しになります。

例 4.

関数の返す型が16バイトを超える、または4の倍数でないサイズの構造体または共用体型の場合、R15にリターン値アドレスを設定します。

 

例 5.

リターン値をメモリに設定する場合、通常例4のようにスタックを確保して設定しますが、リターン値を変数に設定する場合、スタックを確保せず、その変数のメモリ領域に直接設定します。この場合、R15にはその変数のアドレスを設定します。