/* Structure for saving state for a nested function.
- Copyright (C) 1989, 1992 Free Software Foundation, Inc.
+ Copyright (C) 1989, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
#ifndef NULL_TREE
#endif
struct var_refs_queue
- {
- rtx modified;
- enum machine_mode promoted_mode;
- int unsignedp;
- struct var_refs_queue *next;
- };
+{
+ rtx modified;
+ enum machine_mode promoted_mode;
+ int unsignedp;
+ struct var_refs_queue *next;
+};
/* Stack of pending (incomplete) sequences saved by `start_sequence'.
Each element describes one pending sequence.
{
/* First and last insns in the chain of the saved sequence. */
rtx first, last;
+ tree sequence_rtl_expr;
struct sequence_stack *next;
};
extern struct sequence_stack *sequence_stack;
+
+/* Stack of single obstacks. */
+
+struct simple_obstack_stack
+{
+ struct obstack *obstack;
+ struct simple_obstack_stack *next;
+};
\f
/* This structure can save all the important global and static variables
describing the status of the current function. */
int pops_args;
int returns_struct;
int returns_pcc_struct;
+ int returns_pointer;
int needs_context;
int calls_setjmp;
int calls_longjmp;
int calls_alloca;
int has_nonlocal_label;
+ int has_nonlocal_goto;
+ int contains_functions;
rtx nonlocal_goto_handler_slot;
rtx nonlocal_goto_stack_level;
tree nonlocal_labels;
int args_size;
int pretend_args_size;
rtx arg_offset_rtx;
+ int varargs;
+ int stdarg;
int max_parm_reg;
rtx *parm_reg_stack_loc;
int outgoing_args_size;
rtx save_expr_regs;
rtx stack_slot_list;
rtx parm_birth_insn;
- int frame_offset;
+ HOST_WIDE_INT frame_offset;
rtx tail_recursion_label;
rtx tail_recursion_reentry;
rtx internal_arg_pointer;
/* This slot is initialized as 0 and is added to
during the nested function. */
struct var_refs_queue *fixup_var_refs_queue;
+ CUMULATIVE_ARGS args_info;
/* For stmt.c */
struct nesting *block_stack;
int emit_lineno;
struct goto_fixup *goto_fixup_chain;
+ /* For exception handling information. */
+ struct eh_stack ehstack;
+ struct eh_queue ehqueue;
+ rtx catch_clauses;
+ struct label_node *false_label_stack;
+ struct label_node *caught_return_label_stack;
+ tree protect_list;
+ rtx dhc;
+ rtx dcc;
+
/* For expr.c. */
int pending_stack_adjust;
int inhibit_defer_pop;
- tree cleanups_this_call;
rtx saveregs_value;
rtx apply_args_value;
rtx forced_labels;
int first_label_num;
rtx first_insn;
rtx last_insn;
+ tree sequence_rtl_expr;
struct sequence_stack *sequence_stack;
int cur_insn_uid;
int last_linenum;
char *last_filename;
char *regno_pointer_flag;
+ char *regno_pointer_align;
int regno_pointer_flag_length;
rtx *regno_reg_rtx;
char *maybepermanent_firstobj;
char *temporary_firstobj;
char *momentary_firstobj;
+ char *momentary_function_firstobj;
struct obstack *current_obstack;
struct obstack *function_obstack;
struct obstack *function_maybepermanent_obstack;
struct obstack *expression_obstack;
struct obstack *saveable_obstack;
struct obstack *rtl_obstack;
+ struct simple_obstack_stack *inline_obstacks;
/* For integrate.c. */
int uses_const_pool;
/* For md files. */
int uses_pic_offset_table;
+ /* tm.h can use this to store whatever it likes. */
+ struct machine_function *machine;
/* For reorg. */
rtx epilogue_delay_list;
/* Put all this function's BLOCK nodes into a vector and return it.
Also store in each NOTE for the beginning or end of a block
the index of that block in the vector. */
-tree *identify_blocks PROTO((tree, rtx));
+extern tree *identify_blocks PROTO((tree, rtx));
+
+/* Return size needed for stack frame based on slots so far allocated.
+ This size counts from zero. It is not rounded to STACK_BOUNDARY;
+ the caller may have to do that. */
+extern HOST_WIDE_INT get_frame_size PROTO((void));
+
+/* These variables hold pointers to functions to
+ save and restore machine-specific data,
+ in push_function_context and pop_function_context. */
+extern void (*save_machine_status) ();
+extern void (*restore_machine_status) ();
+
+/* Save and restore varasm.c status for a nested function. */
+extern void save_varasm_status PROTO((struct function *));
+extern void restore_varasm_status PROTO((struct function *));
#ifdef rtx
#undef rtx