aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-04-29 23:01:29 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-04-29 23:01:29 +0000
commit5c7a310f81ad5609a1830d4d156ef90f3a35d764 (patch)
tree556b4266f6a4292a1085b6bcb6c75790cd0cf08f /gcc/expr.c
parent1a6580ec80d9c0dba5970a7541162faffb48a613 (diff)
downloadgcc-5c7a310f81ad5609a1830d4d156ef90f3a35d764.zip
gcc-5c7a310f81ad5609a1830d4d156ef90f3a35d764.tar.gz
gcc-5c7a310f81ad5609a1830d4d156ef90f3a35d764.tar.bz2
emit-rtl.c (start_sequence): Expand comments.
* emit-rtl.c (start_sequence): Expand comments. (start_sequence_for_rtl_expr): Likewise. (push_to_sequence): Likewise. (end_sequence): Likewise. * expr.c (inhibit_defer_pop): Likewise. * expr.h (inhibit_defer_pop): Likewise. (NO_DEFER_POP): Likewise. (OK_DEFER_POP): Likewise. From-SVN: r26704
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index f8ca426..828462f 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -87,10 +87,21 @@ int do_preexpand_calls = 1;
These are the arguments to function calls that have already returned. */
int pending_stack_adjust;
-/* Nonzero means stack pops must not be deferred, and deferred stack
- pops must not be output. It is nonzero inside a function call,
- inside a conditional expression, inside a statement expression,
- and in other cases as well. */
+/* Under some ABIs, it is the caller's responsibility to pop arguments
+ pushed for function calls. A naive implementation would simply pop
+ the arguments immediately after each call. However, if several
+ function calls are made in a row, it is typically cheaper to pop
+ all the arguments after all of the calls are complete since a
+ single pop instruction can be used. Therefore, GCC attempts to
+ defer popping the arguments until absolutely necessary. (For
+ example, at the end of a conditional, the arguments must be popped,
+ since code outside the conditional won't know whether or not the
+ arguments need to be popped.)
+
+ When INHIBIT_DEFER_POP is non-zero, however, the compiler does not
+ attempt to defer pops. Instead, the stack is popped immediately
+ after each call. Rather then setting this variable directly, use
+ NO_DEFER_POP and OK_DEFER_POP. */
int inhibit_defer_pop;
/* Nonzero means __builtin_saveregs has already been done in this function.