diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2010-07-12 18:54:35 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2010-07-12 18:54:35 +0000 |
commit | 4bcbfa039316bc3e3f9c43ec1230971935e17290 (patch) | |
tree | c920ed4d7946023638d154dfa81c2b963b87076a /gcc | |
parent | b6609375319133de3e9a46d3477369482b92f9fa (diff) | |
download | gcc-4bcbfa039316bc3e3f9c43ec1230971935e17290.zip gcc-4bcbfa039316bc3e3f9c43ec1230971935e17290.tar.gz gcc-4bcbfa039316bc3e3f9c43ec1230971935e17290.tar.bz2 |
Makefile.in (target-globals.o): Depend on $(EXPR_H) and $(OPTABS_H).
gcc/
* Makefile.in (target-globals.o): Depend on $(EXPR_H) and $(OPTABS_H).
* optabs.h (target_optabs): New structure.
(default_target_optabs): Declare.
(this_target_optabs): Declare as a variable or define as a macro.
(optab_table, convert_optab_table, direct_optab_table): Redefine
as macros.
* optabs.c (default_target_optabs): New variable.
(this_target_optabs): New conditional variable.
(optab_table, convert_optab_table, direct_optab_table): Delete.
* target-globals.h (this_target_optabs): Declare.
(target_globals): Add a optabs field.
(restore_target_globals): Copy the optabs field to
this_target_optabs.
* target-globals.c: Include expr.h and optabs.h.
(default_target_globals): Initialize the optabs field.
(save_target_globals): Likewise.
From-SVN: r162097
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 19 | ||||
-rw-r--r-- | gcc/Makefile.in | 2 | ||||
-rw-r--r-- | gcc/optabs.c | 21 | ||||
-rw-r--r-- | gcc/optabs.h | 33 | ||||
-rw-r--r-- | gcc/target-globals.c | 6 | ||||
-rw-r--r-- | gcc/target-globals.h | 3 |
6 files changed, 59 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7e61128..08bcf6f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,24 @@ 2010-07-12 Richard Sandiford <rdsandiford@googlemail.com> + * Makefile.in (target-globals.o): Depend on $(EXPR_H) and $(OPTABS_H). + * optabs.h (target_optabs): New structure. + (default_target_optabs): Declare. + (this_target_optabs): Declare as a variable or define as a macro. + (optab_table, convert_optab_table, direct_optab_table): Redefine + as macros. + * optabs.c (default_target_optabs): New variable. + (this_target_optabs): New conditional variable. + (optab_table, convert_optab_table, direct_optab_table): Delete. + * target-globals.h (this_target_optabs): Declare. + (target_globals): Add a optabs field. + (restore_target_globals): Copy the optabs field to + this_target_optabs. + * target-globals.c: Include expr.h and optabs.h. + (default_target_globals): Initialize the optabs field. + (save_target_globals): Likewise. + +2010-07-12 Richard Sandiford <rdsandiford@googlemail.com> + * flags.h (target_flagstate): Add x_flag_excess_precision. (flag_excess_precision): Redefine as a macro. * toplev.c (flag_excess_precision): Delete. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index dd96699..8263b64 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -3478,7 +3478,7 @@ lower-subreg.o : lower-subreg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(EXPR_H) $(EXCEPT_H) $(REGS_H) $(TREE_PASS_H) $(DF_H) target-globals.o : target-globals.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) insn-config.h $(MACHMODE_H) $(GGC_H) $(TOPLEV_H) target-globals.h \ - $(FLAGS_H) $(REGS_H) $(RTL_H) reload.h expmed.h + $(FLAGS_H) $(REGS_H) $(RTL_H) reload.h expmed.h $(EXPR_H) $(OPTABS_H) $(out_object_file): $(out_file) $(CONFIG_H) coretypes.h $(TM_H) $(TREE_H) \ $(RTL_H) $(REGS_H) hard-reg-set.h insn-config.h conditions.h \ diff --git a/gcc/optabs.c b/gcc/optabs.c index 782c449..e9487d0 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -45,26 +45,13 @@ along with GCC; see the file COPYING3. If not see #include "basic-block.h" #include "target.h" -/* Each optab contains info on how this target machine - can perform a particular operation - for all sizes and kinds of operands. - - The operation to be performed is often specified - by passing one of these optabs as an argument. - - See expr.h for documentation of these optabs. */ - -struct optab_d optab_table[OTI_MAX]; +struct target_optabs default_target_optabs; +#if SWITCHABLE_TARGET +struct target_optabs *this_target_optabs = &default_target_optabs; +#endif rtx libfunc_table[LTI_MAX]; -/* Tables of patterns for converting one mode to another. */ -struct convert_optab_d convert_optab_table[COI_MAX]; - -/* Tables of patterns for direct optabs (i.e. those which cannot be - implemented using a libcall). */ -struct direct_optab_d direct_optab_table[(int) DOI_MAX]; - /* Contains the optab used for each rtx code. */ optab code_to_optab[NUM_RTX_CODE + 1]; diff --git a/gcc/optabs.h b/gcc/optabs.h index 1c518e5..547339b 100644 --- a/gcc/optabs.h +++ b/gcc/optabs.h @@ -371,8 +371,6 @@ enum optab_index OTI_MAX }; -extern struct optab_d optab_table[OTI_MAX]; - #define ssadd_optab (&optab_table[OTI_ssadd]) #define usadd_optab (&optab_table[OTI_usadd]) #define sssub_optab (&optab_table[OTI_sssub]) @@ -574,8 +572,6 @@ enum convert_optab_index COI_MAX }; -extern struct convert_optab_d convert_optab_table[COI_MAX]; - #define sext_optab (&convert_optab_table[COI_sext]) #define zext_optab (&convert_optab_table[COI_zext]) #define trunc_optab (&convert_optab_table[COI_trunc]) @@ -676,8 +672,6 @@ struct direct_optab_d }; typedef struct direct_optab_d *direct_optab; -extern struct direct_optab_d direct_optab_table[(int) DOI_MAX]; - #ifdef HAVE_conditional_move #define movcc_optab (&direct_optab_table[(int) DOI_movcc]) #endif @@ -715,6 +709,33 @@ extern struct direct_optab_d direct_optab_table[(int) DOI_MAX]; #define sync_lock_release_optab \ (&direct_optab_table[(int) DOI_sync_lock_release]) +/* Target-dependent globals. */ +struct target_optabs { + /* Tables of patterns that may have an associated libcall. */ + struct optab_d x_optab_table[(int) OTI_MAX]; + + /* Tables of patterns for converting one mode to another. */ + struct convert_optab_d x_convert_optab_table[(int) COI_MAX]; + + /* Tables of patterns for direct optabs (i.e. those which cannot be + implemented using a libcall). */ + struct direct_optab_d x_direct_optab_table[(int) DOI_MAX]; +}; + +extern struct target_optabs default_target_optabs; +#if SWITCHABLE_TARGET +extern struct target_optabs *this_target_optabs; +#else +#define this_target_optabs (&default_target_optabs) +#endif + +#define optab_table \ + (this_target_optabs->x_optab_table) +#define convert_optab_table \ + (this_target_optabs->x_convert_optab_table) +#define direct_optab_table \ + (this_target_optabs->x_direct_optab_table) + /* Define functions given in optabs.c. */ extern rtx expand_widen_pattern_expr (sepops ops, rtx op0, rtx op1, rtx wide_op, diff --git a/gcc/target-globals.c b/gcc/target-globals.c index 5934ad9..cfabb87 100644 --- a/gcc/target-globals.c +++ b/gcc/target-globals.c @@ -32,6 +32,8 @@ along with GCC; see the file COPYING3. If not see #include "hard-reg-set.h" #include "reload.h" #include "expmed.h" +#include "expr.h" +#include "optabs.h" #if SWITCHABLE_TARGET struct target_globals default_target_globals = { @@ -40,7 +42,8 @@ struct target_globals default_target_globals = { &default_target_rtl, &default_target_hard_regs, &default_target_reload, - &default_target_expmed + &default_target_expmed, + &default_target_optabs }; struct target_globals * @@ -55,6 +58,7 @@ save_target_globals (void) g->hard_regs = XCNEW (struct target_hard_regs); g->reload = XCNEW (struct target_reload); g->expmed = XCNEW (struct target_expmed); + g->optabs = XCNEW (struct target_optabs); restore_target_globals (g); target_reinit (); return g; diff --git a/gcc/target-globals.h b/gcc/target-globals.h index 45273c4..a1f4866 100644 --- a/gcc/target-globals.h +++ b/gcc/target-globals.h @@ -27,6 +27,7 @@ extern struct target_rtl *this_target_rtl; extern struct target_hard_regs *this_target_hard_regs; extern struct target_reload *this_target_reload; extern struct target_expmed *this_target_expmed; +extern struct target_optabs *this_target_optabs; struct GTY(()) target_globals { struct target_flag_state *GTY((skip)) flag_state; @@ -35,6 +36,7 @@ struct GTY(()) target_globals { struct target_hard_regs *GTY((skip)) hard_regs; struct target_reload *GTY((skip)) reload; struct target_expmed *GTY((skip)) expmed; + struct target_optabs *GTY((skip)) optabs; }; extern struct target_globals default_target_globals; @@ -50,6 +52,7 @@ restore_target_globals (struct target_globals *g) this_target_hard_regs = g->hard_regs; this_target_reload = g->reload; this_target_expmed = g->expmed; + this_target_optabs = g->optabs; } #endif |