Re: [PATCH] Initial Lunar Lake, Arrow Lake and Arrow Lake S Support

2023-07-16 Thread Hongtao Liu via Gcc-patches
On Fri, Jul 14, 2023 at 10:55 AM Mo, Zewei via Gcc-patches
 wrote:
>
> Hi all,
>
> This patch is to add initial support for Lunar Lake, Arrow Lake and Arrow Lake
> S for GCC.
>
> This link of related information is listed below:
> https://www.intel.com/content/www/us/en/develop/download/intel-architecture-instruction-set-extensions-programming-reference.html
>
> This has been tested on x86_64-pc-linux-gnu. Is this ok for trunk? Thank you.
Ok.
>
> gcc/ChangeLog:
>
> * common/config/i386/cpuinfo.h (get_intel_cpu): Handle Lunar Lake,
> Arrow Lake and Arrow Lake S.
> * common/config/i386/i386-common.cc:
> (processor_name): Add arrowlake.
> (processor_alias_table): Add arrow lake, arrow lake s and lunar
> lake.
> * common/config/i386/i386-cpuinfo.h (enum processor_subtypes):
> Add INTEL_COREI7_ARROWLAKE and INTEL_COREI7_ARROWLAKE_S.
> * config.gcc: Add -march=arrowlake and -march=arrowlake-s.
> * config/i386/driver-i386.cc (host_detect_local_cpu): Handle
> arrowlake-s.
> * config/i386/i386-options.cc (m_ARROWLAKE): New.
> (processor_cost_table): Add arrowlake.
> * config/i386/i386.h (enum processor_type):
> Add PROCESSOR_ARROWLAKE.
> * doc/extend.texi: Add arrowlake and arrowlake-s.
> * doc/invoke.texi: Ditto.
>
> gcc/testsuite/ChangeLog:
>
> * g++.target/i386/mv16.C: Add arrowlake and arrowlake-s.
> * gcc.target/i386/funcspec-56.inc: Handle new march.
> ---
>  gcc/common/config/i386/cpuinfo.h  | 18 
>  gcc/common/config/i386/i386-common.cc |  7 ++
>  gcc/common/config/i386/i386-cpuinfo.h |  2 +
>  gcc/config.gcc|  2 +-
>  gcc/config/i386/driver-i386.cc|  5 +-
>  gcc/config/i386/i386-c.cc |  7 ++
>  gcc/config/i386/i386-options.cc   |  2 +
>  gcc/config/i386/i386.h|  4 +
>  gcc/config/i386/x86-tune.def  | 92 +++
>  gcc/doc/extend.texi   |  6 ++
>  gcc/doc/invoke.texi   | 17 
>  gcc/testsuite/g++.target/i386/mv16.C  | 12 +++
>  gcc/testsuite/gcc.target/i386/funcspec-56.inc |  2 +
>  13 files changed, 135 insertions(+), 41 deletions(-)
>
> diff --git a/gcc/common/config/i386/cpuinfo.h 
> b/gcc/common/config/i386/cpuinfo.h
> index 159e5f03f0b..e6f1a0ac0a1 100644
> --- a/gcc/common/config/i386/cpuinfo.h
> +++ b/gcc/common/config/i386/cpuinfo.h
> @@ -579,6 +579,24 @@ get_intel_cpu (struct __processor_model *cpu_model,
>CHECK___builtin_cpu_is ("grandridge");
>cpu_model->__cpu_type = INTEL_GRANDRIDGE;
>break;
> +case 0xc5:
> +  /* Arrow Lake.  */
> +  cpu = "arrowlake";
> +  CHECK___builtin_cpu_is ("corei7");
> +  CHECK___builtin_cpu_is ("arrowlake");
> +  cpu_model->__cpu_type = INTEL_COREI7;
> +  cpu_model->__cpu_subtype = INTEL_COREI7_ARROWLAKE;
> +  break;
> +case 0xc6:
> +  /* Arrow Lake S.  */
> +case 0xbd:
> +  /* Lunar Lake.  */
> +  cpu = "arrowlake-s";
> +  CHECK___builtin_cpu_is ("corei7");
> +  CHECK___builtin_cpu_is ("arrowlake-s");
> +  cpu_model->__cpu_type = INTEL_COREI7;
> +  cpu_model->__cpu_subtype = INTEL_COREI7_ARROWLAKE_S;
> +  break;
>  case 0x17:
>  case 0x1d:
>/* Penryn.  */
> diff --git a/gcc/common/config/i386/i386-common.cc 
> b/gcc/common/config/i386/i386-common.cc
> index 9b45ad61239..541f1441db8 100644
> --- a/gcc/common/config/i386/i386-common.cc
> +++ b/gcc/common/config/i386/i386-common.cc
> @@ -2044,6 +2044,7 @@ const char *const processor_names[] =
>"alderlake",
>"rocketlake",
>"graniterapids",
> +  "arrowlake",
>"intel",
>"lujiazui",
>"geode",
> @@ -2167,6 +2168,12 @@ const pta processor_alias_table[] =
>  M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE), P_PROC_AVX2},
>{"graniterapids", PROCESSOR_GRANITERAPIDS, CPU_HASWELL, PTA_GRANITERAPIDS,
>  M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS), P_PROC_AVX512F},
> +  {"arrowlake", PROCESSOR_ARROWLAKE, CPU_HASWELL, PTA_ARROWLAKE,
> +M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE), P_PROC_AVX2},
> +  {"arrowlake-s", PROCESSOR_ARROWLAKE, CPU_HASWELL, PTA_ARROWLAKE_S,
> +M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S), P_PROC_AVX2},
> +  {"lunarlake", PROCESSOR_ARROWLAKE, CPU_HASWELL, PTA_ARROWLAKE_S,
> +M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S), P_PROC_AVX2},
>{"bonnell", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
>  M_CPU_TYPE (INTEL_BONNELL), P_PROC_SSSE3},
>{"atom", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
> diff --git a/gcc/common/config/i386/i386-cpuinfo.h 
> b/gcc/common/config/i386/i386-cpuinfo.h
> index e6385dd56a3..b371fb792ec 100644
> --- a/gcc/common/config/i386/i386-cpuinfo.h
> +++ b/gcc/common/config/i386/i386-cpuinfo.h
> @@ -98,6 +98,8 @@ enum processor_subtypes
>ZHAOXIN_FAM7H_LUJIAZUI,
>

[PATCH] Initial Lunar Lake, Arrow Lake and Arrow Lake S Support

2023-07-13 Thread Mo, Zewei via Gcc-patches
Hi all,

This patch is to add initial support for Lunar Lake, Arrow Lake and Arrow Lake
S for GCC.

This link of related information is listed below:
https://www.intel.com/content/www/us/en/develop/download/intel-architecture-instruction-set-extensions-programming-reference.html

This has been tested on x86_64-pc-linux-gnu. Is this ok for trunk? Thank you.

gcc/ChangeLog:

* common/config/i386/cpuinfo.h (get_intel_cpu): Handle Lunar Lake,
Arrow Lake and Arrow Lake S.
* common/config/i386/i386-common.cc:
(processor_name): Add arrowlake.
(processor_alias_table): Add arrow lake, arrow lake s and lunar
lake.
* common/config/i386/i386-cpuinfo.h (enum processor_subtypes):
Add INTEL_COREI7_ARROWLAKE and INTEL_COREI7_ARROWLAKE_S.
* config.gcc: Add -march=arrowlake and -march=arrowlake-s.
* config/i386/driver-i386.cc (host_detect_local_cpu): Handle
arrowlake-s.
* config/i386/i386-options.cc (m_ARROWLAKE): New.
(processor_cost_table): Add arrowlake.
* config/i386/i386.h (enum processor_type):
Add PROCESSOR_ARROWLAKE.
* doc/extend.texi: Add arrowlake and arrowlake-s.
* doc/invoke.texi: Ditto.

gcc/testsuite/ChangeLog:

* g++.target/i386/mv16.C: Add arrowlake and arrowlake-s.
* gcc.target/i386/funcspec-56.inc: Handle new march.
---
 gcc/common/config/i386/cpuinfo.h  | 18 
 gcc/common/config/i386/i386-common.cc |  7 ++
 gcc/common/config/i386/i386-cpuinfo.h |  2 +
 gcc/config.gcc|  2 +-
 gcc/config/i386/driver-i386.cc|  5 +-
 gcc/config/i386/i386-c.cc |  7 ++
 gcc/config/i386/i386-options.cc   |  2 +
 gcc/config/i386/i386.h|  4 +
 gcc/config/i386/x86-tune.def  | 92 +++
 gcc/doc/extend.texi   |  6 ++
 gcc/doc/invoke.texi   | 17 
 gcc/testsuite/g++.target/i386/mv16.C  | 12 +++
 gcc/testsuite/gcc.target/i386/funcspec-56.inc |  2 +
 13 files changed, 135 insertions(+), 41 deletions(-)

diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h
index 159e5f03f0b..e6f1a0ac0a1 100644
--- a/gcc/common/config/i386/cpuinfo.h
+++ b/gcc/common/config/i386/cpuinfo.h
@@ -579,6 +579,24 @@ get_intel_cpu (struct __processor_model *cpu_model,
   CHECK___builtin_cpu_is ("grandridge");
   cpu_model->__cpu_type = INTEL_GRANDRIDGE;
   break;
+case 0xc5:
+  /* Arrow Lake.  */
+  cpu = "arrowlake";
+  CHECK___builtin_cpu_is ("corei7");
+  CHECK___builtin_cpu_is ("arrowlake");
+  cpu_model->__cpu_type = INTEL_COREI7;
+  cpu_model->__cpu_subtype = INTEL_COREI7_ARROWLAKE;
+  break;
+case 0xc6:
+  /* Arrow Lake S.  */
+case 0xbd:
+  /* Lunar Lake.  */
+  cpu = "arrowlake-s";
+  CHECK___builtin_cpu_is ("corei7");
+  CHECK___builtin_cpu_is ("arrowlake-s");
+  cpu_model->__cpu_type = INTEL_COREI7;
+  cpu_model->__cpu_subtype = INTEL_COREI7_ARROWLAKE_S;
+  break;
 case 0x17:
 case 0x1d:
   /* Penryn.  */
diff --git a/gcc/common/config/i386/i386-common.cc 
b/gcc/common/config/i386/i386-common.cc
index 9b45ad61239..541f1441db8 100644
--- a/gcc/common/config/i386/i386-common.cc
+++ b/gcc/common/config/i386/i386-common.cc
@@ -2044,6 +2044,7 @@ const char *const processor_names[] =
   "alderlake",
   "rocketlake",
   "graniterapids",
+  "arrowlake",
   "intel",
   "lujiazui",
   "geode",
@@ -2167,6 +2168,12 @@ const pta processor_alias_table[] =
 M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE), P_PROC_AVX2},
   {"graniterapids", PROCESSOR_GRANITERAPIDS, CPU_HASWELL, PTA_GRANITERAPIDS,
 M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS), P_PROC_AVX512F},
