From 09d69286160a4027dc5c8fc27bff0113f698b25f Mon Sep 17 00:00:00 2001 From: Claudiu Zissulescu Date: Tue, 12 Jun 2018 15:28:59 +0200 Subject: [PATCH] [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 * 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 | 9 ++++++ gcc/config/arc/arc-arch.h | 22 ++++++++++++--- gcc/config/arc/arc-cpus.def | 55 +++++++++++++++++++------------------ gcc/config/arc/arc-opts.h | 2 +- gcc/config/arc/arc.c | 10 +++++++ 5 files changed, 67 insertions(+), 31 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ffbe27dcc35..b4da50f338d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-06-12 Claudiu Zissulescu + + * 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 * config/arc/arc-arch.h: Update ARC_OPTX macro. diff --git a/gcc/config/arc/arc-arch.h b/gcc/config/arc/arc-arch.h index f9468c8955b..85475f42d26 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 1fce81f6933..74378888a68 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 838e59b0bf3..3a7b7042de0 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 d3b8984493d..6b90dd5896d 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; -- 2.30.2