GCC Middle and Back End API Reference
expr_status Struct Reference

#include <function.h>

Collaboration diagram for expr_status:

Data Fields

int x_pending_stack_adjust
int x_inhibit_defer_pop
int x_stack_pointer_delta
rtx x_saveregs_value
rtx x_apply_args_value
rtx x_forced_labels

Field Documentation

rtx expr_status::x_apply_args_value
     Similarly for __builtin_apply_args.  
rtx expr_status::x_forced_labels
     List of labels that must never be deleted.  
int expr_status::x_inhibit_defer_pop
     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 nonzero, 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
int expr_status::x_pending_stack_adjust
     Number of units that we should eventually pop off the stack.
     These are the arguments to function calls that have already returned.  
rtx expr_status::x_saveregs_value
     Nonzero means __builtin_saveregs has already been done in this function.
     The value is the pseudoreg containing the value __builtin_saveregs
int expr_status::x_stack_pointer_delta
     If PREFERRED_STACK_BOUNDARY and PUSH_ROUNDING are defined, the stack
     boundary can be momentarily unaligned while pushing the arguments.
     Record the delta since last aligned boundary here in order to get
     stack alignment in the nested function calls working right.  

The documentation for this struct was generated from the following file: