Hi Uros,
在 2026/6/16 15:40, Uros Bizjak 写道:
> On Tue, Jun 16, 2026 at 4:49 AM Kewen Lin <[email protected]> wrote:
>>
>> Hi,
>>
>> Authored-by: Xin Liu <[email protected]>
>>
>> Add c86-4g-m8 as a new HYGON Family 18h model 8 processor. It
>> inherits the c86-4g-m7 ISA set and most tuning decisions, including
>> the same processor costs and scheduling model baseline.
>>
>> The patch wires c86-4g-m8 into the common x86 processor tables,
>> driver CPU detection, target macros, --with-arch/--with-cpu handling,
>> builtin CPU detection and documentation. It also extends the c86-4g
>> tuning masks that already special-case c86-4g-m7 to cover c86-4g-m8.
>>
>> For scheduling, rename the shared scheduling description file from
>> gcc/config/i386/c86-4g-m7.md to gcc/config/i386/c86-4g-m7m8.md and
>> reuse the c86-4g-m7 scheduling reservations for c86-4g-m8 where the
>> latency and resource usage are the same. Add separate c86-4g-m8
>> reservations for the few operations with different latency. This patch
>> does not affect genautomata build time.
>>
>> Bootstrapped and regtested on a hygon c86-4g-m7 machine, as well as
>> a cfarm x86-64 machine.
>>
>> Is it ok for trunk? Also ok to backport to gcc-16/gcc-15 after burn-in
>> time?
>
> OK with some minor inconsistencies resolved (see inline), also OK for
> backports after some time in mainline.
>
> Thanks,
> Uros.
>
>>
>> BR,
>> Kewen
>> -----
>>
>> gcc/ChangeLog:
>>
>> * common/config/i386/cpuinfo.h (get_hygon_cpu): Detect HYGON
>> Family 18h model 8 as c86-4g-m8.
>> * common/config/i386/i386-common.cc (processor_names): Add
>> c86-4g-m8.
>> (processor_alias_table): Likewise.
>> * common/config/i386/i386-cpuinfo.h (enum processor_subtypes): Add
>> HYGONFAM18H_C86_4G_M8.
>> * config.gcc: Add c86-4g-m8 to supported x86 CPUs and handle
>> c86_4g_m8 target triples.
>> * config/i386/c86-4g-m7.md: Rename to ...
>> * config/i386/c86-4g-m7m8.md: ... this and extend shared c86-4g-m7
>> scheduling reservations to c86-4g-m8.
>> (c86_4g_m8_imov_cwde): New reservation.
>> (c86_4g_m7_imov_xchg): Add c86_4g_m8 to CPU attribute.
>> (c86_4g_m7_imov_xchg_load): Ditto.
>> (c86_4g_m7_imov): Ditto.
>> (c86_4g_m7_imov_load): Ditto.
>> (c86_4g_m7_imov_store): Ditto.
>> (c86_4g_m7_push): Ditto.
>> (c86_4g_m7_push_mem): Ditto.
>> (c86_4g_m7_pop): Ditto.
>> (c86_4g_m7_pop_mem): Ditto.
>> (c86_4g_m7_imul): Ditto.
>> (c86_4g_m7_imul_load): Ditto.
>> (c86_4g_m7_idiv): Ditto.
>> (c86_4g_m7_idiv_QI): Ditto.
>> (c86_4g_m7_idiv_load): Ditto.
>> (c86_4g_m7_idiv_QI_load): Ditto.
>> (c86_4g_m7_insn): Ditto.
>> (c86_4g_m7_insn_load): Ditto.
>> (c86_4g_m7_insn_store): Ditto.
>> (c86_4g_m7_insn2_store): Ditto.
>> (c86_4g_m7_insn_both): Ditto.
>> (c86_4g_m7_setcc): Ditto.
>> (c86_4g_m7_setcc_load): Ditto.
>> (c86_4g_m7_setcc_store): Ditto.
>> (c86_4g_m7_alu1_double): Ditto.
>> (c86_4g_m7_alu1_double_load): Ditto.
>> (c86_4g_m7_alu1_vector): Ditto.
>> (c86_4g_m7_alu1_vector_load): Ditto.
>> (c86_4g_m7_alu1_direct): Ditto.
>> (c86_4g_m7_alu1_direct_load): Ditto.
>> (c86_4g_m7_call): Ditto.
>> (c86_4g_m7_branch): Ditto.
>> (c86_4g_m7_branch_load): Ditto.
>> (c86_4g_m7_lea): Ditto.
>> (c86_4g_m7_leave): Ditto.
>> (c86_4g_m7_str): Ditto.
>> (c86_4g_m7_str_load): Ditto.
>> (c86_4g_m7_ieu_vector): Ditto.
>> (c86_4g_m7_ieu_vector_load): Ditto.
>> (c86_4g_m7_sse_insertimm): Ditto.
>> (c86_4g_m7_sse_insert): Ditto.
>> (c86_4g_m7_fp_cmov): Ditto.
>> (c86_4g_m7_fp_mov_direct_load): Ditto.
>> (c86_4g_m7_fp_mov_direct_store): Ditto.
>> (c86_4g_m7_fp_mov_double_load): Ditto.
>> (c86_4g_m7_fp_mov_double_store): Ditto.
>> (c86_4g_m7_fp_mov_direct): Ditto.
>> (c86_4g_m7_fp_sqrt): Ditto.
>> (c86_4g_m7_fp_spc_direct): Ditto.
>> (c86_4g_m7_fp_spc): Ditto.
>> (c86_4g_m7_fp_op_mul): Ditto.
>> (c86_4g_m7_fp_op_mul_load): Ditto.
>> (c86_4g_m7_fp_op_imul_load): Ditto.
>> (c86_4g_m7_fp_div): Ditto.
>> (c86_4g_m7_fp_div_load): Ditto.
>> (c86_4g_m7_fp_idiv_load): Ditto.
>> (c86_4g_m7_fp_fsgn): Ditto.
>> (c86_4g_m7_fp_fcmp): Ditto.
>> (c86_4g_m7_fp_fcmp_load): Ditto.
>> (c86_4g_m7_fp_mmx): Ditto.
>> (c86_4g_m7_mmx_add_cmp): Ditto.
>> (c86_4g_m7_mmx_add_cmp_load): Ditto.
>> (c86_4g_m7_mmx_cvt): Ditto.
>> (c86_4g_m7_mmx_cvt_load): Ditto.
>> (c86_4g_m7_mmx_shift): Ditto.
>> (c86_4g_m7_mmx_shift_load): Ditto.
>> (c86_4g_m7_mmx_shift_avg): Ditto.
>> (c86_4g_m7_mmx_shift_avg_load): Ditto.
>> (c86_4g_m7_mmx_shift_sadbw): Ditto.
>> (c86_4g_m7_mmx_shift_sadbw_load): Ditto.
>> (c86_4g_m7_mmx_mov): Ditto.
>> (c86_4g_m7_mmx_mov_store): Ditto.
>> (c86_4g_m7_mmx_mov_load): Ditto.
>> (c86_4g_m7_mmx_mul): Ditto.
>> (c86_4g_m7_mmx_mul_load): Ditto.
>> (c86_4g_m7_sse_pinsr_reg): Ditto.
>> (c86_4g_m7_sse_pinsr_reg_load): Ditto.
>> (c86_4g_m7_avx_vpinsr_reg): Ditto.
>> (c86_4g_m7_avx_vpinsr_reg_load): Ditto.
>> (c86_4g_m7_avx512_perm_xmm): Ditto.
>> (c86_4g_m7_avx512_perm_xmm_opload): Ditto.
>> (c86_4g_m7_avx512_permi2_ymm): Ditto.
>> (c86_4g_m7_avx512_permi2_zmm): Ditto.
>> (c86_4g_m7_avx512_permi2_ymm_load): Ditto.
>> (c86_4g_m7_avx512_permi2_zmm_load): Ditto.
>> (c86_4g_m7_avx512_perm_zmm_imm): Ditto.
>> (c86_4g_m7_avx512_perm_zmm_imm_load): Ditto.
>> (c86_4g_m7_avx512_perm_zmm_noimm): Ditto.
>> (c86_4g_m7_sse_perm_zmm_noimm_load): Ditto.
>> (c86_4g_m7_avx512_insertx_ymm): Ditto.
>> (c86_4g_m7_avx512_insertx_ymem): Ditto.
>> (c86_4g_m7_avx512_insertx_zxmm): Ditto.
>> (c86_4g_m7_avx512_insertx_zxmem): Ditto.
>> (c86_4g_m7_avx512_insertx_zymm): Ditto.
>> (c86_4g_m7_avx512_insertx_zymem): Ditto.
>> (c86_4g_m7_avx_insertx_ymm): Ditto.
>> (c86_4g_m7_avx_insertx_ymem): Ditto.
>> (c86_4g_m7_avx512_shuf_xymm): Ditto.
>> (c86_4g_m7_avx512_shuf_zmm): Ditto.
>> (c86_4g_m7_avx512_shuf_xymem): Ditto.
>> (c86_4g_m7_avx512_shuf_zmem): Ditto.
>> (c86_4g_m7_sselogic_xymm): Ditto.
>> (c86_4g_m7_sselogic_xymm_load): Ditto.
>> (c86_4g_m7_avx512_cmpestr): Ditto.
>> (c86_4g_m7_avx512_cmpestr_load): Ditto.
>> (c86_4g_m7_avx512_log): Ditto.
>> (c86_4g_m7_avx512_log_load): Ditto.
>> (c86_4g_m7_avx512_vdbpsadbw_xymm): Ditto.
>> (c86_4g_m7_avx512_vdbpsadbw_xymem): Ditto.
>> (c86_4g_m7_avx512_vdbpsadbw_zmm): Ditto.
>> (c86_4g_m7_avx512_vdbpsadbw_zmem): Ditto.
>> (c86_4g_m7_avx512_abs): Ditto.
>> (c86_4g_m7_avx512_abs_load): Ditto.
>> (c86_4g_m7_avx_sign): Ditto.
>> (c86_4g_m7_avx_sign_load): Ditto.
>> (c86_4g_m7_avx_blend): Ditto.
>> (c86_4g_m7_avx_blend_load): Ditto.
>> (c86_4g_m7_avx512_aes): Ditto.
>> (c86_4g_m7_avx512_aes_load): Ditto.
>> (c86_4g_m7_avx_aes): Ditto.
>> (c86_4g_m7_avx_aes_load): Ditto.
>> (c86_4g_m7_extr): Ditto.
>> (c86_4g_m7_extr_store): Ditto.
>> (c86_4g_m7_avx_ssecomi_comi): Ditto.
>> (c86_4g_m7_avx_ssecomi_comi_load): Ditto.
>> (c86_4g_m7_avx_ssecomi_test): Ditto.
>> (c86_4g_m7_avx_ssecomi_test_load): Ditto.
>> (c86_4g_m7_avx512_imul): Ditto.
>> (c86_4g_m7_avx512_imul_mem): Ditto.
>> (c86_4g_m7_avx_imul): Ditto.
>> (c86_4g_m7_avx_imul_mem): Ditto.
>> (c86_4g_m7_avx512_mov_vmov): Ditto.
>> (c86_4g_m7_avx512_mov_vmov_store): Ditto.
>> (c86_4g_m7_avx512_mov_vmov_load): Ditto.
>> (c86_4g_m7_avx512_vpmovx_y): Ditto.
>> (c86_4g_m7_avx512_vpmovx_y_load): Ditto.
>> (c86_4g_m7_avx512_vpmovx_z): Ditto.
>> (c86_4g_m7_avx512_vpmovx_z_load): Ditto.
>> (c86_4g_m7_avx512_vpmovx_x): Ditto.
>> (c86_4g_m7_avx512_vpmovx_x_load): Ditto.
>> (c86_4g_m7_avx_vpmovx_xx): Ditto.
>> (c86_4g_m7_avx_vpmovx_xx_load): Ditto.
>> (c86_4g_m7_avx512_expand): Ditto.
>> (c86_4g_m7_avx512_expand_load): Ditto.
>> (c86_4g_m7_avx512_expand_z): Ditto.
>> (c86_4g_m7_avx512_expand_z_load): Ditto.
>> (c86_4g_m7_avx512_movnt_load): Ditto.
>> (c86_4g_m7_avx512_movnt_store): Ditto.
>> (c86_4g_m7_sse_movnt_store): Ditto.
>> (c86_4g_m7_sse_movnt): Ditto.
>> (c86_4g_m7_avx512_blendv): Ditto.
>> (c86_4g_m7_avx512_blendv_load): Ditto.
>> (c86_4g_m7_sse_mov2): Ditto.
>> (c86_4g_m7_sse_mov2_load): Ditto.
>> (c86_4g_m7_avx512_sseishft_aligr): Ditto.
>> (c86_4g_m7_avx512_sseishft_aligr_load): Ditto.
>> (c86_4g_m7_avx512_sseishft_vshift): Ditto.
>> (c86_4g_m7_avx512_sseishft_vshift_load): Ditto.
>> (c86_4g_m7_avx512_sseadd_maxmin): Ditto.
>> (c86_4g_m7_avx512_sseadd_maxmin_load): Ditto.
>> (c86_4g_m7_avx_sseadd_maxmin): Ditto.
>> (c86_4g_m7_avx_sseadd_maxmin_load): Ditto.
>> (c86_4g_m7_sse_sseadd_maxmin): Ditto.
>> (c86_4g_m7_sse_sseadd_maxmin_load): Ditto.
>> (c86_4g_m7_avx512_sseadd): Ditto.
>> (c86_4g_m7_avx512_sseadd_load): Ditto.
>> (c86_4g_m7_avx_sseadd_hplus): Ditto.
>> (c86_4g_m7_avx_sseadd_hplus_load): Ditto.
>> (c86_4g_m7_avx512_sseiadd_madd): Ditto.
>> (c86_4g_m7_avx512_sseiadd_madd_mem): Ditto.
>> (c86_4g_m7_avx_sseiadd_sadbw): Ditto.
>> (c86_4g_m7_avx_sseiadd_sadbw_mem): Ditto.
>> (c86_4g_m7_sse_sseiadd_sadbw): Ditto.
>> (c86_4g_m7_sse_sseiadd_sadbw_mem): Ditto.
>> (c86_4g_m7_sse_sseiadd_madd): Ditto.
>> (c86_4g_m7_sse_sseiadd_madd_mem): Ditto.
>> (c86_4g_m7_avx512_sseiadd_avg): Ditto.
>> (c86_4g_m7_avx512_sseiadd_avg_load): Ditto.
>> (c86_4g_m7_avx_sseiadd_hplus): Ditto.
>> (c86_4g_m7_avx_sseiadd_hplus_load): Ditto.
>> (c86_4g_m7_sse_sseiadd_hplus): Ditto.
>> (c86_4g_m7_sse_sseiadd_hplus_load): Ditto.
>> (c86_4g_m8_avx512_ssemul): New reservation.
>> (c86_4g_m8_avx512_ssemul_load): Ditto.
>> (c86_4g_m7_avx512_ssediv_x): Add c86_4g_m8 to CPU attribute.
>> (c86_4g_m7_avx512_ssediv_xmem): Ditto.
>> (c86_4g_m7_avx512_ssediv_y): Ditto.
>> (c86_4g_m7_avx512_ssediv_ymem): Ditto.
>> (c86_4g_m7_avx512_ssediv_z): Ditto.
>> (c86_4g_m7_avx512_ssediv_zmem): Ditto.
>> (c86_4g_m7_avx512_ssecmp): Ditto.
>> (c86_4g_m7_avx512_ssecmp_load): Ditto.
>> (c86_4g_m7_avx512_ssecmp_z): Ditto.
>> (c86_4g_m7_avx512_ssecmp_z_load): Ditto.
>> (c86_4g_m7_avx512_ssecmp_vp): Ditto.
>> (c86_4g_m7_avx512_ssecmp_vp_load): Ditto.
>> (c86_4g_m7_avx512_ssecmp_vp_z): Ditto.
>> (c86_4g_m7_avx512_ssecmp_vp_z_load): Ditto.
>> (c86_4g_m7_avx_ssecmp_vp): Ditto.
>> (c86_4g_m7_avx_ssecmp_vp_load): Ditto.
>> (c86_4g_m7_avx512_ssecmp_test): Ditto.
>> (c86_4g_m7_avx512_ssecmp_test_load): Ditto.
>> (c86_4g_m7_avx512_ssecvt_xy): Ditto.
>> (c86_4g_m7_avx512_ssecvt_xy_load): Ditto.
>> (c86_4g_m7_avx512_ssecvt_y_z): Ditto.
>> (c86_4g_m7_avx512_ssecvt_y_z_load): Ditto.
>> (c86_4g_m7_avx512_ssecvt_z): Ditto.
>> (c86_4g_m7_avx512_ssecvt_z_load): Ditto.
>> (c86_4g_m7_avx_ssecvt): Ditto.
>> (c86_4g_m7_avx_ssecvt_load): Ditto.
>> (c86_4g_m7_sse_ssecvt_pspi): Ditto.
>> (c86_4g_m7_sse_ssecvt_pspi_load): Ditto.
>> (c86_4g_m7_sse_ssecvt_pi): Ditto.
>> (c86_4g_m7_sse_ssecvt_pi_load): Ditto.
>> (c86_4g_m8_avx512_muladd): New reservation.
>> (c86_4g_m8_avx512_muladd_load): Ditto.
>> (c86_4g_m7_avx512_muladd_madd): Add c86_4g_m8 to CPU attribute.
>> (c86_4g_m7_avx512_muladd_madd_load): Ditto.
>> (c86_4g_m7_avx512_sse_range): Ditto.
>> (c86_4g_m7_avx512_sse_range_load): Ditto.
>> (c86_4g_m7_avx512_sse_conflict_x): Ditto.
>> (c86_4g_m7_avx512_sse_conflict_x_load): Ditto.
>> (c86_4g_m7_avx512_sse_conflict_y): Ditto.
>> (c86_4g_m7_avx512_sse_conflict_y_load): Ditto.
>> (c86_4g_m7_avx512_sse_conflict_z): Ditto.
>> (c86_4g_m7_avx512_sse_conflict_z_load): Ditto.
>> (c86_4g_m7_avx512_sse_class): Ditto.
>> (c86_4g_m7_avx512_sse_class_load): Ditto.
>> (c86_4g_m7_avx512_sse_class_z): Ditto.
>> (c86_4g_m7_avx512_sse_class_z_load): Ditto.
>> (c86_4g_m7_avx_sse): Ditto.
>> (c86_4g_m7_avx_sse_load): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_sf_x): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_sf_xload): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_sf_y): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_sf_yload): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_sf_z): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_sf_zload): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_df_x): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_df_xload): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_df_y): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_df_yload): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_df_z): Ditto.
>> (c86_4g_m7_avx512_sse_sqrt_df_zload): Ditto.
>> (c86_4g_m7_avx512_msklog): Ditto.
>> (c86_4g_m7_avx512_msklog_vector): Ditto.
>> (c86_4g_m7_avx512_mskmov_reg_k): Ditto.
>> (c86_4g_m7_avx512_mskmov_xy_k): Ditto.
>> (c86_4g_m7_avx512_mskmov_z_k): Ditto.
>> (c86_4g_m7_avx512_mskmov_k_k): Ditto.
>> (c86_4g_m7_avx512_mskmov_k_reg): Ditto.
>> (c86_4g_m7_avx512_mskmov_k_m): Ditto.
>> * config/i386/driver-i386.cc (host_detect_local_cpu): Detect
>> c86-4g-m8.
>> * config/i386/i386-c.cc (ix86_target_macros_internal): Define
>> c86-4g-m8 arch and tune macros.
>> * config/i386/i386-options.cc (m_C86_4G_M8): New macro.
>> (m_C86_4G): Include m_C86_4G_M8.
>> (processor_cost_table): Add c86_4g_m8_cost.
>> * config/i386/i386.cc (ix86_reassociation_width): Handle
>> PROCESSOR_C86_4G_M8.
>> * config/i386/i386.h (enum processor_type): Add
>> PROCESSOR_C86_4G_M8.
>> (PTA_C86_4G_M8): New.
>> * config/i386/i386.md: Add c86_4g_m8 to cpu attribute.
>> * config/i386/x86-tune-costs.h (c86_4g_m8_cost): New.
>> * config/i386/x86-tune-sched.cc (ix86_issue_rate): Handle
>> PROCESSOR_C86_4G_M8.
>> (ix86_adjust_cost): Likewise.
>> * config/i386/x86-tune.def (X86_TUNE_USE_SCATTER_2PARTS): Include
>> m_C86_4G_M8.
>> (X86_TUNE_USE_SCATTER_4PARTS): Likewise.
>> (X86_TUNE_USE_SCATTER_8PARTS): Likewise.
>> (X86_TUNE_SSE_REDUCTION_PREFER_PSHUF): Likewise.
>> (X86_TUNE_AVX512_SPLIT_REGS): Likewise.
>> (X86_TUNE_AVX512_AVOID_VEC_PERM): Likewise.
>> (X86_TUNE_AVX512_MOVE_BY_PIECES): Likewise.
>> (X86_TUNE_AVX512_MASKED_EPILOGUES): Likewise.
>> * doc/extend.texi: Document c86-4g-m8 for __builtin_cpu_is.
>> * doc/invoke.texi: Document c86-4g-m8.
>>
>> gcc/testsuite/ChangeLog:
>>
>> * g++.target/i386/mv33.C: Add c86-4g-m8 target clone test.
>> * gcc.target/i386/funcspec-56.inc: Add c86-4g-m8 arch and tune
>> target attribute tests.
>>
>> Signed-off-by: Xin Liu <[email protected]>
>> ---
>> gcc/common/config/i386/cpuinfo.h | 6 +
>> gcc/common/config/i386/i386-common.cc | 6 +-
>> gcc/common/config/i386/i386-cpuinfo.h | 1 +
>> gcc/config.gcc | 10 +-
>> .../i386/{c86-4g-m7.md => c86-4g-m7m8.md} | 544 ++++++++++--------
>> gcc/config/i386/driver-i386.cc | 7 +-
>> gcc/config/i386/i386-c.cc | 7 +
>> gcc/config/i386/i386-options.cc | 7 +-
>> gcc/config/i386/i386.cc | 3 +-
>> gcc/config/i386/i386.h | 2 +
>> gcc/config/i386/i386.md | 4 +-
>> gcc/config/i386/x86-tune-costs.h | 2 +
>> gcc/config/i386/x86-tune-sched.cc | 2 +
>> gcc/config/i386/x86-tune.def | 18 +-
>> gcc/doc/extend.texi | 3 +
>> gcc/doc/invoke.texi | 9 +
>> gcc/testsuite/g++.target/i386/mv33.C | 6 +
>> gcc/testsuite/gcc.target/i386/funcspec-56.inc | 2 +
>> 18 files changed, 369 insertions(+), 270 deletions(-)
>> rename gcc/config/i386/{c86-4g-m7.md => c86-4g-m7m8.md} (84%)
>>
>> diff --git a/gcc/common/config/i386/cpuinfo.h
>> b/gcc/common/config/i386/cpuinfo.h
>> index 62e9210b067..f59090c8cde 100644
>> --- a/gcc/common/config/i386/cpuinfo.h
>> +++ b/gcc/common/config/i386/cpuinfo.h
>> @@ -383,6 +383,12 @@ get_hygon_cpu (struct __processor_model *cpu_model,
>> CHECK___builtin_cpu_is ("c86-4g-m7");
>> cpu_model->__cpu_subtype = HYGONFAM18H_C86_4G_M7;
>> }
>> + else if (model == 0x8)
>
> This condition is inconsistent with the condition in driver-i386.cc, where
>
> else if (model >= 8) // open-ended
> processor = PROCESSOR_C86_4G_M8;
>
> I think this should be (model >= 0x8) so a hypothetical model 9 would
> get m8 tuning.
As the else if hunk has a CHECK for exact m8, it was intentional to keep
the checking for "== 8" only. Does it sound reasonable?
>
>> + {
>> + cpu = "c86-4g-m8";
>> + CHECK___builtin_cpu_is ("c86-4g-m8");
>> + cpu_model->__cpu_subtype = HYGONFAM18H_C86_4G_M8;
>> + }
>> break;
>> default:
>> break;
>> diff --git a/gcc/common/config/i386/i386-common.cc
>> b/gcc/common/config/i386/i386-common.cc
>> index 1dd9819c309..effc570aca1 100644
>> --- a/gcc/common/config/i386/i386-common.cc
>> +++ b/gcc/common/config/i386/i386-common.cc
>> @@ -2208,7 +2208,8 @@ const char *const processor_names[] =
>> "znver6",
>> "c86-4g-m4",
>> "c86-4g-m6",
>> - "c86-4g-m7"
>> + "c86-4g-m7",
>> + "c86-4g-m8"
>> };
>>
>> /* Guarantee that the array is aligned with enum processor_type. */
>> @@ -2485,6 +2486,9 @@ const pta processor_alias_table[] =
>> {"c86-4g-m7", PROCESSOR_C86_4G_M7, CPU_C86_4G_M7,
>> PTA_C86_4G_M7,
>> M_CPU_SUBTYPE (HYGONFAM18H_C86_4G_M7), P_PROC_AVX512F},
>> + {"c86-4g-m8", PROCESSOR_C86_4G_M8, CPU_C86_4G_M8,
>> + PTA_C86_4G_M8,
>> + M_CPU_SUBTYPE (HYGONFAM18H_C86_4G_M8), P_PROC_AVX512F},
>>
>> {"generic", PROCESSOR_GENERIC, CPU_GENERIC,
>> PTA_64BIT
>> diff --git a/gcc/common/config/i386/i386-cpuinfo.h
>> b/gcc/common/config/i386/i386-cpuinfo.h
>> index 5407d9d9eba..944b585dd57 100644
>> --- a/gcc/common/config/i386/i386-cpuinfo.h
>> +++ b/gcc/common/config/i386/i386-cpuinfo.h
>> @@ -113,6 +113,7 @@ enum processor_subtypes
>> HYGONFAM18H_C86_4G_M4,
>> HYGONFAM18H_C86_4G_M6,
>> HYGONFAM18H_C86_4G_M7,
>> + HYGONFAM18H_C86_4G_M8,
>> CPU_SUBTYPE_MAX
>> };
>>
>> diff --git a/gcc/config.gcc b/gcc/config.gcc
>> index fabd5f75f96..fb4cdc0a475 100644
>> --- a/gcc/config.gcc
>> +++ b/gcc/config.gcc
>> @@ -763,7 +763,7 @@ 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 novalake \
>> -c86-4g-m4 c86-4g-m6 c86-4g-m7 native"
>> +c86-4g-m4 c86-4g-m6 c86-4g-m7 c86-4g-m8 native"
>>
>> # Additional x86 processors supported by --with-cpu=. Each processor
>> # MUST be separated by exactly one space.
>> @@ -4009,6 +4009,10 @@ case ${target} in
>> arch=c86-4g-m7
>> cpu=c86-4g-m7
>> ;;
>> + c86_4g_m8-*)
>> + arch=c86-4g-m8
>> + cpu=c86-4g-m8
>> + ;;
>> *)
>> arch=pentiumpro
>> cpu=generic
>> @@ -4123,6 +4127,10 @@ case ${target} in
>> arch=c86-4g-m7
>> cpu=c86-4g-m7
>> ;;
>> + c86_4g_m8-*)
>> + arch=c86-4g-m8
>> + cpu=c86-4g-m8
>> + ;;
>> *)
>> arch=x86-64
>> cpu=generic
>> diff --git a/gcc/config/i386/c86-4g-m7.md b/gcc/config/i386/c86-4g-m7m8.md
>> similarity index 84%
>> rename from gcc/config/i386/c86-4g-m7.md
>> rename to gcc/config/i386/c86-4g-m7m8.md
>> index 9c7cfc25c37..0be1680df82 100644
>> --- a/gcc/config/i386/c86-4g-m7.md
>> +++ b/gcc/config/i386/c86-4g-m7m8.md
>> @@ -17,7 +17,7 @@
>> ;; <http://www.gnu.org/licenses/>.
>> ;;
>>
>> -;; HYGON c86-4g-m7 Scheduling
>> +;; HYGON c86-4g-m7/m8 Scheduling
>> ;; Modeling automatons for decoders, integer execution pipes,
>> ;; AGU pipes, branch, floating point execution, fp store units,
>> ;; integer and floating point dividers. Split fpu1 and fpu3
>> @@ -112,15 +112,18 @@ (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x15"
>> "(c86-4g-m7-fp1fdiv1x4,c86
>> (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x18"
>> "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*18)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*18)")
>>
>> ;; IMOV/IMOVX
>> +
>> +;; Some reservations keep the historical "m7" naming, while their CPU
>> +;; attributes include both m7 and m8.
>> (define_insn_reservation "c86_4g_m7_imov_xchg" 1
>> - (and (eq_attr "cpu" "c86_4g_m7")
>> + (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
>> (and (eq_attr "type" "imov")
>> (and (eq_attr "c86_decode" "vector")
>> (eq_attr "memory" "none"))))
>> "c86-4g-m7-vector")
>>
>> (define_insn_reservation "c86_4g_m7_imov_xchg_load" 5
>> - (and (eq_attr "cpu" "c86_4g_m7")
>> + (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
>> (and (eq_attr "type" "imov")
>> (and (eq_attr "c86_decode" "vector")
>> (eq_attr "memory" "!none"))))
>> @@ -133,22 +136,29 @@ (define_insn_reservation "c86_4g_m7_imovx_cwde" 2
>> (eq_attr "memory" "none"))))
>> "c86-4g-m7-direct,c86-4g-m7-ieu")
>>
>> +(define_insn_reservation "c86_4g_m8_imov_cwde" 1
>
> Should this new reservation be named "..._imovx_cwde" as is the case
> with "c86_4g_m7_imovx_cwde"?
Yes, thanks for catching!
BR,
Kewen