OSDN Git Service

* .gdbinit: Rename to gdbinit.in.
[pf3gnuchains/gcc-fork.git] / gcc / function.h
index 9ede7a7..c0aa0db 100644 (file)
@@ -95,23 +95,21 @@ struct emit_status
   /* Line number and source file of the last line-number NOTE emitted.
      This is used to avoid generating duplicates.  */
   int x_last_linenum;
-  char *x_last_filename;
+  const char *x_last_filename;
 
-  /* A vector indexed by pseudo reg number.  The allocated length
-     of this vector is regno_pointer_flag_length.  Since this
-     vector is needed during the expansion phase when the total
-     number of registers in the function is not yet known,
-     it is copied and made bigger when necessary.  */
-  char *regno_pointer_flag;
-  int regno_pointer_flag_length;
+  /* The length of the regno_pointer_align and x_regno_reg_rtx vectors.
+     Since these vectors are needed during the expansion phase when
+     the total number of registers in the function is not yet known,
+     the vectors are copied and made bigger when necessary.  */
+  int regno_pointer_align_length;
 
   /* Indexed by pseudo register number, if nonzero gives the known alignment
-     for that pseudo (if regno_pointer_flag is set).
-     Allocated in parallel with regno_pointer_flag.  */
-  char *regno_pointer_align;
+     for that pseudo (if REG_POINTER is set in x_regno_reg_rtx).
+     Allocated in parallel with x_regno_reg_rtx.  */
+  unsigned char *regno_pointer_align;
 
   /* Indexed by pseudo register number, gives the rtx for that pseudo.
-     Allocated in parallel with regno_pointer_flag.  */
+     Allocated in parallel with regno_pointer_align.  */
   rtx *x_regno_reg_rtx;
 };
 
@@ -122,7 +120,6 @@ struct emit_status
 #define seq_stack (cfun->emit->sequence_stack)
 
 #define REGNO_POINTER_ALIGN(REGNO) (cfun->emit->regno_pointer_align[REGNO])
-#define REGNO_POINTER_FLAG(REGNO) (cfun->emit->regno_pointer_flag[REGNO])
 
 struct expr_status
 {
@@ -130,10 +127,6 @@ struct expr_status
      These are the arguments to function calls that have already returned.  */
   int x_pending_stack_adjust;
 
-  /* Number of units that we should eventually pop off the stack.
-     These are the arguments to function calls that have not happened yet.  */
-  int x_arg_space_so_far;
-
   /* Under some ABIs, it is the caller's responsibility to pop arguments
      pushed for function calls.  A naive implementation would simply pop
      the arguments immediately after each call.  However, if several
@@ -151,6 +144,12 @@ struct expr_status
      NO_DEFER_POP and OK_DEFER_POP.  */
   int x_inhibit_defer_pop;
 
+  /* If PREFERRED_STACK_BOUNDARY and PUSH_ROUNDING are defined, the stack
+     boundary can be momentairly unaligned while pushing the arguments.
+     Record the delta since last aligned boundary here in order to get
+     stack alignment in the nested function calls working right.  */
+  int x_stack_pointer_delta;
+
   /* Nonzero means __builtin_saveregs has already been done in this function.
      The value is the pseudoreg containing the value __builtin_saveregs
      returned.  */
@@ -167,12 +166,12 @@ struct expr_status
 };
 
 #define pending_stack_adjust (cfun->expr->x_pending_stack_adjust)
-#define arg_space_so_far (cfun->expr->x_arg_space_so_far)
 #define inhibit_defer_pop (cfun->expr->x_inhibit_defer_pop)
 #define saveregs_value (cfun->expr->x_saveregs_value)
 #define apply_args_value (cfun->expr->x_apply_args_value)
 #define forced_labels (cfun->expr->x_forced_labels)
 #define pending_chain (cfun->expr->x_pending_chain)
+#define stack_pointer_delta (cfun->expr->x_stack_pointer_delta)
 
 /* This structure can save all the important global and static variables
    describing the status of the current function.  */
@@ -303,7 +302,7 @@ struct function
 
   /* Nonzero if this function is being processed in function-at-a-time
      mode.  In other words, if all tree structure for this function,
-     including the BLOCK tree is created, before RTL generation
+     including the BLOCK tree, is created before RTL generation
      commences.  */
   int x_whole_function_mode_p;
 
