diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1994-12-28 18:31:51 -0800 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1994-12-28 18:31:51 -0800 |
commit | 40d2032bdfbfe0c8f3c80f69235c91a570ce0967 (patch) | |
tree | ff8f699dcde510fc30c972ba7f5f9f894debac3a | |
parent | 369c7ab612f67350d529fc7b0a94d95a2d0e6a5e (diff) | |
download | gcc-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.c | 25 |
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 |