遵循 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 |
与包含相应浮点类型的两个元素的结构相同。 |
除了 struct、union、long long、double 和 long double 之外的所有参数都作为四字节值传递;long long 作为八字节值传递,double 作为八字节值传递,long double 作为 12 字节值传递。
struct 和 union 被复制到栈中。大小向上舍入为 4 字节的倍数。返回 struct 和 union 的函数被传递一个隐藏的首参数,并指向返回的 struct 或 union 的存储位置。
从一个函数返回时,需要调用程序从栈中弹出参数,但 struct 和 union 返回的附加参数除外,它由调用的函数弹出。