@@ -371,6 +370,11 @@ struct function
      needed by inner routines.  */
   rtx x_arg_pointer_save_area;
 
+  /* If the function returns non-void, we will emit a clobber of the
+     return registers just in case the user fell off the end without
+     returning a proper value.  This is that insn.  */
+  rtx x_clobber_return_insn;
+
   /* Offset to end of allocated area of stack frame.
      If stack grows down, this is the address of the last stack slot allocated.
      If stack grows up, this is the address for the next slot.  */
@@ -399,7 +403,7 @@ struct function
 
   /* 1 + last pseudo register number possibly used for loading a copy
      of a parameter of this function. */
-  int x_max_parm_reg;
+  unsigned int x_max_parm_reg;
 
   /* Vector indexed by REGNO, containing location on stack in which
      to put the parm which is nominally in pseudo register REGNO,
@@ -426,22 +430,9 @@ struct function
      during the nested function.  */
   struct var_refs_queue *fixup_var_refs_queue;
 
-  /* For tree.c.  */
-  int all_types_permanent;
-  struct momentary_level *momentary_stack;
-  char *maybepermanent_firstobj;
-  char *temporary_firstobj;
-  char *momentary_firstobj;
-  char *momentary_function_firstobj;
-  struct obstack *current_obstack;
-  struct obstack *function_obstack;
-  struct obstack *function_maybepermanent_obstack;
-  struct obstack *expression_obstack;
-  struct obstack *saveable_obstack;
-  struct obstack *rtl_obstack;
-
   /* For integrate.c.  */
   int inlinable;
+  int no_debugging_symbols;
   /* This is in fact an rtvec.  */
   void *original_arg_vector;
   tree original_decl_initial;
@@ -548,10 +539,12 @@ struct function *find_function_data PARAMS ((tree));
 /* Pointer to chain of `struct function' for containing functions.  */
 extern struct function *outer_function_chain;
 
-/* Put all this function's BLOCK nodes into a vector and return it.
-   Also store in each NOTE for the beginning or end of a block
-   the index of that block in the vector.  */
-extern void identify_blocks PARAMS ((tree, rtx));
+/* Set NOTE_BLOCK for each block note in the current function.  */
+extern void identify_blocks PARAMS ((void));
+
+/* Identify BLOCKs referenced by more than one NOTE_INSN_BLOCK_{BEG,END},
+   and create duplicate blocks.  */
+extern void reorder_blocks PARAMS ((void));
 
 /* Set BLOCK_NUMBER for all the blocks in FN.  */
 extern void number_blocks PARAMS ((tree));
@@ -563,14 +556,14 @@ extern HOST_WIDE_INT get_frame_size       PARAMS ((void));
 /* Likewise, but for a different than the current function.  */
 extern HOST_WIDE_INT get_func_frame_size       PARAMS ((struct function *));
 
-/* These variables hold pointers to functions to
-   save and restore machine-specific data,
-   in push_function_context and pop_function_context.  */
+/* These variables hold pointers to functions to create and destroy
+   target specific, per-function data structures.  */
 extern void (*init_machine_status)     PARAMS ((struct function *));
-extern void (*mark_machine_status)     PARAMS ((struct function *));
-extern void (*save_machine_status)     PARAMS ((struct function *));
-extern void (*restore_machine_status)  PARAMS ((struct function *));
 extern void (*free_machine_status)     PARAMS ((struct function *));
+/* This variable holds a pointer to a function to register any
+   data items in the target specific, per-function data structure
+   that will need garbage collection.  */
+extern void (*mark_machine_status)     PARAMS ((struct function *));
 
 /* Likewise, but for language-specific data.  */
 extern void (*init_lang_status)         PARAMS ((struct function *));
@@ -580,8 +573,6 @@ extern void (*restore_lang_status)  PARAMS ((struct function *));
 extern void (*free_lang_status)         PARAMS ((struct function *));
 
 /* Save and restore status information for a nested function.  */
-extern void save_tree_status           PARAMS ((struct function *));
-extern void restore_tree_status                PARAMS ((struct function *));
 extern void restore_emit_status                PARAMS ((struct function *));
 extern void free_after_parsing         PARAMS ((struct function *));
 extern void free_after_compilation     PARAMS ((struct function *));