Annotation of gcc/function.h, revision 1.1.1.7

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.