On Mon, 17 Mar 2025 17:31:36 +0800, Yixuan Chen wrote:
> gcc/ChangeLog:
> 
>         * config/riscv/riscv-cores.def (RISCV_TUNE): Add xt-c908, xt-c910.
>         (RISCV_CORE): Add xt-c908, xt-c910 and xt-c920v1 and xt-c920v2.
>         * config/riscv/riscv.cc: Add xt-c908, xt-c910 tune info.
>         * doc/invoke.texi: Add xt-c908, xt-c910 and xt-c920v1 and xt-c920v2.
> 
> gcc/testsuite/ChangeLog:
> 
>         * gcc.target/riscv/mcpu-xt-c908.c: New test.
>         * gcc.target/riscv/mcpu-xt-c910.c: New test.
>         * gcc.target/riscv/mcpu-xt-c920v1.c: New test.
>         * gcc.target/riscv/mcpu-xt-c920v2.c: New test.
> 
> Fix v1 Subject issue and ISA string issue.
> 
> Add xuantie C909, C910, C920v1 and C920v2 to -mcpu

Hi, Yixuan,

I suggest changing C920v1 to C920, as this would better align with the actual 
naming conventions of the CPU.

> Tune info copied 
> from:https://github.com/XUANTIE-RV/gcc/blob/xuantie-gcc-10.2.0/gcc/config/riscv/riscv-xuantie-tune.h
> No C920 related tune info, use generic_ooo.

This is feasible for now; we can make further modifications later.

> Add xuantie C909, C910, C920v1 and C920v2 to -mcpu
> Tune info copied 
> from:https://github.com/XUANTIE-RV/gcc/blob/xuantie-gcc-10.2.0/gcc/config/riscv/riscv-xuantie-tune.h
> No C920 related tune info, use generic_ooo.
> ---
>  gcc/config/riscv/riscv-cores.def              | 25 ++++++++++++++
>  gcc/config/riscv/riscv.cc                     | 34 +++++++++++++++++++
>  gcc/doc/invoke.texi                           |  4 +--
>  gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c | 34 +++++++++++++++++++
>  gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c | 29 ++++++++++++++++
>  .../gcc.target/riscv/mcpu-xt-c920v1.c         | 30 ++++++++++++++++
>  .../gcc.target/riscv/mcpu-xt-c920v2.c         | 30 ++++++++++++++++
>  7 files changed, 184 insertions(+), 2 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
>  create mode 100644 gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
>  create mode 100644 gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v1.c
>  create mode 100644 gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
> 
> diff --git a/gcc/config/riscv/riscv-cores.def 
> b/gcc/config/riscv/riscv-cores.def
> index 2918496bcd0..af45ec57e90 100644
> --- a/gcc/config/riscv/riscv-cores.def
> +++ b/gcc/config/riscv/riscv-cores.def
> @@ -41,6 +41,10 @@ RISCV_TUNE("sifive-p400-series", sifive_p400, 
> sifive_p400_tune_info)
>  RISCV_TUNE("sifive-p600-series", sifive_p600, sifive_p600_tune_info)
>  RISCV_TUNE("tt-ascalon-d8", generic_ooo, tt_ascalon_d8_tune_info)
>  RISCV_TUNE("thead-c906", generic, thead_c906_tune_info)
> +RISCV_TUNE("xt-c908", generic, xt_c908_tune_info)
> +RISCV_TUNE("xt-c910", generic, xt_c910_tune_info)
> +RISCV_TUNE("xt-c920v1", generic, generic_ooo_tune_info)
> +RISCV_TUNE("xt-c920v2", generic, generic_ooo_tune_info)
>  RISCV_TUNE("xiangshan-nanhu", xiangshan, xiangshan_nanhu_tune_info)
>  RISCV_TUNE("generic-ooo", generic_ooo, generic_ooo_tune_info)
>  RISCV_TUNE("size", generic, optimize_size_tune_info)
> @@ -93,6 +97,27 @@ RISCV_CORE("thead-c906",      
> "rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_"
>                             "xtheadmemidx_xtheadmempair_xtheadsync",
>                             "thead-c906")
>  
> +RISCV_CORE("xt-c908",         "rv64imafdc_zihintpause_zfh_zba_zbb_zbc_zbs_"
> +                           "xtheadba_xtheadbb_xtheadbs_xtheadcmo_"
> +                           "xtheadcondmov_xtheadfmemidx_xtheadmac_"
> +                           "xtheadmemidx_xtheadmempair_xtheadsync",
> +                           "xt-c908")
> +
> +RISCV_CORE("xt-c910",         
> "rv64imafdc_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_"
> +                           "xtheadcondmov_xtheadfmemidx_xtheadint_xtheadmac_"
> +                           "xtheadmemidx_xtheadmempair_xtheadsync",
> +                           "xt-c910")
> +
> +RISCV_CORE("xt-c920v1",       
> "rv64imafdc_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_"
> +                           "xtheadcondmov_xtheadfmemidx_xtheadint_xtheadmac_"
> +                           
> "xtheadmemidx_xtheadmempair_xtheadsync_xtheadvector",
> +                           "xt-c920v1")
> +
> +RISCV_CORE("xt-c920v2",       
> "rv64imafdcv_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_"
> +                           "xtheadcondmov_xtheadfmemidx_xtheadint_xtheadmac_"
> +                           "xtheadmemidx_xtheadmempair_xtheadsync",
> +                           "xt-c920v2")
> +

