diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-12 19:04:36 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-12 19:04:36 +0000 |
commit | 07f1949b64e751e815b173478dc9129095904215 (patch) | |
tree | 6c43689f637c9b183fc04e1d15a2b5fb0ab552e8 | |
parent | 03a75ccf13890665c526af2ed013c1bd3d043d8a (diff) | |
download | gcc-07f1949b64e751e815b173478dc9129095904215.tar.gz |
gcc/
* config/mips/mips.h (mips16_globals): Declare.
(SWITCHABLE_TARGET): Define.
* config/mips/mips.c: Include target-globals.h.
(mips16_globals): New variable.
(mips_set_mips16_mode): Use save_target_globals and
restore_target_globals instead of target_reinit.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162111 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 16 | ||||
-rw-r--r-- | gcc/config/mips/mips.h | 4 |
3 files changed, 26 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0f2a7defaba..b8a77560014 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,14 @@ 2010-07-12 Richard Sandiford <rdsandiford@googlemail.com> + * config/mips/mips.h (mips16_globals): Declare. + (SWITCHABLE_TARGET): Define. + * config/mips/mips.c: Include target-globals.h. + (mips16_globals): New variable. + (mips_set_mips16_mode): Use save_target_globals and + restore_target_globals instead of target_reinit. + +2010-07-12 Richard Sandiford <rdsandiford@googlemail.com> + * reginfo.c (init_reg_sets): Don't zero globals here. Update comment to say that the function can be called more than once. * target-globals.c (save_target_globals): Call init_reg_sets. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index ccdfbbc3fd1..5fb2fc09dcd 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -58,6 +58,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple.h" #include "bitmap.h" #include "diagnostic.h" +#include "target-globals.h" /* True if X is an UNSPEC wrapper around a SYMBOL_REF or LABEL_REF. */ #define UNSPEC_ADDRESS_P(X) \ @@ -568,6 +569,9 @@ static const char *mips_lo_relocs[NUM_SYMBOL_TYPES]; /* Likewise for HIGHs. */ static const char *mips_hi_relocs[NUM_SYMBOL_TYPES]; +/* Target state for MIPS16. */ +struct target_globals *mips16_globals; + /* Index R is the smallest register class that contains register R. */ const enum reg_class mips_regno_to_class[FIRST_PSEUDO_REGISTER] = { LEA_REGS, LEA_REGS, M16_REGS, V1_REG, @@ -15200,9 +15204,15 @@ mips_set_mips16_mode (int mips16_p) /* (Re)initialize MIPS target internals for new ISA. */ mips_init_relocs (); - if (was_mips16_p >= 0 || was_mips16_pch_p >= 0) - /* Reinitialize target-dependent state. */ - target_reinit (); + if (mips16_p) + { + if (!mips16_globals) + mips16_globals = save_target_globals (); + else + restore_target_globals (mips16_globals); + } + else + restore_target_globals (&default_target_globals); was_mips16_p = mips16_p; was_mips16_pch_p = mips16_p; diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index ea79eba2550..a75cd578c21 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -3025,6 +3025,7 @@ extern const struct mips_cpu_info *mips_tune_info; extern const struct mips_rtx_cost_data *mips_cost; extern bool mips_base_mips16; extern enum mips_code_readable_setting mips_code_readable; +extern GTY(()) struct target_globals *mips16_globals; #endif /* Enable querying of DFA units. */ @@ -3059,3 +3060,6 @@ extern enum mips_code_readable_setting mips_code_readable; support this feature. */ #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_absptr) + +/* For switching between MIPS16 and non-MIPS16 modes. */ +#define SWITCHABLE_TARGET 1 |