aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Zissulescu <claziss@synopsys.com>2018-06-12 15:28:59 +0200
committerClaudiu Zissulescu <claziss@gcc.gnu.org>2018-06-12 15:28:59 +0200
commit09d69286160a4027dc5c8fc27bff0113f698b25f (patch)
tree224952a1a28f7bc8387e5430c05effa463f1d1a6
parentd65485c58fdd9ab6ca2cb6bc200bb71632dbbd9c (diff)
downloadgcc-09d69286160a4027dc5c8fc27bff0113f698b25f.zip
gcc-09d69286160a4027dc5c8fc27bff0113f698b25f.tar.gz
gcc-09d69286160a4027dc5c8fc27bff0113f698b25f.tar.bz2
[PATCH] [ARC][QuarkSE] Update
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
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/arc/arc-arch.h22
-rw-r--r--gcc/config/arc/arc-cpus.def55
-rw-r--r--gcc/config/arc/arc-opts.h2
-rw-r--r--gcc/config/arc/arc.c10
5 files changed, 67 insertions, 31 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ffbe27d..b4da50f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
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.
* config/arc/arc-options.def (ARC_OPTX): Introduce a new doc
field.
diff --git a/gcc/config/arc/arc-arch.h b/gcc/config/arc/arc-arch.h
index f9468c8..85475f4 100644
--- a/gcc/config/arc/arc-arch.h
+++ b/gcc/config/arc/arc-arch.h
@@ -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. */
diff --git a/gcc/config/arc/arc-cpus.def b/gcc/config/arc/arc-cpus.def
index 1fce81f..7437888 100644
--- a/gcc/config/arc/arc-cpus.def
+++ b/gcc/config/arc/arc-cpus.def
@@ -43,34 +43,37 @@
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 */
diff --git a/gcc/config/arc/arc-opts.h b/gcc/config/arc/arc-opts.h
index 838e59b..3a7b704 100644
--- a/gcc/config/arc/arc-opts.h
+++ b/gcc/config/arc/arc-opts.h
@@ -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
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
index d3b8984..6b90dd5 100644
--- a/gcc/config/arc/arc.c
+++ b/gcc/config/arc/arc.c
@@ -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;