C および C++ コードのインラインアセンブラの BL および SVC の入力パラメータリスト

インラインアセンブラの BL 命令と SVC 命令の形式を以下に示します。

SVC{cond} svc_num, {input_param_list}, {output_value_list}, {corrupt_reg_list}
BL{cond} function, {input_param_list}, {output_value_list}, {corrupt_reg_list}

input_param_list では、関数呼び出しまたは SVC 命令への入力パラメータとなる、式または変数と、その式または変数を保持する物理レジスタが指定されます。これらは物理レジスタへの引数または物理レジスタ名として指定されます。1 つのリストの中で、入力レジスタをこの 2 種類の方法で指定できます。

インラインアセンブラを使用することにより、BL または SVC 命令が開始される前に、指定された物理レジスタ内に正しい値が保持されます。引数を取らない物理レジスタ名が指定されることで、同じ名前の仮想レジスタ内の値が、その物理レジスタ内に渡されます。これによって既存のインラインアセンブリ言語コードとの下位互換性が保たれます。

例えば、以下の命令

BL foo, { r0=expression1, r1=expression2, r2 }

からは、以下の疑似コードが生成されます。

MOV (physical) r0, expression1
MOV (physical) r1, expression2
MOV (physical) r2, (virtual) r2
BL foo

デフォルトでは、input_param_list 入力パラメータを指定しない場合、レジスタ r0r3 が入力パラメータとして使用されます。

Note

入力レジスタリストでは、lrsp、または pc レジスタを指定できません。

Show/hide関連項目

Copyright © 2010 ARM. All rights reserved.ARM DUI 0472BJ
Non-ConfidentialID011811