Intel 386 psABI および AMD64 psABI を遵守しています。
関数は次のレジスタで結果を返します。
表 F–21 型を返すために x86 関数が使用するレジスタ
レジスタ |
返される型 |
---|---|
int |
%eax |
%edx と %eax |
|
float、double、long double |
%st(0) |
float _Complex |
%eax (実数部) と %edx (虚数部) |
double _Complex と long double _Complex |
対応する浮動小数点型の 2 つの要素を含む構造体と同じ |
struct、union、long long、double、long double を除くすべての引数は 4 バイト値として渡されます。long long は 8 バイト値として、double は 8 バイト値として、また long double は 12 バイト値としてそれぞれ渡されます。
struct と union はスタックにコピーされます。サイズは 4 の倍数バイトに丸められます。struct と union を返す関数は、その struct や union を格納する場所を指す隠された最初の引数に渡されます。
関数から戻ったあと、スタックから引数をポップするのは呼び出し側の責任です。呼び出された関数によってポップされる struct や union の余分な引数を除きます。