This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]