aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@redhat.com>2004-10-07 05:34:30 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2004-10-07 05:34:30 +0000
commitae8c97546b339ab1117dc6a0ca4f23c1c0f722d8 (patch)
treeeda689a8e928119de5a8f2c187f0a1f9a7d6ac62 /gcc/function.c
parented00ab959d5ec3ba62791bfb0c6b1fa078c19ece (diff)
downloadgcc-ae8c97546b339ab1117dc6a0ca4f23c1c0f722d8.zip
gcc-ae8c97546b339ab1117dc6a0ca4f23c1c0f722d8.tar.gz
gcc-ae8c97546b339ab1117dc6a0ca4f23c1c0f722d8.tar.bz2
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
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 0545b05..4c8d6c4 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -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