X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ffunction.h;h=63c26ac58163d07d5a6867305e6adb7e99b0acdf;hb=c9db32f5526e45b333790bde9f0327c911f9d88d;hp=36640b8743bbb7edf779079e1273b7fe790c17b1;hpb=37a23433172eb7ea334fe7ad333fc7d948a2314c;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/function.h b/gcc/function.h index 36640b8743b..63c26ac5816 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -1,5 +1,5 @@ /* Structure for saving state for a nested function. - Copyright (C) 1989, 1992, 1993 Free Software Foundation, Inc. + Copyright (C) 1989, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -15,7 +15,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ #ifndef NULL_TREE @@ -26,12 +27,12 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif struct var_refs_queue - { - rtx modified; - enum machine_mode promoted_mode; - int unsignedp; - struct var_refs_queue *next; - }; +{ + rtx modified; + enum machine_mode promoted_mode; + int unsignedp; + struct var_refs_queue *next; +}; /* Stack of pending (incomplete) sequences saved by `start_sequence'. Each element describes one pending sequence. @@ -47,6 +48,14 @@ struct sequence_stack }; extern struct sequence_stack *sequence_stack; + +/* Stack of single obstacks. */ + +struct simple_obstack_stack +{ + struct obstack *obstack; + struct simple_obstack_stack *next; +}; /* This structure can save all the important global and static variables describing the status of the current function. */ @@ -61,18 +70,22 @@ struct function int pops_args; int returns_struct; int returns_pcc_struct; + int returns_pointer; int needs_context; int calls_setjmp; int calls_longjmp; int calls_alloca; int has_nonlocal_label; int has_nonlocal_goto; + int contains_functions; rtx nonlocal_goto_handler_slot; rtx nonlocal_goto_stack_level; tree nonlocal_labels; int args_size; int pretend_args_size; rtx arg_offset_rtx; + int varargs; + int stdarg; int max_parm_reg; rtx *parm_reg_stack_loc; int outgoing_args_size; @@ -82,7 +95,7 @@ struct function rtx save_expr_regs; rtx stack_slot_list; rtx parm_birth_insn; - int frame_offset; + HOST_WIDE_INT frame_offset; rtx tail_recursion_label; rtx tail_recursion_reentry; rtx internal_arg_pointer; @@ -97,6 +110,7 @@ struct function /* This slot is initialized as 0 and is added to during the nested function. */ struct var_refs_queue *fixup_var_refs_queue; + CUMULATIVE_ARGS args_info; /* For stmt.c */ struct nesting *block_stack; @@ -114,10 +128,19 @@ struct function int emit_lineno; struct goto_fixup *goto_fixup_chain; + /* For exception handling information. */ + struct eh_stack ehstack; + struct eh_queue ehqueue; + rtx catch_clauses; + struct label_node *false_label_stack; + struct label_node *caught_return_label_stack; + tree protect_list; + rtx dhc; + rtx dcc; + /* For expr.c. */ int pending_stack_adjust; int inhibit_defer_pop; - tree cleanups_this_call; rtx saveregs_value; rtx apply_args_value; rtx forced_labels; @@ -133,6 +156,7 @@ struct function int last_linenum; char *last_filename; char *regno_pointer_flag; + char *regno_pointer_align; int regno_pointer_flag_length; rtx *regno_reg_rtx; @@ -157,6 +181,7 @@ struct function struct obstack *expression_obstack; struct obstack *saveable_obstack; struct obstack *rtl_obstack; + struct simple_obstack_stack *inline_obstacks; /* For integrate.c. */ int uses_const_pool; @@ -200,12 +225,21 @@ extern struct function *outer_function_chain; the index of that block in the vector. */ extern tree *identify_blocks PROTO((tree, rtx)); +/* Return size needed for stack frame based on slots so far allocated. + This size counts from zero. It is not rounded to STACK_BOUNDARY; + the caller may have to do that. */ +extern HOST_WIDE_INT get_frame_size PROTO((void)); + /* These variables hold pointers to functions to save and restore machine-specific data, in push_function_context and pop_function_context. */ extern void (*save_machine_status) (); extern void (*restore_machine_status) (); +/* Save and restore varasm.c status for a nested function. */ +extern void save_varasm_status PROTO((struct function *)); +extern void restore_varasm_status PROTO((struct function *)); + #ifdef rtx #undef rtx #endif