[PATCH] [ARC][QuarkSE] Update
authorClaudiu Zissulescu <claziss@synopsys.com>
Tue, 12 Jun 2018 13:28:59 +0000 (15:28 +0200)
committerClaudiu Zissulescu <claziss@gcc.gnu.org>
Tue, 12 Jun 2018 13:28:59 +0000 (15:28 +0200)
QuarkSE has lp_count width set to 16 bits. Update the compiler to
consider it.

gcc/
2018-06-12  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc-arch.h (arc_extras): New enum.
(arc_cpu_t):Add field extra.
(arc_cpu_types): Consider the extras.
* config/arc/arc-cpus.def: Add extras info.
* config/arc/arc-opts.h (processor_type): Consider extra field.
* config/arc/arc.c (arc_override_options): Handle extra field.

From-SVN: r261496

gcc/ChangeLog
gcc/config/arc/arc-arch.h
gcc/config/arc/arc-cpus.def
gcc/config/arc/arc-opts.h
gcc/config/arc/arc.c

index ffbe27dcc351f77f4ea84f342f7c262525b8fd07..b4da50f338d4f8d183e1213bf9293b137a3a968c 100644 (file)
@@ -1,3 +1,12 @@
+2018-06-12  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       * config/arc/arc-arch.h (arc_extras): New enum.
+       (arc_cpu_t):Add field extra.
+       (arc_cpu_types): Consider the extras.
+       * config/arc/arc-cpus.def: Add extras info.
+       * config/arc/arc-opts.h (processor_type): Consider extra field.
+       * config/arc/arc.c (arc_override_options): Handle extra field.
+
 2018-06-12  Claudiu Zissulescu  <claziss@synopsys.com>
 
        * config/arc/arc-arch.h: Update ARC_OPTX macro.
index f9468c8955b192bc9714fad2b6f98f5c2b8c3a81..85475f42d2641ba2b1ffaede092cc7ee68abb963 100644 (file)
@@ -76,6 +76,17 @@ enum arc_tune_attr
     ARC_TUNE_CORE_3
   };
 
+/* Extra options for a processor template to hold any CPU specific
+   information which is not cover in arc-arches.def.  Such example is
+   the width of LP_COUNT register, or the number of register
+   banks.  */
+
+enum arc_extras
+{
+  HAS_NONE,
+  HAS_LPCOUNT_16
+};
+
 /* CPU specific properties.  */
 
 typedef struct
@@ -92,6 +103,9 @@ typedef struct
   /* Specific flags.  */
   const unsigned long long flags;
 
+  /* Extra value.  */
+  enum arc_extras extra;
+
   /* Tune value.  */
   enum arc_tune_attr tune;
 
