diff options
author | Mark Mitchell <mark@codesourcery.com> | 1999-04-29 23:01:29 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-04-29 23:01:29 +0000 |
commit | 5c7a310f81ad5609a1830d4d156ef90f3a35d764 (patch) | |
tree | 556b4266f6a4292a1085b6bcb6c75790cd0cf08f /gcc/expr.h | |
parent | 1a6580ec80d9c0dba5970a7541162faffb48a613 (diff) | |
download | gcc-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.h')
-rw-r--r-- | gcc/expr.h | 30 |
1 files changed, 23 insertions, 7 deletions
@@ -95,12 +95,31 @@ extern rtx current_function_internal_arg_pointer; function. */ extern int current_function_check_memory_usage; -/* 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. */ extern int inhibit_defer_pop; +/* Prevent the compiler from deferring stack pops. See + inhibit_defer_pop for more information. */ +#define NO_DEFER_POP (inhibit_defer_pop += 1) + +/* Allow the compiler to defer stack pops. See inhibit_defer_pop for + more information. */ +#define OK_DEFER_POP (inhibit_defer_pop -= 1) + /* Number of function calls seen so far in current function. */ extern int function_call_count; @@ -126,9 +145,6 @@ extern rtx nonlocal_goto_stack_level; extern tree nonlocal_labels; #endif -#define NO_DEFER_POP (inhibit_defer_pop += 1) -#define OK_DEFER_POP (inhibit_defer_pop -= 1) - /* Number of units that we should eventually pop off the stack. These are the arguments to function calls that have already returned. */ extern int pending_stack_adjust; |