Commit ae8c9754 by Richard Sandiford Committed by Richard Sandiford

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
parent ed00ab95
2004-10-07 Richard Sandiford <rsandifo@redhat.com> 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 PR bootstrap/17857
* Makefile.in (stmp-fixproto): Pass FIX_HEADER=build/... to fixproto. * Makefile.in (stmp-fixproto): Pass FIX_HEADER=build/... to fixproto.
......
...@@ -918,7 +918,8 @@ struct hppa_args {int words, nargs_prototype, incoming, indirect; }; ...@@ -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 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 so that there is only one element. This allows the object to be
correctly padded. */ 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 /* 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. */ tempted to try and simply it, but I worry about breaking something. */
......
...@@ -2513,8 +2513,12 @@ assign_parm_setup_block_p (struct assign_parm_data_one *data) ...@@ -2513,8 +2513,12 @@ assign_parm_setup_block_p (struct assign_parm_data_one *data)
return true; return true;
#ifdef BLOCK_REG_PADDING #ifdef BLOCK_REG_PADDING
if (data->locate.where_pad == (BYTES_BIG_ENDIAN ? upward : downward) /* Only assign_parm_setup_block knows how to deal with register arguments
&& GET_MODE_SIZE (data->promoted_mode) < UNITS_PER_WORD) 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; return true;
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment