From bcbaaba1a33590a2795a9e49228943466e360315 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 12 Jul 2010 18:54:17 +0000 Subject: [PATCH] defaults.h (MAX_MOVE_MAX, [...]): Define if not defined. gcc/ * defaults.h (MAX_MOVE_MAX, MIN_UNITS_PER_WORD): Define if not defined. * libgcc2.c (MIN_UNITS_PER_WORD): Delete. * hard-reg-set.h (target_hard_regs): Add x_no_caller_save_reg_set. (no_caller_save_reg_set): Redefine as a macro. * reload.h (target_reload): Add x_caller_save_initialized_p and x_regno_save_mode. (caller_save_initialized_p): Redefine as a macro. * caller-save.c (caller_save_initialized_p, no_caller_save_reg_set) (MAX_MOVE_MAX, MIN_UNITS_PER_WORD): Delete. (regno_save_mode): Redefine as a macro. From-SVN: r162095 --- gcc/ChangeLog | 13 +++++++++++++ gcc/caller-save.c | 24 ++---------------------- gcc/defaults.h | 8 ++++++++ gcc/hard-reg-set.h | 11 ++++++----- gcc/libgcc2.c | 4 ---- gcc/reload.h | 16 +++++++++++++--- 6 files changed, 42 insertions(+), 34 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 278ee112059..f9460379e64 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2010-07-12 Richard Sandiford + + * defaults.h (MAX_MOVE_MAX, MIN_UNITS_PER_WORD): Define if not defined. + * libgcc2.c (MIN_UNITS_PER_WORD): Delete. + * hard-reg-set.h (target_hard_regs): Add x_no_caller_save_reg_set. + (no_caller_save_reg_set): Redefine as a macro. + * reload.h (target_reload): Add x_caller_save_initialized_p and + x_regno_save_mode. + (caller_save_initialized_p): Redefine as a macro. + * caller-save.c (caller_save_initialized_p, no_caller_save_reg_set) + (MAX_MOVE_MAX, MIN_UNITS_PER_WORD): Delete. + (regno_save_mode): Redefine as a macro. + 2010-07-12 Richard Sandiford * Makefile.in (expmed.o, target-globals.o): Depend on expmed.h. diff --git a/gcc/caller-save.c b/gcc/caller-save.c index 996bb9ba529..3bd41f244c9 100644 --- a/gcc/caller-save.c +++ b/gcc/caller-save.c @@ -41,30 +41,10 @@ along with GCC; see the file COPYING3. If not see #include "output.h" #include "ggc.h" -/* True if caller-save has been initialized. */ -bool caller_save_initialized_p; - -/* Call used hard registers which can not be saved because there is no - insn for this. */ -HARD_REG_SET no_caller_save_reg_set; - -#ifndef MAX_MOVE_MAX -#define MAX_MOVE_MAX MOVE_MAX -#endif - -#ifndef MIN_UNITS_PER_WORD -#define MIN_UNITS_PER_WORD UNITS_PER_WORD -#endif - #define MOVE_MAX_WORDS (MOVE_MAX / UNITS_PER_WORD) -/* Modes for each hard register that we can save. The smallest mode is wide - enough to save the entire contents of the register. When saving the - register because it is live we first try to save in multi-register modes. - If that is not possible the save is done one register at a time. */ - -static enum machine_mode - regno_save_mode[FIRST_PSEUDO_REGISTER][MAX_MOVE_MAX / MIN_UNITS_PER_WORD + 1]; +#define regno_save_mode \ + (this_target_reload->x_regno_save_mode) /* For each hard register, a place on the stack where it can be saved, if needed. */ diff --git a/gcc/defaults.h b/gcc/defaults.h index 5d56c7559fb..336f386edf0 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -1025,6 +1025,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define MOVE_MAX_PIECES MOVE_MAX #endif +#ifndef MAX_MOVE_MAX +#define MAX_MOVE_MAX MOVE_MAX +#endif + +#ifndef MIN_UNITS_PER_WORD +#define MIN_UNITS_PER_WORD UNITS_PER_WORD +#endif + #ifndef STACK_POINTER_OFFSET #define STACK_POINTER_OFFSET 0 #endif diff --git a/gcc/hard-reg-set.h b/gcc/hard-reg-set.h index c0379b3bea7..486a88a2ed8 100644 --- a/gcc/hard-reg-set.h +++ b/gcc/hard-reg-set.h @@ -582,11 +582,6 @@ hard_reg_set_iter_next (hard_reg_set_iterator *iter, unsigned *regno) extern char global_regs[FIRST_PSEUDO_REGISTER]; -/* Call used hard registers which can not be saved because there is no - insn for this. */ - -extern HARD_REG_SET no_caller_save_reg_set; - struct target_hard_regs { /* Indexed by hard register number, contains 1 for registers that are fixed use (stack pointer, pc, frame pointer, etc.;. @@ -622,6 +617,10 @@ struct target_hard_regs { with the local stack frame are safe, but scant others. */ HARD_REG_SET x_regs_invalidated_by_call; + /* Call used hard registers which can not be saved because there is no + insn for this. */ + HARD_REG_SET x_no_caller_save_reg_set; + /* Table of register numbers in the order in which to try to use them. */ int x_reg_alloc_order[FIRST_PSEUDO_REGISTER]; @@ -674,6 +673,8 @@ extern struct target_hard_regs *this_target_hard_regs; (this_target_hard_regs->x_call_fixed_reg_set) #define regs_invalidated_by_call \ (this_target_hard_regs->x_regs_invalidated_by_call) +#define no_caller_save_reg_set \ + (this_target_hard_regs->x_no_caller_save_reg_set) #define reg_alloc_order \ (this_target_hard_regs->x_reg_alloc_order) #define inv_reg_alloc_order \ diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index d6816d0b6e8..02828e3f640 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -36,10 +36,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define ATTRIBUTE_HIDDEN #endif -#ifndef MIN_UNITS_PER_WORD -#define MIN_UNITS_PER_WORD UNITS_PER_WORD -#endif - /* Work out the largest "word" size that we can deal with on this target. */ #if MIN_UNITS_PER_WORD > 4 # define LIBGCC2_MAX_UNITS_PER_WORD 8 diff --git a/gcc/reload.h b/gcc/reload.h index 48b8dfd0386..16d52d95a5c 100644 --- a/gcc/reload.h +++ b/gcc/reload.h @@ -171,6 +171,17 @@ struct target_reload { means that (MEM (MEM (REG n))) is also valid if (REG n) does not get a hard register. */ bool x_spill_indirect_levels; + + /* True if caller-save has been reinitialized. */ + bool x_caller_save_initialized_p; + + /* Modes for each hard register that we can save. The smallest mode is wide + enough to save the entire contents of the register. When saving the + register because it is live we first try to save in multi-register modes. + If that is not possible the save is done one register at a time. */ + enum machine_mode (x_regno_save_mode + [FIRST_PSEUDO_REGISTER] + [MAX_MOVE_MAX / MIN_UNITS_PER_WORD + 1]); }; extern struct target_reload default_target_reload; @@ -184,6 +195,8 @@ extern struct target_reload *this_target_reload; (this_target_reload->x_indirect_symref_ok) #define double_reg_address_ok \ (this_target_reload->x_double_reg_address_ok) +#define caller_save_initialized_p \ + (this_target_reload->x_caller_save_initialized_p) extern GTY (()) VEC(rtx,gc) *reg_equiv_memory_loc_vec; extern rtx *reg_equiv_constant; @@ -377,9 +390,6 @@ extern void calculate_elim_costs_all_insns (void); /* Deallocate the reload register used by reload number R. */ extern void deallocate_reload_reg (int r); -/* True if caller-save has been reinitialized. */ -extern bool caller_save_initialized_p; - /* Functions in caller-save.c: */ /* Initialize for caller-save. */