@@ -109,12 +123,12 @@ const arc_arch_t arc_arch_types[] =
 
 const arc_cpu_t arc_cpu_types[] =
   {
-    {"none", NULL, PROCESSOR_NONE, 0, ARC_TUNE_NONE},
-#define ARC_CPU(NAME, ARCH, FLAGS, TUNE)       \
-    {#NAME, &arc_arch_types [BASE_ARCH_##ARCH], PROCESSOR_##NAME, FLAGS, ARC_TUNE_##TUNE },
+    {"none", NULL, PROCESSOR_NONE, 0, HAS_NONE, ARC_TUNE_NONE},
+#define ARC_CPU(NAME, ARCH, FLAGS, EXTRA, TUNE)                                \
+    {#NAME, &arc_arch_types [BASE_ARCH_##ARCH], PROCESSOR_##NAME, FLAGS, HAS_##EXTRA, ARC_TUNE_##TUNE },
 #include "arc-cpus.def"
 #undef ARC_CPU
-    {NULL, NULL, PROCESSOR_NONE, 0, ARC_TUNE_NONE}
+    {NULL, NULL, PROCESSOR_NONE, 0, HAS_NONE, ARC_TUNE_NONE}
   };
 
 /* Currently selected cpu type.  */
index 1fce81f6933b7cb73500528a2de36cd3400dea27..74378888a687137e1c971ed3512d2feea3d979a3 100644 (file)
          as defined in arc-options.def file, and allowed by arc-arches.def
          file.  The specific hardware flags are enumerated without using
          spaces between the '|' character and consequtive flags.
+   EXTRA  Extra hardware flags, different than the ones in
+         arc-arches.def.  Here we can specify the width of lp_count,
+         for example.
    TUNE          Tune value for the given configuration, otherwise NONE.  */
 
-ARC_CPU (em,       em, 0, NONE)
-ARC_CPU (em_mini,   em, FL_RF16, NONE)
-ARC_CPU (arcem,            em, FL_MPYOPT_2|FL_CD|FL_BS, NONE)
-ARC_CPU (em4,      em, FL_CD, NONE)
-ARC_CPU (em4_dmips, em, FL_MPYOPT_2|FL_CD|FL_DIVREM|FL_NORM|FL_SWAP|FL_BS, NONE)
-ARC_CPU (em4_fpus,  em, FL_MPYOPT_2|FL_CD|FL_DIVREM|FL_NORM|FL_SWAP|FL_BS|FL_FPU_FPUS, NONE)
-ARC_CPU (em4_fpuda, em, FL_MPYOPT_2|FL_CD|FL_DIVREM|FL_NORM|FL_SWAP|FL_BS|FL_FPU_FPUDA, NONE)
-ARC_CPU (quarkse_em, em, FL_MPYOPT_3|FL_CD|FL_DIVREM|FL_NORM|FL_SWAP|FL_BS|FL_FPX_QUARK|FL_SPFP|FL_DPFP, NONE)
-
-ARC_CPU (hs,        hs, 0, NONE)
-ARC_CPU (archs,             hs, FL_MPYOPT_2|FL_DIVREM|FL_LL64, NONE)
-ARC_CPU (hs34,      hs, FL_MPYOPT_2, NONE)
-ARC_CPU (hs38,      hs, FL_MPYOPT_9|FL_DIVREM|FL_LL64, NONE)
-ARC_CPU (hs38_linux, hs, FL_MPYOPT_9|FL_DIVREM|FL_LL64|FL_FPU_FPUD_ALL, NONE)
-
-ARC_CPU (arc600,         6xx, FL_BS, ARC600)
-ARC_CPU (arc600_norm,    6xx, FL_BS|FL_NORM, ARC600)
-ARC_CPU (arc600_mul64,   6xx, FL_BS|FL_NORM|FL_MUL64, ARC600)
-ARC_CPU (arc600_mul32x16, 6xx, FL_BS|FL_NORM|FL_MUL32x16, ARC600)
-ARC_CPU (arc601,         6xx, 0, ARC600)
-ARC_CPU (arc601_norm,    6xx, FL_NORM, ARC600)
-ARC_CPU (arc601_mul64,   6xx, FL_NORM|FL_MUL64, ARC600)
-ARC_CPU (arc601_mul32x16, 6xx, FL_NORM|FL_MUL32x16, ARC600)
-
-ARC_CPU (arc700, 700, 0, ARC700_4_2_STD)
-ARC_CPU (nps400, 700, 0, ARC700_4_2_STD)
+ARC_CPU (em,       em, 0, NONE, NONE)
+ARC_CPU (em_mini,   em, FL_RF16, NONE, NONE)
+ARC_CPU (arcem,            em, FL_MPYOPT_2|FL_CD|FL_BS, NONE, NONE)
+ARC_CPU (em4,      em, FL_CD, NONE, NONE)
+ARC_CPU (em4_dmips, em, FL_MPYOPT_2|FL_CD|FL_DIVREM|FL_NORM|FL_SWAP|FL_BS, NONE, NONE)
+ARC_CPU (em4_fpus,  em, FL_MPYOPT_2|FL_CD|FL_DIVREM|FL_NORM|FL_SWAP|FL_BS|FL_FPU_FPUS, NONE, NONE)
+ARC_CPU (em4_fpuda, em, FL_MPYOPT_2|FL_CD|FL_DIVREM|FL_NORM|FL_SWAP|FL_BS|FL_FPU_FPUDA, NONE, NONE)
+ARC_CPU (quarkse_em, em, FL_MPYOPT_3|FL_CD|FL_DIVREM|FL_NORM|FL_SWAP|FL_BS|FL_FPX_QUARK|FL_SPFP|FL_DPFP, LPCOUNT_16, NONE)
+
+ARC_CPU (hs,        hs, 0, NONE, NONE)
+ARC_CPU (archs,             hs, FL_MPYOPT_2|FL_DIVREM|FL_LL64, NONE, NONE)
+ARC_CPU (hs34,      hs, FL_MPYOPT_2, NONE, NONE)
+ARC_CPU (hs38,      hs, FL_MPYOPT_9|FL_DIVREM|FL_LL64, NONE, NONE)
+ARC_CPU (hs38_linux, hs, FL_MPYOPT_9|FL_DIVREM|FL_LL64|FL_FPU_FPUD_ALL, NONE, NONE)
+
+ARC_CPU (arc600,         6xx, FL_BS, NONE, ARC600)
+ARC_CPU (arc600_norm,    6xx, FL_BS|FL_NORM, NONE, ARC600)
+ARC_CPU (arc600_mul64,   6xx, FL_BS|FL_NORM|FL_MUL64, NONE, ARC600)
+ARC_CPU (arc600_mul32x16, 6xx, FL_BS|FL_NORM|FL_MUL32x16, NONE, ARC600)
+ARC_CPU (arc601,         6xx, 0, NONE, ARC600)
+ARC_CPU (arc601_norm,    6xx, FL_NORM, NONE, ARC600)
+ARC_CPU (arc601_mul64,   6xx, FL_NORM|FL_MUL64, NONE, ARC600)
+ARC_CPU (arc601_mul32x16, 6xx, FL_NORM|FL_MUL32x16, NONE, ARC600)
+
+ARC_CPU (arc700, 700, 0, NONE, ARC700_4_2_STD)
+ARC_CPU (nps400, 700, 0, NONE, ARC700_4_2_STD)
 
 /* Local Variables: */
 /* mode: c */
index 838e59b0bf3668b409c6ac0818d20ed4882cd7ff..3a7b7042de01f8f53bbb4bc97ff2b3d5610a2906 100644 (file)
@@ -24,7 +24,7 @@
 enum processor_type
 {
   PROCESSOR_NONE = 0,
-#define ARC_CPU(NAME, ARCH, FLAGS, TUNE)  PROCESSOR_##NAME,
+#define ARC_CPU(NAME, ARCH, FLAGS, EXTRA, TUNE)  PROCESSOR_##NAME,
 #include "arc-cpus.def"
 #undef ARC_CPU
   PROCESSOR_generic
index d3b8984493d5603c3ccd29de09e6168487fda3b2..6b90dd5896dbd39991191d11315ff2a29be2f2bc 100644 (file)
@@ -1254,6 +1254,16 @@ arc_override_options (void)
 #undef ARC_OPTX
 #undef ARC_OPT
 
+  /* Set extras.  */
+  switch (arc_selected_cpu->extra)
+    {
+    case HAS_LPCOUNT_16:
+      arc_lpcwidth = 16;
+      break;
+    default:
+      break;
+    }
+
   /* Set Tune option.  */
   if (arc_tune == ARC_TUNE_NONE)
     arc_tune = (enum arc_tune_attr) arc_selected_cpu->tune;