Sun Studio 12:C 用户指南

F.3.1 32 位 SPARC

函数在寄存器 %o0 中返回 integer 结果,在寄存器 %f0 中返回 float 结果,在寄存器 %f0%f1 中返回 double 结果。

long long 整数以较高词序在 %oN 寄存器中进行传递,以较低词序在 %o(N+1) 寄存器中进行传递。寄存器中的结果在 %o0%o1 中返回,排序相似。

doubles 和 long double 外,所有参数都作为四字节值来传递。double 作为八字节值传递。前六个四字节值(double 计为 8)在寄存器 %o0%o5 中传递。其余值传递到栈中。结构的传递方式是复制结构并将指针传递到副本。long double 的传递方式与结构的传递方式相同。

此处描述的寄存器是可被调用程序识别的寄存器。

F.3.1.1 64 位 SPARC

所有整型参数均作为 8 字节值传递。

浮点参数尽可能在浮点寄存器中传递。

(x86)

函数在以下寄存器中返回结果:

表 F–21 x86 函数返回类型所使用的寄存器

寄存器 

返回的类型 

int 

%eax 

long long

%edx%eax

floatdoublelong double

%st(0)

float _Complex

实部为 %eax,虚部为 %edx

double _Complexlong double _Complex

与包含相应浮点类型的两个元素的结构相同。 

除了 structunionlong longdoublelong double 之外的所有参数都作为四字节值传递;long long 作为八字节值传递,double 作为八字节值传递,long double 作为 12 字节值传递。

structunion 被复制到栈中。大小向上舍入为 4 字节的倍数。返回 structunion 的函数被传递一个隐藏的首参数,并指向返回的 structunion 的存储位置。

从一个函数返回时,需要调用程序从栈中弹出参数,但 structunion 返回的附加参数除外,它由调用的函数弹出。