OSDN Git Service

gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Jul 2010 18:54:35 +0000 (18:54 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Jul 2010 18:54:35 +0000 (18:54 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162097 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/Makefile.in
gcc/optabs.c
gcc/optabs.h
gcc/target-globals.c
gcc/target-globals.h

index 7e61128..08bcf6f 100644 (file)
@@ -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.
index dd96699..8263b64 100644 (file)
@@ -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 \
index 782c449..e9487d0 100644 (file)
@@ -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];
 
index 1c518e5..547339b 100644 (file)
@@ -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])
 \f
+/* 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)
+\f
 /* Define functions given in optabs.c.  */
 
 extern rtx expand_widen_pattern_expr (sepops ops, rtx op0, rtx op1, rtx wide_op,
index 5934ad9..cfabb87 100644 (file)
@@ -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;
index 45273c4..a1f4866 100644 (file)
@@ -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