This is the mail archive of the
gcc-patches@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: sje at cup dot hp dot com (Steve Ellcey)
- Cc: wilson at redhat dot com, gcc-patches at gcc dot gnu dot org
- Date: Fri, 15 Nov 2002 20:00:14 -0500 (EST)
- Subject: Re: HP-UX IA64 Patch to fix earlier patch
> > From: "John David Anglin" <dave@hiauly1.hia.nrc.ca>
> >
> > 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.
>
> I'll give this a try. Do you know if this behavour keys off of
> WORDS_BIG_ENDIAN, BYTES_BIG_ENDIAN, or BITS_BIG_ENDIAN? On PA HP-UX all
> of these are 1, but on IA64 HP-UX we are setting BYTES and WORDS to 1
> and leaving BITS at 0. Setting BITS_BIG_ENDIAN to 1 was causing some
> problems that I don't recall off the top of my head.
emit_group_load and emit_group_store use extract_bit_field and
store_bit_field. They don't directly key off any of the above
but extract_bit_field and store_bit_field do.
In the 32-bit port, we had the rather unique situation where 5-8 byte
structs needed to be right-justified in the same manner as 1-4 byte
structs. Structs larger than this are left justified.
Dave
--
J. David Anglin dave.anglin@nrc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)