aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-03-31 15:52:33 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-03-31 15:52:33 -0500
commit978e895200428deb56d3d1975e7b31415980fe91 (patch)
tree0adae7df73cfecf04259f477ff6a5b01b85e4457
parent2700ac936a66273b66757ce51c42df0fe6180870 (diff)
downloadgcc-978e895200428deb56d3d1975e7b31415980fe91.zip
gcc-978e895200428deb56d3d1975e7b31415980fe91.tar.gz
gcc-978e895200428deb56d3d1975e7b31415980fe91.tar.bz2
(INITIAL_ELIMINATION_OFFSET): Subtract
current_function_pretend_args_size from OFFSET for AP. From-SVN: r3961
-rw-r--r--gcc/config/alpha/alpha.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index 63bf66b..c69aade 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -601,7 +601,7 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
/* Definitions for register eliminations.
- We have two registers that can be eliminated on the i386. First, the
+ We have two registers that can be eliminated on the Alpha. First, the
frame pointer register can often be eliminated in favor of the stack
pointer register. Secondly, the argument pointer register can always be
eliminated; it is replaced with either the stack or frame pointer. */
@@ -630,9 +630,14 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
{ if ((FROM) == FRAME_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM) \
(OFFSET) = 0; \
else \
- (OFFSET) = (get_frame_size () + current_function_outgoing_args_size \
- + current_function_pretend_args_size \
- + alpha_sa_size () + 15) & ~ 15; \
+ { \
+ (OFFSET) = ((get_frame_size () + current_function_outgoing_args_size \
+ + current_function_pretend_args_size \
+ + alpha_sa_size () + 15) \
+ & ~ 15); \
+ if ((FROM) == ARG_POINTER_REGNUM) \
+ (OFFSET) -= current_function_pretend_args_size; \
+ } \
}
/* Define this if stack space is still allocated for a parameter passed