This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: HP-UX IA64 Patch to fix earlier patch
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- To: gcc at gcc dot gnu dot org, wilson at redhat dot com, sje at hp dot com
- Date: Thu, 14 Nov 2002 18:47:52 -0500 (EST)
- Subject: Re: HP-UX IA64 Patch to fix earlier patch
> Alternatively, I suspect you could get rid of FUNCTION_ARG_REG_LITTLE_ENDIAN
> if you modified the IA-64 FUNCTION_ARG macro to return a PARALLEL instead
> of a REG for your problematic cases. This causes the calling convention
> support code to use emit_group_load/store in expr.c, and these routines
> will left-justify small structures in registers on big-endian targets, which
> is probably the behaviour you want.
I agree with Jim here. Not too long ago, I used this technique to avoid
defining FUNCTION_ARG_REG_LITTLE_ENDIAN on the hppa64 port. I also
managed to fix a long standing bug in the 32-bit port passing small
structs using the same technique. Jim's comment is an over simplification
of what really happens when a DImode value is used in a PARALLEL on
big-endian 32-port. You actually get right-justified data in this case.
See function_arg and function_arg_padding in pa.c.
Dave
--
J. David Anglin dave.anglin@nrc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)