|
|
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.2 root 120: rtx forced_labels; 1.1 root 121: 122: /* For emit-rtl.c. */ 123: int reg_rtx_no; 124: int first_label_num; 125: rtx first_insn; 126: rtx last_insn; 127: struct sequence_stack *sequence_stack; 128: int cur_insn_uid; 129: int last_linenum; 130: char *last_filename; 131: char *regno_pointer_flag; 132: int regno_pointer_flag_length; 133: rtx *regno_reg_rtx; 134: 135: /* For stor-layout.c. */ 136: tree permanent_type_chain; 137: tree temporary_type_chain; 138: tree permanent_type_end; 139: tree temporary_type_end; 140: tree pending_sizes; 141: int immediate_size_expand; 142: 143: /* For tree.c. */ 144: int all_types_permanent; 145: struct momentary_level *momentary_stack; 146: char *maybepermanent_firstobj; 147: char *temporary_firstobj; 148: char *momentary_firstobj; 149: struct obstack *current_obstack; 150: struct obstack *function_obstack; 151: struct obstack *function_maybepermanent_obstack; 152: struct obstack *expression_obstack; 153: struct obstack *saveable_obstack; 154: struct obstack *rtl_obstack; 155: 156: /* For integrate.c. */ 157: int uses_const_pool; 158: 159: /* For md files. */ 160: int uses_pic_offset_table; 1.1.1.3 ! root 161: ! 162: /* For reorg. */ ! 163: rtx epilogue_delay_list; ! 164: ! 165: /* For varasm. */ ! 166: struct constant_descriptor **const_rtx_hash_table; ! 167: struct pool_sym **const_rtx_sym_hash_table; ! 168: struct pool_constant *first_pool, *last_pool; ! 169: int pool_offset; 1.1 root 170: }; 171: 172: /* The FUNCTION_DECL for an inline function currently being expanded. */ 173: extern tree inline_function_decl; 174: 175: /* Label that will go on function epilogue. 176: Jumping to this label serves as a "return" instruction 177: on machines which require execution of the epilogue on all returns. */ 178: extern rtx return_label; 179: 180: /* List (chain of EXPR_LISTs) of all stack slots in this function. 181: Made for the sake of unshare_all_rtl. */ 182: extern rtx stack_slot_list; 183: 1.1.1.3 ! root 184: /* Given a function decl for a containing function, ! 185: return the `struct function' for it. */ ! 186: struct function *find_function_data (); ! 187: ! 188: /* Pointer to chain of `struct function' for containing functions. */ ! 189: extern struct function *outer_function_chain; ! 190: ! 191: /* Put all this function's BLOCK nodes into a vector and return it. ! 192: Also store in each NOTE for the beginning or end of a block ! 193: the index of that block in the vector. */ ! 194: tree *identify_blocks (); ! 195: 1.1 root 196: #ifdef rtx 197: #undef rtx 198: #endif 199: 200: #ifdef tree 201: #undef tree 202: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.