We can add the extension xtheadfmv to all of these models. Additionally, the 
C920v2 also supports zfa, zfbfmin, zcb, zba, zbb, zbc, zbs, zvfbfmin, zvfbfwma, 
and zvfh.

>  RISCV_CORE("tt-ascalon-d8",   "rv64imafdcv_zic64b_zicbom_zicbop_zicboz_"
>                             "ziccamoa_ziccif_zicclsm_ziccrse_zicond_zicsr_"
>                             "zifencei_zihintntl_zihintpause_zimop_za64rs_"
> diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
> index 38f3ae7cd84..3dfb0a71f88 100644
> --- a/gcc/config/riscv/riscv.cc
> +++ b/gcc/config/riscv/riscv.cc
> @@ -554,6 +554,40 @@ static const struct riscv_tune_param 
> thead_c906_tune_info = {
>    NULL,                                              /* loop_align */
>  };
>  
> +/* Costs to use when optimizing for xuantie C908.  */
> +const struct riscv_tune_param xt_c908_tune_info = {
> +  {COSTS_N_INSNS (4), COSTS_N_INSNS (5)},       /* fp_add */
> +  {COSTS_N_INSNS (4), COSTS_N_INSNS (5)},       /* fp_mul */
> +  {COSTS_N_INSNS (20), COSTS_N_INSNS (20)},     /* fp_div */
> +  {COSTS_N_INSNS (3), COSTS_N_INSNS (3)},       /* int_mul */
> +  {COSTS_N_INSNS (16), COSTS_N_INSNS (16)},       /* int_div */
> +  2,                                            /* issue_rate */
> +  3,                                            /* branch_cost */
> +  5,                                            /* memory_cost */
> +
> +  false,                                        /* slow_unaligned_access */
> +  "16",                                         /* function_align */
> +  "8",                                          /* jump_align */
> +  "8",                                          /* loop_align */
> +};

It seems like a lot of important information is missing here, such as
/* fmv_cost */, /* vector_unaligned_access */, /* use_divmod_expansion */, and 
/* overlap_op_by_pieces */.

Without these, it likely won’t be possible to build the toolchain correctly. :)

