レジスタの使用

x64 アーキテクチャには、16 個の汎用レジスタ (これ以降、整数レジスタと呼びます) と 16 個の浮動小数点用の XMM/YMM レジスタが用意されています。volatile レジスタは、呼び出しで使用された後に内容が破棄されることが、呼び出し元によって想定されているスクラッチ レジスタです。関数呼び出しで使用された後もレジスタの値を保持するには非 volatile レジスタが必要です。使用された非 volatile レジスタの保存は、呼び出し先が行う必要があります。

関数呼び出しで各レジスタがどのように使用されるかを次の表に示します。

登録

状態

用途

RAX

Volatile

戻り値レジスタ

RCX

Volatile

1 番目の整数引数

RDX

Volatile

2 番目の整数引数

R8

Volatile

3 番目の整数引数

R9

Volatile

4 番目の整数引数

R10:R11

Volatile

必要に応じて、呼び出し元によって保持される必要があります。syscall/sysret 命令で使用されます。

R12:R15

非 volatile

呼び出し先によって保持される必要があります。

RDI

非 volatile

呼び出し先によって保持される必要があります。

RSI

非 volatile

呼び出し先によって保持される必要があります。

RBX

非 volatile

呼び出し先によって保持される必要があります。

RBP

非 volatile

フレーム ポインターとして使用できます。呼び出し先によって保持される必要があります。

RSP

非 volatile

スタック ポインター

XMM0, YMM0

Volatile

1 番目の FP 引数。__vectorcall が使用された場合の 1 番目のベクター型引数。

XMM1, YMM1

Volatile

2 番目の FP 引数。__vectorcall が使用された場合の 2 番目のベクター型引数。

XMM2, YMM2

Volatile

3 番目の FP 引数。__vectorcall が使用された場合の 3 番目のベクター型引数。

XMM3, YMM3

Volatile

4 番目の FP 引数。__vectorcall が使用された場合の 4 番目のベクター型引数。

XMM4, YMM4

Volatile

必要に応じて、呼び出し元によって保持される必要があります。__vectorcall が使用された場合の 5 番目のベクター型引数。

XMM5, YMM5

Volatile

必要に応じて、呼び出し元によって保持される必要があります。__vectorcall が使用された場合の 6 番目のベクター型引数。

XMM6:XMM15, YMM6:YMM15

非 volatile (XMM)、volatile (YMM の上半分)

必要に応じて、呼び出し先によって保持される必要があります。必要に応じて、呼び出し元によって YMM レジスタが保持される必要があります。

参照

関連項目

x64 ソフトウェア規約

__vectorcall