今回はAArch64の関数呼び出しにおける規約のメモ書き。
汎用レジスタ(整数型?)
x0-x7
引数/戻り値
x8
戻り値が構造体等の場合に使用される?
x9-X15
一時的なレジスタ?
Callee Saveなレジスタでなさそうなので、呼び出される側で元の値を保持する必要はない(と思われ)。
x16-x27
よく分かりません。
x18
プラットフォーム依存っぽい。TLSとか?
x19-x28
Callee Saveなレジスタなので、呼び出し側の値を保持する必要がある。おそらく呼び出される側が関数の処理の先頭でpush、終わりにpopしないといけない。
SIMDレジスタ(浮動小数点型も含む?)
v0-v7
引数/戻り値
d8-d15
Callee Saveなレジスタ。
v16-v31
Callee Saveなレジスタではなさそう。
参考