> +
> +/* Costs to use when optimizing for xuantie C910.  */
> +const struct riscv_tune_param xt_c910_tune_info = {
> +  {COSTS_N_INSNS (4), COSTS_N_INSNS (5)},    /* fp_add */
> +  {COSTS_N_INSNS (4), COSTS_N_INSNS (5)},    /* fp_mul */
> +  {COSTS_N_INSNS (20), COSTS_N_INSNS (20)},  /* fp_div */
> +  {COSTS_N_INSNS (4), COSTS_N_INSNS (4)},    /* int_mul */
> +  {COSTS_N_INSNS (6), COSTS_N_INSNS (6)},    /* int_div */
> +  1,                                         /* issue_rate */
> +  3,                                         /* branch_cost */
> +  5,                                         /* memory_cost */
> +
> +  false,                                     /* slow_unaligned_access */
> +  "16",                                              /* function_align */
> +  "4",                                               /* jump_align */
> +  "8",                                               /* loop_align */
> +};
> +
>  /* Costs to use when optimizing for xiangshan nanhu.  */
>  static const struct riscv_tune_param xiangshan_nanhu_tune_info = {
>    {COSTS_N_INSNS (3), COSTS_N_INSNS (3)},    /* fp_add */
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index 4fbb4cda101..74e423b3c0e 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -31329,8 +31329,8 @@ Permissible values for this option are: 
> @samp{sifive-e20}, @samp{sifive-e21},
>  @samp{sifive-e24}, @samp{sifive-e31}, @samp{sifive-e34}, @samp{sifive-e76},
>  @samp{sifive-s21}, @samp{sifive-s51}, @samp{sifive-s54}, @samp{sifive-s76},
>  @samp{sifive-u54}, @samp{sifive-u74}, @samp{sifive-x280}, 
> @samp{sifive-xp450},
> -@samp{sifive-x670}, @samp{thead-c906}, @samp{tt-ascalon-d8},
> -@samp{xiangshan-nanhu}.
> +@samp{sifive-x670}, @samp{thead-c906}, @samp{tt-ascalon-d8}, 
> @samp{xiangshan-nanhu},
> +@samp{xt-c908}, @samp{xt-c910}, @samp{xt-c920v1}, @samp{xt-c920v2}.
>  
>  Note that @option{-mcpu} does not override @option{-march} or 
> @option{-mtune}.
>  
> diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c 
> b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
> new file mode 100644
> index 00000000000..9370f7e63d0
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
> @@ -0,0 +1,34 @@
> +/* { dg-do compile } */
> +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
> +/* { dg-options "-mcpu=xt-c908" { target { rv64 } } } */
> +/* XuanTie C908 => 
> rv64imafdc_zba_zbb_zbc_zbs_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync_zihintpause
>  */
> +
> +#if !((__riscv_xlen == 64)           \
> +      && !defined(__riscv_32e)               \
> +      && defined(__riscv_mul)                \
> +      && defined(__riscv_atomic)     \
> +      && (__riscv_flen == 64)                \
> +      && defined(__riscv_compressed) \
> +      && defined(__riscv_zihintpause) \
> +      && defined(__riscv_zba) \
> +      && defined(__riscv_zbb) \
> +      && defined(__riscv_zbc) \
> +      && defined(__riscv_zbs) \
> +      && defined(__riscv_zfh) \
> +      && defined(__riscv_xtheadba)   \
> +      && defined(__riscv_xtheadbb)   \
> +      && defined(__riscv_xtheadbs)   \
> +      && defined(__riscv_xtheadcmo)  \
> +      && defined(__riscv_xtheadcondmov)      \
> +      && defined(__riscv_xtheadfmemidx)      \
> +      && defined(__riscv_xtheadmac)  \
> +      && defined(__riscv_xtheadmemidx)       \
> +      && defined(__riscv_xtheadmempair)      \
> +      && defined(__riscv_xtheadsync)) 
> +#error "unexpected arch"
> +#endif
> +
> +int main()
> +{
> +  return 0;
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c 
> b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
> new file mode 100644
> index 00000000000..7a813c3071e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
> @@ -0,0 +1,29 @@
> +/* { dg-do compile } */
> +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
> +/* { dg-options "-mcpu=xt-c910" { target { rv64 } } } */
> +/* XuanTie C910 => 
> rv64imafdc_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync
>  */
> +
> +#if !((__riscv_xlen == 64)           \
> +      && !defined(__riscv_32e)               \
> +      && defined(__riscv_mul)                \
> +      && defined(__riscv_atomic)     \
> +      && (__riscv_flen == 64)                \
> +      && defined(__riscv_compressed) \
> +      && defined(__riscv_zfh)    \
> +      && defined(__riscv_xtheadba)   \
> +      && defined(__riscv_xtheadbb)   \
> +      && defined(__riscv_xtheadbs)   \
> +      && defined(__riscv_xtheadcmo)  \
> +      && defined(__riscv_xtheadcondmov)      \
> +      && defined(__riscv_xtheadfmemidx)      \
> +      && defined(__riscv_xtheadmac)  \
> +      && defined(__riscv_xtheadmemidx)       \
> +      && defined(__riscv_xtheadmempair)      \
> +      && defined(__riscv_xtheadsync)) 
> +#error "unexpected arch"
> +#endif
> +
> +int main()
> +{
> +  return 0;
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v1.c 
> b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v1.c
> new file mode 100644
> index 00000000000..f81d6c2e99c
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v1.c
> @@ -0,0 +1,30 @@
> +/* { dg-do compile } */
> +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
> +/* { dg-options "-mcpu=xt-c920v1" { target { rv64 } } } */
> +/* XuanTie c920v1 => 
> rv64imafdc_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync_xtheadvector
>  */
> +
> +#if !((__riscv_xlen == 64)           \
> +      && !defined(__riscv_32e)               \
> +      && defined(__riscv_mul)                \
> +      && defined(__riscv_atomic)     \
> +      && (__riscv_flen == 64)                \
> +      && defined(__riscv_compressed) \
> +      && defined(__riscv_zfh)    \
> +      && defined(__riscv_xtheadba)   \
> +      && defined(__riscv_xtheadbb)   \
> +      && defined(__riscv_xtheadbs)   \
> +      && defined(__riscv_xtheadcmo)  \
> +      && defined(__riscv_xtheadcondmov)      \
> +      && defined(__riscv_xtheadfmemidx)      \
> +      && defined(__riscv_xtheadmac)  \
> +      && defined(__riscv_xtheadmemidx)       \
> +      && defined(__riscv_xtheadmempair)      \
> +      && defined(__riscv_xtheadsync)) \
> +      && defined(__riscv_xtheadvector) 
> +#error "unexpected arch"
> +#endif
> +
> +int main()
> +{
> +  return 0;
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c 
> b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
> new file mode 100644
> index 00000000000..bd3a06aad49
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
> @@ -0,0 +1,30 @@
> +/* { dg-do compile } */
> +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
> +/* { dg-options "-mcpu=xt-c906" { target { rv64 } } } */
> +/* XuanTie C920v2 => 
> rv64imafdcv_zfh_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadint_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync
>  */
> +
> +#if !((__riscv_xlen == 64)           \
> +      && !defined(__riscv_32e)               \
> +      && defined(__riscv_mul)                \
> +      && defined(__riscv_atomic)     \
> +      && (__riscv_flen == 64)                \
> +      && defined(__riscv_compressed) \
> +      && defined(__riscv_v) \
> +      && defined(__riscv_zfh)    \
> +      && defined(__riscv_xtheadba)   \
> +      && defined(__riscv_xtheadbb)   \
> +      && defined(__riscv_xtheadbs)   \
> +      && defined(__riscv_xtheadcmo)  \
> +      && defined(__riscv_xtheadcondmov)      \
> +      && defined(__riscv_xtheadfmemidx)      \
> +      && defined(__riscv_xtheadmac)  \
> +      && defined(__riscv_xtheadmemidx)       \
> +      && defined(__riscv_xtheadmempair)      \
> +      && defined(__riscv_xtheadsync))
> +#error "unexpected arch"
> +#endif
> +
> +int main()
> +{
> +  return 0;
> +}
> -- 
> 2.47.1

Overall, it’s great! You can refer to the relevant manual for more information. 

https://www.xrvm.cn/community/download?id=4224248662731067392

Best regards,
Jin Ma

Reply via email to