aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1994-12-28 18:31:51 -0800
committerJim Wilson <wilson@gcc.gnu.org>1994-12-28 18:31:51 -0800
commit40d2032bdfbfe0c8f3c80f69235c91a570ce0967 (patch)
treeff8f699dcde510fc30c972ba7f5f9f894debac3a
parent369c7ab612f67350d529fc7b0a94d95a2d0e6a5e (diff)
downloadgcc-40d2032bdfbfe0c8f3c80f69235c91a570ce0967.zip
gcc-40d2032bdfbfe0c8f3c80f69235c91a570ce0967.tar.gz
gcc-40d2032bdfbfe0c8f3c80f69235c91a570ce0967.tar.bz2
(sh_expand_prologue): Clear extra_push at start.
(sh_expand_prologue): Clear extra_push at start. Clear current_function_anonymous_args if set. Clear shiftsyms array. (sh_expand_epilogue): Don't clear extra_push, current_function_pretend_args_size, current_function_anonymous_args, and shiftsyms array. From-SVN: r8697
-rw-r--r--gcc/config/sh/sh.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index ef7e73c..4b76a60 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -2106,7 +2106,7 @@ void
sh_expand_prologue ()
{
int live_regs_mask;
- int d;
+ int d, i;
extern tree current_function_decl;
live_regs_mask = calc_live_regs (&d);
@@ -2114,10 +2114,15 @@ sh_expand_prologue ()
and partially on the stack - eg a large structure */
output_stack_adjust (-current_function_pretend_args_size);
+ extra_push = 0;
+
+ /* This is set by SETUP_VARARGS to indicate that this is a varargs
+ routine. Clear it here so that the next function isn't affected. */
if (current_function_anonymous_args)
{
+ current_function_anonymous_args = 0;
+
/* Push arg regs as if they'd been provided by caller in stack */
- int i;
for (i = 0; i < NPARM_REGS; i++)
{
int rn = NPARM_REGS + FIRST_PARM_REG - i - 1;
@@ -2139,18 +2144,19 @@ sh_expand_prologue ()
add_function (IDENTIFIER_POINTER (DECL_NAME (current_function_decl)));
}
-
+ /* ??? Hack. Clear out the table set up by gen_shifty_op since this
+ info does not apply to the next function. */
+ for (i = 0; i < 32; i++)
+ shiftsyms[i] = 0;
}
void
sh_expand_epilogue ()
{
int live_regs_mask;
- int d;
- int i;
+ int d, i;
live_regs_mask = calc_live_regs (&d);
-
if (frame_pointer_needed)
{
@@ -2170,13 +2176,6 @@ sh_expand_epilogue ()
}
output_stack_adjust (extra_push + current_function_pretend_args_size);
-
- extra_push = 0;
- current_function_pretend_args_size = 0;
- current_function_anonymous_args = 0;
- for (i = 0; i < 32; i++)
- shiftsyms[i] = 0;
-
}
/* Define the offset between two registers, one to be eliminated, and