aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1994-10-12 16:05:49 -0700
committerJim Wilson <wilson@gcc.gnu.org>1994-10-12 16:05:49 -0700
commit6f6733591efa0cc65086a6cd9de20bb0752bdc7a (patch)
tree4b23f173ff23df1ca4ca692b96fb8885015e397f /gcc
parent252b87c7a671f1369d22bb2e27cb14886989a8cc (diff)
downloadgcc-6f6733591efa0cc65086a6cd9de20bb0752bdc7a.zip
gcc-6f6733591efa0cc65086a6cd9de20bb0752bdc7a.tar.gz
gcc-6f6733591efa0cc65086a6cd9de20bb0752bdc7a.tar.bz2
(mips_expand_prologue): Handle types that need constructing.
(mips_expand_prologue): Handle types that need constructing. Rename TYPE to PASSED_TYPE and use consistently. From-SVN: r8264
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/mips/mips.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index cd5450b..d2fc7f4 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -4802,12 +4802,17 @@ mips_expand_prologue ()
for (cur_arg = fnargs; cur_arg != (tree)0; cur_arg = next_arg)
{
- tree type = DECL_ARG_TYPE (cur_arg);
- enum machine_mode passed_mode = TYPE_MODE (type);
- rtx entry_parm = FUNCTION_ARG (args_so_far,
- passed_mode,
- DECL_ARG_TYPE (cur_arg),
- 1);
+ tree passed_type = DECL_ARG_TYPE (cur_arg);
+ enum machine_mode passed_mode = TYPE_MODE (passed_type);
+ rtx entry_parm;
+
+ if (TYPE_NEEDS_CONSTRUCTING (passed_type))
+ {
+ passed_type = build_pointer_type (passed_type);
+ passed_mode = Pmode;
+ }
+
+ entry_parm = FUNCTION_ARG (args_so_far, passed_mode, passed_type, 1);
if (entry_parm)
{
@@ -4815,7 +4820,7 @@ mips_expand_prologue ()
/* passed in a register, so will get homed automatically */
if (GET_MODE (entry_parm) == BLKmode)
- words = (int_size_in_bytes (type) + 3) / 4;
+ words = (int_size_in_bytes (passed_type) + 3) / 4;
else
words = (GET_MODE_SIZE (GET_MODE (entry_parm)) + 3) / 4;
@@ -4827,10 +4832,7 @@ mips_expand_prologue ()
break;
}
- FUNCTION_ARG_ADVANCE (args_so_far,
- passed_mode,
- DECL_ARG_TYPE (cur_arg),
- 1);
+ FUNCTION_ARG_ADVANCE (args_so_far, passed_mode, passed_type, 1);
next_arg = TREE_CHAIN (cur_arg);
if (next_arg == (tree)0)