* Claudiu Zissulescu [2018-06-13 12:09:18 +0300]:
> From: Claudiu Zissulescu
>
> This patch adds support for two ARCHS variations.
>
> Ok to apply?
> Claudiu
Sorry for the delay, this looks fine.
Thanks,
Andrew
>
> gcc/
> 2017-03-10 Claudiu Zissulescu
>
> * config/arc/arc-arch.h (arc_tune_attr): Add new tune parameters
> for ARCHS4x.
> * config/arc/arc-cpus.def (hs4x): New cpu.
> (hs4xd): Likewise.
> * config/arc/arc-tables.opt: Regenerate.
> * config/arc/arc.c (arc_sched_issue_rate): New function.
> (TARGET_SCHED_ISSUE_RATE): Define.
> (TARGET_SCHED_EXPOSED_PIPELINE): Likewise.
> * config/arc/arc.md (attr type): Add fpu_fuse, fpu_sdiv, fpu_ddiv,
> fpu_cvt.
> (attr tune): Add ARCHS4x tune values.
> (attr tune_dspmpy): Define.
> (*tst): Correct instruction type.
> * config/arc/arcHS.md: Don't use this automaton for ARCHS4x cpus.
> * config/arc/arcHS4x.md: New file.
> * config/arc/fpu.md: Update instruction type attributes.
> * config/arc/t-multilib: Regenerate.
> ---
> gcc/config/arc/arc-arch.h | 5 +-
> gcc/config/arc/arc-cpus.def | 8 +-
> gcc/config/arc/arc-tables.opt | 6 +
> gcc/config/arc/arc.c | 19 +++
> gcc/config/arc/arc.md | 24 +++-
> gcc/config/arc/arcHS.md | 6 +
> gcc/config/arc/arcHS4x.md | 221 ++
> gcc/config/arc/fpu.md | 16 +--
> 8 files changed, 289 insertions(+), 16 deletions(-)
> create mode 100644 gcc/config/arc/arcHS4x.md
>
> diff --git a/gcc/config/arc/arc-arch.h b/gcc/config/arc/arc-arch.h
> index 64866dd529b..01f95946623 100644
> --- a/gcc/config/arc/arc-arch.h
> +++ b/gcc/config/arc/arc-arch.h
> @@ -73,7 +73,10 @@ enum arc_tune_attr
> ARC_TUNE_ARC600,
> ARC_TUNE_ARC700_4_2_STD,
> ARC_TUNE_ARC700_4_2_XMAC,
> -ARC_TUNE_CORE_3
> +ARC_TUNE_CORE_3,
> +ARC_TUNE_ARCHS4X,
> +ARC_TUNE_ARCHS4XD,
> +ARC_TUNE_ARCHS4XD_SLOW
>};
>
> /* CPU specific properties. */
> diff --git a/gcc/config/arc/arc-cpus.def b/gcc/config/arc/arc-cpus.def
> index 1fce81f6933..4aa422f1a39 100644
> --- a/gcc/config/arc/arc-cpus.def
> +++ b/gcc/config/arc/arc-cpus.def
> @@ -59,10 +59,12 @@ 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 (hs4x, hs, FL_MPYOPT_9|FL_DIVREM|FL_LL64, ARCHS4X)
> +ARC_CPU (hs4xd, hs, FL_MPYOPT_9|FL_DIVREM|FL_LL64, ARCHS4XD)
>
> -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, 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)
> diff --git a/gcc/config/arc/arc-tables.opt b/gcc/config/arc/arc-tables.opt
> index 3b17b3de7d5..2afaf5bd83c 100644
> --- a/gcc/config/arc/arc-tables.opt
> +++ b/gcc/config/arc/arc-tables.opt
> @@ -63,6 +63,12 @@ Enum(processor_type) String(hs38) Value(PROCESSOR_hs38)
> EnumValue
> Enum(processor_type) String(hs38_linux) Value(PROCESSOR_hs38_linux)
>
> +EnumValue
> +Enum(processor_type) String(hs4x) Value(PROCESSOR_hs4x)
> +
> +EnumValue
> +Enum(processor_type) String(hs4xd) Value(PROCESSOR_hs4xd)
> +
> EnumValue
> Enum(processor_type) String(arc600) Value(PROCESSOR_arc600)
>
> diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
> index 2bedc9af37e..03a2f4223c0 100644
> --- a/gcc/config/arc/arc.c
> +++ b/gcc/config/arc/arc.c
> @@ -483,6 +483,22 @@ arc_autovectorize_vector_sizes (vector_sizes *sizes)
> }
> }
>
> +
> +/* Implements target hook TARGET_SCHED_ISSUE_RATE. */
> +static int
> +arc_sched_issue_rate (void)
> +{
> + switch (arc_tune)
> +{
> +case TUNE_ARCHS4X:
> +case TUNE_ARCHS4XD:
> + return 3;
> +default:
> + break;
> +}
> + return 1;
> +}
> +
> /* TARGET_PRESERVE_RELOAD_P is still awaiting patch re-evaluation / review.
> */
> static bool arc_preserve_reload_p (rtx in) ATTRIBUTE_UNUSED;
> static rtx arc_delegitimize_address (rtx);
> @@ -565,6 +581,9 @@ static rtx arc_legitimize_address_0 (rtx, rtx,
> machine_mode mode);
> #undef TARGET_SCHED_ADJUST_PRIORITY
> #define TARGET_SCHED_ADJUST_PRIORITY arc_sched_adjust_priority
>
> +#undef TARGET_SCHED_ISSUE_RATE
> +#define TARGET_SCHED_ISSUE_RATE arc_sched_issue_rate
> +
> #undef TARGET_VECTOR_MODE_SUPPORTED_P
> #define TARGET_VECTOR_MODE_SUPPORTED_P arc_vector_mode_supported_p
>
> diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md
> index