Re: [rfa] mips argument passing fixes for o32

Andrew Cagney
2001-07-15T14:50:00Z

> Andrew Cagney:
> |(A+3, yes, sorry).
> |
> |The SGI compilers are big endian (correct?) so who knows what they would
> |do in the little endian case.
>
>
> Correct. Years ago it was possible to emit little-endian
> code, but on MIPS/IRIX that was irrelevant and is no longer
> supported.
> davea@sgi.com

You wouldn't have access to such a machine by any chance? :-)

I'm getting the feeling I'm wrong with this one - for some strange
historical reason LE o32 really does left/right shift small parameters
(I'm still mining the archives).

Assuming that is the case ...

> if (!MIPS_EABI
> && MIPS_SAVED_REGSIZE < 8
> - && TARGET_BYTE_ORDER == BIG_ENDIAN
> + && (TARGET_BYTE_ORDER == BIG_ENDIAN
> + || TYPE_LENGTH (arg_type) < MIPS_SAVED_REGSIZE)
> && partial_len < MIPS_SAVED_REGSIZE
> && (typecode == TYPE_CODE_STRUCT ||
> typecode == TYPE_CODE_UNION))

I don't know that line being added should be

|| TYPE_LENGTH (arg_type) < MIPS_SAVED_REGSIZE

it should at least be guarded by ``ABI == o32''. What does LE n32 do
for instance?
If GCC, for o32, always left shifts the structs dregs (PARTIAL_LEN <
MIPS_SAVED_REGSIZE) then is just the ABI test needed?

Andrew

PS: That function is the official example of how to _not_ multi-arch an ABI.