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