Attribute | o32 | N32/64-bit |
---|
Width of integer parameters in registers | 32 bits | 64 bits |
Stack parameter slot size | 32 bits | 64 bits |
Types requiring multiple registers or stack slots | (long) double, long long | long double |
Stack region alignment | 16 byte | 16 byte |
Integer parameter registers | $4..$7 | $4..$11 |
Floating point parameter registers (single/double precision) | $f12, $f14 | $f12 .. $f19 |
Floating point parameters in Floating point registers (not varags) | first two only, not after integer parameters | any of first eight |
Floating point parameters in Floating point registers (varags) | first two only, not after integer parameters | prototyped parameters only |
Integer parameter register depends on earlier floating point parameter | Yes | No |
Justification of parameters smaller than slot | integer: left float: N/A | integer: left float: Undecided |
Placement of long double parameters | register: $f12/$f14 memory: aligned | register: even/odd memory: aligned |
Sizes of structure components that are passed by registers | 32 bits | 64 bits |
Are structure fields of type double in floating point registers? | Never | If not unioned |
Justification of structs in partial registers | left | left |
Who saves area for parameter registers | caller | callee, only if needed |
Structure results limited to one or two FP fields in registers | FORTRAN COMPLEX only | Always |
All types of structure results in registers | never | up to 128 bits |
Structure results via first parameter result in $2 | yes | no |
Callee-saved FP registers | $f20..$f31 pairs | $f24..$f31 all (64-bit) $f20..$f31 even (n32) |
Single exit block? | yes, sometimes ignored | no (option) |
Return address register | ABI: $31 .mask support | any |
GP register | caller-saved | callee saved |
Use of odd FP registers | double halves | arbitrary |
Use of 64-bit int registers | never (MIPS 1) | arbitrary |