|
|
1.1 ! root 1: /* Structure for saving state for a nested function. ! 2: Copyright (C) 1989, 1992, 1993 Free Software Foundation, Inc. ! 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; ! 31: enum machine_mode promoted_mode; ! 32: int unsignedp; ! 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: tree sequence_rtl_expr; ! 46: struct sequence_stack *next; ! 47: }; ! 48: ! 49: extern struct sequence_stack *sequence_stack; ! 50: ! 51: /* This structure can save all the important global and static variables ! 52: describing the status of the current function. */ ! 53: ! 54: struct function ! 55: { ! 56: struct function *next; ! 57: ! 58: /* For function.c. */ ! 59: char *name; ! 60: tree decl; ! 61: int pops_args; ! 62: int returns_struct; ! 63: int returns_pcc_struct; ! 64: int needs_context; ! 65: int calls_setjmp; ! 66: int calls_longjmp; ! 67: int calls_alloca; ! 68: int has_nonlocal_label; ! 69: int has_nonlocal_goto; ! 70: rtx nonlocal_goto_handler_slot; ! 71: rtx nonlocal_goto_stack_level; ! 72: tree nonlocal_labels; ! 73: int args_size; ! 74: int pretend_args_size; ! 75: rtx arg_offset_rtx; ! 76: int max_parm_reg; ! 77: rtx *parm_reg_stack_loc; ! 78: int outgoing_args_size; ! 79: rtx return_rtx; ! 80: rtx cleanup_label; ! 81: rtx return_label; ! 82: rtx save_expr_regs; ! 83: rtx stack_slot_list; ! 84: rtx parm_birth_insn; ! 85: int frame_offset; ! 86: rtx tail_recursion_label; ! 87: rtx tail_recursion_reentry; ! 88: rtx internal_arg_pointer; ! 89: rtx arg_pointer_save_area; ! 90: tree rtl_expr_chain; ! 91: rtx last_parm_insn; ! 92: tree context_display; ! 93: tree trampoline_list; ! 94: int function_call_count; ! 95: struct temp_slot *temp_slots; ! 96: int temp_slot_level; ! 97: /* This slot is initialized as 0 and is added to ! 98: during the nested function. */ ! 99: struct var_refs_queue *fixup_var_refs_queue; ! 100: ! 101: /* For stmt.c */ ! 102: struct nesting *block_stack; ! 103: struct nesting *stack_block_stack; ! 104: struct nesting *cond_stack; ! 105: struct nesting *loop_stack; ! 106: struct nesting *case_stack; ! 107: struct nesting *nesting_stack; ! 108: int nesting_depth; ! 109: int block_start_count; ! 110: tree last_expr_type; ! 111: rtx last_expr_value; ! 112: int expr_stmts_for_value; ! 113: char *emit_filename; ! 114: int emit_lineno; ! 115: struct goto_fixup *goto_fixup_chain; ! 116: ! 117: /* For expr.c. */ ! 118: int pending_stack_adjust; ! 119: int inhibit_defer_pop; ! 120: tree cleanups_this_call; ! 121: rtx saveregs_value; ! 122: rtx apply_args_value; ! 123: rtx forced_labels; ! 124: ! 125: /* For emit-rtl.c. */ ! 126: int reg_rtx_no; ! 127: int first_label_num; ! 128: rtx first_insn; ! 129: rtx last_insn; ! 130: tree sequence_rtl_expr; ! 131: struct sequence_stack *sequence_stack; ! 132: int cur_insn_uid; ! 133: int last_linenum; ! 134: char *last_filename; ! 135: char *regno_pointer_flag; ! 136: int regno_pointer_flag_length; ! 137: rtx *regno_reg_rtx; ! 138: ! 139: /* For stor-layout.c. */ ! 140: tree permanent_type_chain; ! 141: tree temporary_type_chain; ! 142: tree permanent_type_end; ! 143: tree temporary_type_end; ! 144: tree pending_sizes; ! 145: int immediate_size_expand; ! 146: ! 147: /* For tree.c. */ ! 148: int all_types_permanent; ! 149: struct momentary_level *momentary_stack; ! 150: char *maybepermanent_firstobj; ! 151: char *temporary_firstobj; ! 152: char *momentary_firstobj; ! 153: struct obstack *current_obstack; ! 154: struct obstack *function_obstack; ! 155: struct obstack *function_maybepermanent_obstack; ! 156: struct obstack *expression_obstack; ! 157: struct obstack *saveable_obstack; ! 158: struct obstack *rtl_obstack; ! 159: ! 160: /* For integrate.c. */ ! 161: int uses_const_pool; ! 162: ! 163: /* For md files. */ ! 164: int uses_pic_offset_table; ! 165: /* tm.h can use this to store whatever it likes. */ ! 166: struct machine_function *machine; ! 167: ! 168: /* For reorg. */ ! 169: rtx epilogue_delay_list; ! 170: ! 171: /* For varasm. */ ! 172: struct constant_descriptor **const_rtx_hash_table; ! 173: struct pool_sym **const_rtx_sym_hash_table; ! 174: struct pool_constant *first_pool, *last_pool; ! 175: int pool_offset; ! 176: }; ! 177: ! 178: /* The FUNCTION_DECL for an inline function currently being expanded. */ ! 179: extern tree inline_function_decl; ! 180: ! 181: /* Label that will go on function epilogue. ! 182: Jumping to this label serves as a "return" instruction ! 183: on machines which require execution of the epilogue on all returns. */ ! 184: extern rtx return_label; ! 185: ! 186: /* List (chain of EXPR_LISTs) of all stack slots in this function. ! 187: Made for the sake of unshare_all_rtl. */ ! 188: extern rtx stack_slot_list; ! 189: ! 190: /* Given a function decl for a containing function, ! 191: return the `struct function' for it. */ ! 192: struct function *find_function_data PROTO((tree)); ! 193: ! 194: /* Pointer to chain of `struct function' for containing functions. */ ! 195: extern struct function *outer_function_chain; ! 196: ! 197: /* Put all this function's BLOCK nodes into a vector and return it. ! 198: Also store in each NOTE for the beginning or end of a block ! 199: the index of that block in the vector. */ ! 200: extern tree *identify_blocks PROTO((tree, rtx)); ! 201: ! 202: /* These variables hold pointers to functions to ! 203: save and restore machine-specific data, ! 204: in push_function_context and pop_function_context. */ ! 205: extern void (*save_machine_status) (); ! 206: extern void (*restore_machine_status) (); ! 207: ! 208: #ifdef rtx ! 209: #undef rtx ! 210: #endif ! 211: ! 212: #ifdef tree ! 213: #undef tree ! 214: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.