+  {"arrowlake", PROCESSOR_ARROWLAKE, CPU_HASWELL, PTA_ARROWLAKE,
+M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE), P_PROC_AVX2},
+  {"arrowlake-s", PROCESSOR_ARROWLAKE, CPU_HASWELL, PTA_ARROWLAKE_S,
+M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S), P_PROC_AVX2},
+  {"lunarlake", PROCESSOR_ARROWLAKE, CPU_HASWELL, PTA_ARROWLAKE_S,
+M_CPU_SUBTYPE (INTEL_COREI7_ARROWLAKE_S), P_PROC_AVX2},
   {"bonnell", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
 M_CPU_TYPE (INTEL_BONNELL), P_PROC_SSSE3},
   {"atom", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
diff --git a/gcc/common/config/i386/i386-cpuinfo.h 
b/gcc/common/config/i386/i386-cpuinfo.h
index e6385dd56a3..b371fb792ec 100644
--- a/gcc/common/config/i386/i386-cpuinfo.h
+++ b/gcc/common/config/i386/i386-cpuinfo.h
@@ -98,6 +98,8 @@ enum processor_subtypes
   ZHAOXIN_FAM7H_LUJIAZUI,
   AMDFAM19H_ZNVER4,
   INTEL_COREI7_GRANITERAPIDS,
+  INTEL_COREI7_ARROWLAKE,
+  INTEL_COREI7_ARROWLAKE_S,
   CPU_SUBTYPE_MAX
 };
 
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 93b6e0709af..6c373a478e6 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -683,7 +683,7 @@ silvermont knl knm skylake-avx512