|
|
1.1 root 1: /* Structure for saving state for a nested function. 1.1.1.7 ! root 2: Copyright (C) 1989, 1992, 1993, 1994, 1995 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 1.1.1.7 ! root 18: the Free Software Foundation, 59 Temple Place - Suite 330, ! 19: Boston, MA 02111-1307, USA. */ 1.1 root 20: 21: 22: #ifndef NULL_TREE 23: #define tree int * 24: #endif 25: #ifndef GET_CODE 26: #define rtx int * 27: #endif 28: 29: struct var_refs_queue 1.1.1.7 ! root 30: { ! 31: rtx modified; ! 32: enum machine_mode promoted_mode; ! 33: int unsignedp; ! 34: struct var_refs_queue *next; ! 35: }; 1.1 root 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: 42: struct sequence_stack 43: { 44: /* First and last insns in the chain of the saved sequence. */ 45: rtx first, last; 1.1.1.5 root 46: tree sequence_rtl_expr; 1.1 root 47: struct sequence_stack *next; 48: }; 49: 50: extern struct sequence_stack *sequence_stack; 1.1.1.7 ! root 51: ! 52: /* Stack of single obstacks. */ ! 53: ! 54: struct simple_obstack_stack ! 55: { ! 56: struct obstack *obstack; ! 57: struct simple_obstack_stack *next; ! 58: }; 1.1 root 59: 60: /* This structure can save all the important global and static variables 61: describing the status of the current function. */ 62: 63: struct 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; 1.1.1.5 root 78: int has_nonlocal_goto; 1.1.1.7 ! root 79: int contains_functions; 1.1 root 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; 1.1.1.6 root 86: int varargs; 1.1.1.7 ! root 87: int stdarg; 1.1 root 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; 1.1.1.4 root 134: rtx apply_args_value; 1.1.1.2 root 135: rtx forced_labels; 1.1 root 136: 137: /* For emit-rtl.c. */ 138: int reg_rtx_no; 139: int first_label_num; 140: rtx first_insn; 141: rtx last_insn; 1.1.1.5 root 142: tree sequence_rtl_expr; 1.1 root 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; 1.1.1.6 root 165: char *momentary_function_firstobj; 1.1 root 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; 1.1.1.7 ! root 172: struct simple_obstack_stack *inline_obstacks; 1.1 root 173: 174: /* For integrate.c. */ 175: int uses_const_pool; 176: 177: /* For md files. */ 178: int uses_pic_offset_table; 1.1.1.5 root 179: /* tm.h can use this to store whatever it likes. */ 180: struct machine_function *machine; 1.1.1.3 root 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; 1.1 root 190: }; 191: 192: /* The FUNCTION_DECL for an inline function currently being expanded. */ 193: extern 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. */ 198: extern 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. */ 202: extern rtx stack_slot_list; 203: 1.1.1.3 root 204: /* Given a function decl for a containing function, 205: return the `struct function' for it. */ 1.1.1.4 root 206: struct function *find_function_data PROTO((tree)); 1.1.1.3 root 207: 208: /* Pointer to chain of `struct function' for containing functions. */ 209: extern 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. */ 1.1.1.5 root 214: extern 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. */ 219: extern void (*save_machine_status) (); 220: extern void (*restore_machine_status) (); 1.1.1.3 root 221: 1.1.1.7 ! root 222: /* Save and restore varasm.c status for a nested function. */ ! 223: extern void save_varasm_status PROTO((struct function *)); ! 224: extern void restore_varasm_status PROTO((struct function *)); ! 225: 1.1 root 226: #ifdef rtx 227: #undef rtx 228: #endif 229: 230: #ifdef tree 231: #undef tree 232: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.