re PR middle-end/16815 (MIPS n32/n64 inefficient code for float arguments)

PR target/16815
	* function.c (assign_parm_setup_block_p): Tighten BLOCK_REG_PADDING
	check.
	* config/pa/pa.h (BLOCK_REG_PADDING): Define in terms of
	function_arg_padding.

From-SVN: r88660
This commit is contained in:
Richard Sandiford 2004-10-07 05:34:30 +00:00 committed by Richard Sandiford
parent ed00ab959d
commit ae8c97546b
3 changed files with 16 additions and 3 deletions

View File

@ -1,3 +1,11 @@
2004-10-07 Richard Sandiford <rsandifo@redhat.com>
PR target/16815
* function.c (assign_parm_setup_block_p): Tighten BLOCK_REG_PADDING
check.
* config/pa/pa.h (BLOCK_REG_PADDING): Define in terms of
function_arg_padding.
2004-10-07 Richard Sandiford <rsandifo@redhat.com>
PR bootstrap/17857

View File

@ -918,7 +918,8 @@ struct hppa_args {int words, nargs_prototype, incoming, indirect; };
We use a DImode register in the parallel for 5 to 7 byte structures
so that there is only one element. This allows the object to be
correctly padded. */
#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) (TARGET_64BIT ? upward : downward)
#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \
function_arg_padding ((MODE), (TYPE))
/* Do not expect to understand this without reading it several times. I'm
tempted to try and simply it, but I worry about breaking something. */

View File

@ -2513,8 +2513,12 @@ assign_parm_setup_block_p (struct assign_parm_data_one *data)
return true;
#ifdef BLOCK_REG_PADDING
if (data->locate.where_pad == (BYTES_BIG_ENDIAN ? upward : downward)
&& GET_MODE_SIZE (data->promoted_mode) < UNITS_PER_WORD)
/* Only assign_parm_setup_block knows how to deal with register arguments
that are padded at the least significant end. */
if (REG_P (data->entry_parm)
&& GET_MODE_SIZE (data->promoted_mode) < UNITS_PER_WORD
&& (BLOCK_REG_PADDING (data->passed_mode, data->passed_type, 1)
== (BYTES_BIG_ENDIAN ? upward : downward)))
return true;
#endif