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: Jim Wilson <wilson at redhat dot com>
- To: sje at cup dot hp dot com
- Cc: gcc-patches at gcc dot gnu dot org
- Date: 14 Nov 2002 13:37:27 -0500
- Subject: Re: HP-UX IA64 Patch to fix earlier patch
- References: <200211062200.OAA27709@hpsje.cup.hp.com>
Perhaps you should be including testcases for these patches. Your last
patch makes it very clear that you wanted to modify store_bit_field, and
now your claim that you meant to modify extract_bit_field all along is not
very convincing.
It would also help if you gave a clearer explanation of what the patch is
doing.
FUNCTION_ARG_REG_LITTLE_ENDIAN according to the documentation is intended
to handle structure argument passing conventions. Using it in either
store_bit_field or extract_bit_field doesn't seem to make much sense, since
they don't have anything to do with calling conventions. Perhaps this is
necessary when a function argument register is passed to extract_bit_field
and/or store_bit_field. However, your change affects every bit field
extract/store, regardless of whether it is a function arg reg, so that doesn't
seem right. Perhaps you need to modify calling convention code to change the
way it is calling extract/store bit field, or perhaps pass another argument
so that it can behave differently when passed a function arg reg.
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.
Jim