source: trunk/third/gcc/function.h @ 8834

Revision 8834, 6.2 KB checked in by ghudson, 28 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r8833, which included commits to RCS files with non-trunk default branches.
Line 
1/* Structure for saving state for a nested function.
2   Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3
4This file is part of GNU CC.
5
6GNU CC is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2, or (at your option)
9any later version.
10
11GNU CC is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU CC; see the file COPYING.  If not, write to
18the Free Software Foundation, 59 Temple Place - Suite 330,
19Boston, MA 02111-1307, USA.  */
20
21
22#ifndef NULL_TREE
23#define tree int *
24#endif
25#ifndef GET_CODE
26#define rtx int *
27#endif
28
29struct var_refs_queue
30{
31  rtx modified;
32  enum machine_mode promoted_mode;
33  int unsignedp;
34  struct var_refs_queue *next;
35};
36
37/* Stack of pending (incomplete) sequences saved by `start_sequence'.
38   Each element describes one pending sequence.
39   The main insn-chain is saved in the last element of the chain,
40   unless the chain is empty.  */
41
42struct sequence_stack
43{
44  /* First and last insns in the chain of the saved sequence.  */
45  rtx first, last;
46  tree sequence_rtl_expr;
47  struct sequence_stack *next;
48};
49
50extern struct sequence_stack *sequence_stack;
51
52/* Stack of single obstacks.  */
53
54struct simple_obstack_stack
55{
56  struct obstack *obstack;
57  struct simple_obstack_stack *next;
58};
59
60/* This structure can save all the important global and static variables
61   describing the status of the current function.  */
62
63struct function
64{
65  struct function *next;
66
67  /* For function.c.  */
68  char *name;
69  tree decl;
70  int pops_args;
71  int returns_struct;
72  int returns_pcc_struct;
73  int needs_context;
74  int calls_setjmp;
75  int calls_longjmp;
76  int calls_alloca;
77  int has_nonlocal_label;
78  int has_nonlocal_goto;
79  int contains_functions;
80  rtx nonlocal_goto_handler_slot;
81  rtx nonlocal_goto_stack_level;
82  tree nonlocal_labels;
83  int args_size;
84  int pretend_args_size;
85  rtx arg_offset_rtx;
86  int varargs;
87  int stdarg;
88  int max_parm_reg;
89  rtx *parm_reg_stack_loc;
90  int outgoing_args_size;
91  rtx return_rtx;
92  rtx cleanup_label;
93  rtx return_label;
94  rtx save_expr_regs;
95  rtx stack_slot_list;
96  rtx parm_birth_insn;
97  int frame_offset;
98  rtx tail_recursion_label;
99  rtx tail_recursion_reentry;
100  rtx internal_arg_pointer;
101  rtx arg_pointer_save_area;
102  tree rtl_expr_chain;
103  rtx last_parm_insn;
104  tree context_display;
105  tree trampoline_list;
106  int function_call_count;
107  struct temp_slot *temp_slots;
108  int temp_slot_level;
109  /* This slot is initialized as 0 and is added to
110     during the nested function.  */
111  struct var_refs_queue *fixup_var_refs_queue;
112
113  /* For stmt.c  */
114  struct nesting *block_stack;
115  struct nesting *stack_block_stack;
116  struct nesting *cond_stack;
117  struct nesting *loop_stack;
118  struct nesting *case_stack;
119  struct nesting *nesting_stack;
120  int nesting_depth;
121  int block_start_count;
122  tree last_expr_type;
123  rtx last_expr_value;
124  int expr_stmts_for_value;
125  char *emit_filename;
126  int emit_lineno;
127  struct goto_fixup *goto_fixup_chain;
128
129  /* For expr.c.  */
130  int pending_stack_adjust;
131  int inhibit_defer_pop;
132  tree cleanups_this_call;
133  rtx saveregs_value;
134  rtx apply_args_value;
135  rtx forced_labels;
136
137  /* For emit-rtl.c.  */
138  int reg_rtx_no;
139  int first_label_num;
140  rtx first_insn;
141  rtx last_insn;
142  tree sequence_rtl_expr;
143  struct sequence_stack *sequence_stack;
144  int cur_insn_uid;
145  int last_linenum;
146  char *last_filename;
147  char *regno_pointer_flag;
148  int regno_pointer_flag_length;
149  rtx *regno_reg_rtx;
150
151  /* For stor-layout.c.  */
152  tree permanent_type_chain;
153  tree temporary_type_chain;
154  tree permanent_type_end;
155  tree temporary_type_end;
156  tree pending_sizes;
157  int immediate_size_expand;
158
159  /* For tree.c.  */
160  int all_types_permanent;
161  struct momentary_level *momentary_stack;
162  char *maybepermanent_firstobj;
163  char *temporary_firstobj;
164  char *momentary_firstobj;
165  char *momentary_function_firstobj;
166  struct obstack *current_obstack;
167  struct obstack *function_obstack;
168  struct obstack *function_maybepermanent_obstack;
169  struct obstack *expression_obstack;
170  struct obstack *saveable_obstack;
171  struct obstack *rtl_obstack;
172  struct simple_obstack_stack *inline_obstacks;
173
174  /* For integrate.c.  */
175  int uses_const_pool;
176
177  /* For md files.  */
178  int uses_pic_offset_table;
179  /* tm.h can use this to store whatever it likes.  */
180  struct machine_function *machine;
181
182  /* For reorg.  */
183  rtx epilogue_delay_list;
184
185  /* For varasm.  */
186  struct constant_descriptor **const_rtx_hash_table;
187  struct pool_sym **const_rtx_sym_hash_table;
188  struct pool_constant *first_pool, *last_pool;
189  int pool_offset;
190};
191
192/* The FUNCTION_DECL for an inline function currently being expanded.  */
193extern tree inline_function_decl;
194
195/* Label that will go on function epilogue.
196   Jumping to this label serves as a "return" instruction
197   on machines which require execution of the epilogue on all returns.  */
198extern rtx return_label;
199
200/* List (chain of EXPR_LISTs) of all stack slots in this function.
201   Made for the sake of unshare_all_rtl.  */
202extern rtx stack_slot_list;
203
204/* Given a function decl for a containing function,
205   return the `struct function' for it.  */
206struct function *find_function_data PROTO((tree));
207
208/* Pointer to chain of `struct function' for containing functions.  */
209extern struct function *outer_function_chain;
210
211/* Put all this function's BLOCK nodes into a vector and return it.
212   Also store in each NOTE for the beginning or end of a block
213   the index of that block in the vector.  */
214extern tree *identify_blocks PROTO((tree, rtx));
215
216/* These variables hold pointers to functions to
217   save and restore machine-specific data,
218   in push_function_context and pop_function_context.  */
219extern void (*save_machine_status) ();
220extern void (*restore_machine_status) ();
221
222/* Save and restore varasm.c status for a nested function.  */
223extern void save_varasm_status          PROTO((struct function *));
224extern void restore_varasm_status       PROTO((struct function *));
225
226#ifdef rtx
227#undef rtx
228#endif
229
230#ifdef tree
231#undef tree
232#endif
Note: See TracBrowser for help on using the repository browser.