From: Haochen Jiang Date: Wed, 22 Oct 2025 03:04:07 +0000 (+0800) Subject: Initial Nova Lake Support X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bb16ab062333ef5db63c989613cb2f1d78143cec;p=thirdparty%2Fgcc.git Initial Nova Lake Support This patch will add initial support for Nova Lake according to Intel ISE. gcc/ChangeLog: * common/config/i386/cpuinfo.h (get_intel_cpu): Handle Nova Lake. * common/config/i386/i386-common.cc (processor_name): Add Nova Lake. (processor_alias_table): Ditto. * common/config/i386/i386-cpuinfo.h (enum processor_types): Add INTEL_COREI7_NOVALAKE. * config.gcc: Add -march=novalake. * config/i386/driver-i386.cc (host_detect_local_cpu): Handle novalake. * config/i386/i386-c.cc (ix86_target_macros_internal): Ditto. * config/i386/i386-options.cc (processor_cost_table): Ditto. (m_NOVALAKE): New. (m_CORE_HYBRID): Add novalake. * config/i386/i386.h (enum processor_type): Ditto. * doc/extend.texi: Ditto. * doc/invoke.texi: Ditto. gcc/testsuite/ChangeLog: * g++.target/i386/mv16.C: Ditto. * gcc.target/i386/funcspec-56.inc: Handle new march. --- diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h index 9c18c04f353..dbad4a1dba6 100644 --- a/gcc/common/config/i386/cpuinfo.h +++ b/gcc/common/config/i386/cpuinfo.h @@ -639,6 +639,22 @@ get_intel_cpu (struct __processor_model *cpu_model, default: break; } + /* Parse family and model for family 0x12. */ + else if (cpu_model2->__cpu_family == 0x12) + switch (cpu_model2->__cpu_model) + { + case 0x01: + case 0x03: + /* Nova Lake. */ + cpu = "novalake"; + CHECK___builtin_cpu_is ("corei7"); + CHECK___builtin_cpu_is ("novalake"); + cpu_model->__cpu_type = INTEL_COREI7; + cpu_model->__cpu_subtype = INTEL_COREI7_NOVALAKE; + break; + default: + break; + } /* Parse family and model for family 0x13. */ else if (cpu_model2->__cpu_family == 0x13) switch (cpu_model2->__cpu_model) diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc index c71f2c13659..a447a8dd210 100644 --- a/gcc/common/config/i386/i386-common.cc +++ b/gcc/common/config/i386/i386-common.cc @@ -2131,6 +2131,7 @@ const char *const processor_names[] = "arrowlake-s", "pantherlake", "diamondrapids", + "novalake", "intel", "lujiazui", "yongfeng", @@ -2272,6 +2273,8 @@ const pta processor_alias_table[] = M_CPU_SUBTYPE (INTEL_COREI7_DIAMONDRAPIDS), P_PROC_AVX10_1}, {"wildcatlake", PROCESSOR_PANTHERLAKE, CPU_HASWELL, PTA_PANTHERLAKE, M_CPU_SUBTYPE (INTEL_COREI7_PANTHERLAKE), P_PROC_AVX2}, + {"novalake", PROCESSOR_NOVALAKE, CPU_HASWELL, PTA_NOVALAKE, + M_CPU_SUBTYPE (INTEL_COREI7_NOVALAKE), 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 0e75626464a..e5323f10327 100644 --- a/gcc/common/config/i386/i386-cpuinfo.h +++ b/gcc/common/config/i386/i386-cpuinfo.h @@ -106,6 +106,7 @@ enum processor_subtypes AMDFAM1AH_ZNVER5, ZHAOXIN_FAM7H_SHIJIDADAO, INTEL_COREI7_DIAMONDRAPIDS, + INTEL_COREI7_NOVALAKE, CPU_SUBTYPE_MAX }; diff --git a/gcc/config.gcc b/gcc/config.gcc index 44004102a3f..c678b801f70 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -729,7 +729,8 @@ skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake \ sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \ nano-x2 eden-x4 nano-x4 lujiazui yongfeng shijidadao x86-64 x86-64-v2 \ x86-64-v3 x86-64-v4 sierraforest graniterapids graniterapids-d grandridge \ -arrowlake arrowlake-s clearwaterforest pantherlake diamondrapids native" +arrowlake arrowlake-s clearwaterforest pantherlake diamondrapids novalake \ +native" # Additional x86 processors supported by --with-cpu=. Each processor # MUST be separated by exactly one space. diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc index 3eacc2cbc39..0557df9884f 100644 --- a/gcc/config/i386/driver-i386.cc +++ b/gcc/config/i386/driver-i386.cc @@ -553,6 +553,7 @@ const char *host_detect_local_cpu (int argc, const char **argv) processor = PROCESSOR_PENTIUM; break; case 6: + case 18: case 19: processor = PROCESSOR_PENTIUMPRO; break; @@ -642,6 +643,9 @@ const char *host_detect_local_cpu (int argc, const char **argv) /* Assume Clearwater Forest. */ if (has_feature (FEATURE_USER_MSR)) cpu = "clearwaterforest"; + /* Assume Nova Lake. */ + else if (has_feature (FEATURE_PREFETCHI)) + cpu = "novalake"; else if (has_feature (FEATURE_SM3)) { if (has_feature (FEATURE_KL)) diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc index 00374653c3c..2d92cee458c 100644 --- a/gcc/config/i386/i386-c.cc +++ b/gcc/config/i386/i386-c.cc @@ -295,6 +295,10 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, def_or_undef (parse_in, "__diamondrapids"); def_or_undef (parse_in, "__diamondrapids__"); break; + case PROCESSOR_NOVALAKE: + def_or_undef (parse_in, "__novalake"); + def_or_undef (parse_in, "__novalake__"); + break; /* use PROCESSOR_max to not set/unset the arch macro. */ case PROCESSOR_max: @@ -498,6 +502,9 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, case PROCESSOR_DIAMONDRAPIDS: def_or_undef (parse_in, "__tune_diamondrapids__"); break; + case PROCESSOR_NOVALAKE: + def_or_undef (parse_in, "__tune_novalake__"); + break; case PROCESSOR_INTEL: case PROCESSOR_GENERIC: break; diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index 35cba3fc48d..dadcf7664c6 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -132,6 +132,7 @@ along with GCC; see the file COPYING3. If not see #define m_ARROWLAKE_S (HOST_WIDE_INT_1U<