I would prefer those checking happened in
riscv_subset_list::parse@gcc/common/config/riscv/riscv-common.cc that
could be reused when we adding target attribute.

And I plan integrate the arch-canonicalize script to just reusing
whole arch string parser in GCC 14, so it would be great to have all
check within riscv_subset_list::parse

On Tue, Mar 28, 2023 at 10:23 PM Jiawei <jia...@iscas.ac.cn> wrote:
>
> Z*inx is conflict with float extensions, add incompatible check when
> z*inx and hard_float both enabled.
>
> gcc/ChangeLog:
>
>         * config/riscv/riscv.cc (riscv_option_override): New check.
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.target/riscv/arch-19.c: New test.
>
> ---
>  gcc/config/riscv/riscv.cc                | 4 ++++
>  gcc/testsuite/gcc.target/riscv/arch-19.c | 4 ++++
>  2 files changed, 8 insertions(+)
>  create mode 100644 gcc/testsuite/gcc.target/riscv/arch-19.c
>
> diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
> index 76eee4a55e9..162ba14d3c7 100644
> --- a/gcc/config/riscv/riscv.cc
> +++ b/gcc/config/riscv/riscv.cc
> @@ -6285,6 +6285,10 @@ riscv_option_override (void)
>        && riscv_abi != ABI_LP64 && riscv_abi != ABI_ILP32E)
>      error ("z*inx requires ABI ilp32, ilp32e or lp64");
>
> +  // Zfinx is conflict with float extensions.
> +  if (TARGET_ZFINX && TARGET_HARD_FLOAT)
> +    error ("z*inx is conflict with float extensions");
> +
>    /* We do not yet support ILP32 on RV64.  */
>    if (BITS_PER_WORD != POINTER_SIZE)
>      error ("ABI requires %<-march=rv%d%>", POINTER_SIZE);
> diff --git a/gcc/testsuite/gcc.target/riscv/arch-19.c 
> b/gcc/testsuite/gcc.target/riscv/arch-19.c
> new file mode 100644
> index 00000000000..a6f72af3677
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/arch-19.c
> @@ -0,0 +1,4 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64if_zfinx -mabi=lp64" } */
> +int foo() {}
> +/* { dg-error "z*inx is conflict with float extensions" "" { target *-*-* } 
> 0 } */
> --
> 2.25.1
>

Reply via email to