Thanks, applied to master.
--Philipp.

On Mon, 3 Jul 2023 at 15:42, Kito Cheng <kito.ch...@gmail.com> wrote:

> Thanks, LGTM :)
>
> Christoph Muellner <christoph.muell...@vrull.eu>於 2023年7月3日 週一,19:08寫道:
>
>> From: Christoph Müllner <christoph.muell...@vrull.eu>
>>
>> This series adds basic support for the vector crypto extensions:
>> * Zvbb
>> * Zvbc
>> * Zvkg
>> * Zvkned
>> * Zvkhn[a,b]
>> * Zvksed
>> * Zvksh
>> * Zvkn
>> * Zvknc
>> * Zvkng
>> * Zvks
>> * Zvksc
>> * Zvksg
>> * Zvkt
>>
>> This patch is based on the v20230620 version of the Vector Cryptography
>> specification. The specification is frozen and can be found here:
>>   https://github.com/riscv/riscv-crypto/releases/tag/v20230620
>>
>> Binutils support has been merged upstream a few days ago.
>>
>> All extensions come with tests for the feature test macros.
>>
>> gcc/ChangeLog:
>>
>>         * common/config/riscv/riscv-common.cc: Add support for zvbb,
>>         zvbc, zvkg, zvkned, zvknha, zvknhb, zvksed, zvksh, zvkn,
>>         zvknc, zvkng, zvks, zvksc, zvksg, zvkt and the implied subsets.
>>         * config/riscv/arch-canonicalize: Add canonicalization info for
>>         zvkn, zvknc, zvkng, zvks, zvksc, zvksg.
>>         * config/riscv/riscv-opts.h (MASK_ZVBB): New macro.
>>         (MASK_ZVBC): Likewise.
>>         (TARGET_ZVBB): Likewise.
>>         (TARGET_ZVBC): Likewise.
>>         (MASK_ZVKG): Likewise.
>>         (MASK_ZVKNED): Likewise.
>>         (MASK_ZVKNHA): Likewise.
>>         (MASK_ZVKNHB): Likewise.
>>         (MASK_ZVKSED): Likewise.
>>         (MASK_ZVKSH): Likewise.
>>         (MASK_ZVKN): Likewise.
>>         (MASK_ZVKNC): Likewise.
>>         (MASK_ZVKNG): Likewise.
>>         (MASK_ZVKS): Likewise.
>>         (MASK_ZVKSC): Likewise.
>>         (MASK_ZVKSG): Likewise.
>>         (MASK_ZVKT): Likewise.
>>         (TARGET_ZVKG): Likewise.
>>         (TARGET_ZVKNED): Likewise.
>>         (TARGET_ZVKNHA): Likewise.
>>         (TARGET_ZVKNHB): Likewise.
>>         (TARGET_ZVKSED): Likewise.
>>         (TARGET_ZVKSH): Likewise.
>>         (TARGET_ZVKN): Likewise.
>>         (TARGET_ZVKNC): Likewise.
>>         (TARGET_ZVKNG): Likewise.
>>         (TARGET_ZVKS): Likewise.
>>         (TARGET_ZVKSC): Likewise.
>>         (TARGET_ZVKSG): Likewise.
>>         (TARGET_ZVKT): Likewise.
>>         * config/riscv/riscv.opt: Introduction of riscv_zv{b,k}_subext.
>>
>> gcc/testsuite/ChangeLog:
>>
>>         * gcc.target/riscv/zvbb.c: New test.
>>         * gcc.target/riscv/zvbc.c: New test.
>>         * gcc.target/riscv/zvkg.c: New test.
>>         * gcc.target/riscv/zvkn-1.c: New test.
>>         * gcc.target/riscv/zvkn.c: New test.
>>         * gcc.target/riscv/zvknc-1.c: New test.
>>         * gcc.target/riscv/zvknc-2.c: New test.
>>         * gcc.target/riscv/zvknc.c: New test.
>>         * gcc.target/riscv/zvkned.c: New test.
>>         * gcc.target/riscv/zvkng-1.c: New test.
>>         * gcc.target/riscv/zvkng-2.c: New test.
>>         * gcc.target/riscv/zvkng.c: New test.
>>         * gcc.target/riscv/zvknha.c: New test.
>>         * gcc.target/riscv/zvknhb.c: New test.
>>         * gcc.target/riscv/zvks-1.c: New test.
>>         * gcc.target/riscv/zvks.c: New test.
>>         * gcc.target/riscv/zvksc-1.c: New test.
>>         * gcc.target/riscv/zvksc-2.c: New test.
>>         * gcc.target/riscv/zvksc.c: New test.
>>         * gcc.target/riscv/zvksed.c: New test.
>>         * gcc.target/riscv/zvksg-1.c: New test.
>>         * gcc.target/riscv/zvksg-2.c: New test.
>>         * gcc.target/riscv/zvksg.c: New test.
>>         * gcc.target/riscv/zvksh.c: New test.
>>         * gcc.target/riscv/zvkt.c: New test.
>>
>> Signed-off-by: Christoph Müllner <christoph.muell...@vrull.eu>
>> ---
>> Changes for v2:
>> - Update patch for specification version v20230620
>>
>>  gcc/common/config/riscv/riscv-common.cc  | 55 ++++++++++++++++++++++++
>>  gcc/config/riscv/arch-canonicalize       |  7 +++
>>  gcc/config/riscv/riscv-opts.h            | 34 +++++++++++++++
>>  gcc/config/riscv/riscv.opt               |  6 +++
>>  gcc/testsuite/gcc.target/riscv/zvbb.c    | 13 ++++++
>>  gcc/testsuite/gcc.target/riscv/zvbc.c    | 13 ++++++
>>  gcc/testsuite/gcc.target/riscv/zvkg.c    | 13 ++++++
>>  gcc/testsuite/gcc.target/riscv/zvkn-1.c  | 29 +++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvkn.c    | 29 +++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvknc-1.c | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvknc-2.c | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvknc.c   | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvkned.c  | 13 ++++++
>>  gcc/testsuite/gcc.target/riscv/zvkng-1.c | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvkng-2.c | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvkng.c   | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvknha.c  | 13 ++++++
>>  gcc/testsuite/gcc.target/riscv/zvknhb.c  | 13 ++++++
>>  gcc/testsuite/gcc.target/riscv/zvks-1.c  | 29 +++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvks.c    | 29 +++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvksc-1.c | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvksc-2.c | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvksc.c   | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvksed.c  | 13 ++++++
>>  gcc/testsuite/gcc.target/riscv/zvksg-1.c | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvksg-2.c | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvksg.c   | 37 ++++++++++++++++
>>  gcc/testsuite/gcc.target/riscv/zvksh.c   | 13 ++++++
>>  gcc/testsuite/gcc.target/riscv/zvkt.c    | 13 ++++++
>>  29 files changed, 779 insertions(+)
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvbb.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvbc.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvkg.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvkn-1.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvkn.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvknc-1.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvknc-2.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvknc.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvkned.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvkng-1.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvkng-2.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvkng.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvknha.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvknhb.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvks-1.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvks.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvksc-1.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvksc-2.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvksc.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvksed.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvksg-1.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvksg-2.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvksg.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvksh.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/zvkt.c
>>
>> diff --git a/gcc/common/config/riscv/riscv-common.cc
>> b/gcc/common/config/riscv/riscv-common.cc
>> index 3247d526c0a..6091d8f281b 100644
>> --- a/gcc/common/config/riscv/riscv-common.cc
>> +++ b/gcc/common/config/riscv/riscv-common.cc
>> @@ -102,6 +102,23 @@ static const riscv_implied_info_t
>> riscv_implied_info[] =
>>    {"zvl32768b", "zvl16384b"},
>>    {"zvl65536b", "zvl32768b"},
>>
>> +  {"zvkn", "zvkned"},
>> +  {"zvkn", "zvknhb"},
>> +  {"zvkn", "zvbb"},
>> +  {"zvkn", "zvkt"},
>> +  {"zvknc", "zvkn"},
>> +  {"zvknc", "zvbc"},
>> +  {"zvkng", "zvkn"},
>> +  {"zvkng", "zvkg"},
>> +  {"zvks", "zvksed"},
>> +  {"zvks", "zvksh"},
>> +  {"zvks", "zvbb"},
>> +  {"zvks", "zvkt"},
>> +  {"zvksc", "zvks"},
>> +  {"zvksc", "zvbc"},
>> +  {"zvksg", "zvks"},
>> +  {"zvksg", "zvkg"},
>> +
>>    {"zfh", "zfhmin"},
>>    {"zfhmin", "f"},
>>    {"zvfhmin", "zve32f"},
>> @@ -204,6 +221,22 @@ static const struct riscv_ext_version
>> riscv_ext_version_table[] =
>>    {"zve64f", ISA_SPEC_CLASS_NONE, 1, 0},
>>    {"zve64d", ISA_SPEC_CLASS_NONE, 1, 0},
>>
>> +  {"zvbb", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvbc", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvkg", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvkned", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvknha", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvknhb", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvksed", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvksh", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvkn", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvknc", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvkng", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvks", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvksc", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvksg", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvkt", ISA_SPEC_CLASS_NONE, 1, 0},
>> +
>>    {"zvl32b", ISA_SPEC_CLASS_NONE, 1, 0},
>>    {"zvl64b", ISA_SPEC_CLASS_NONE, 1, 0},
>>    {"zvl128b", ISA_SPEC_CLASS_NONE, 1, 0},
>> @@ -250,6 +283,12 @@ static const struct riscv_ext_version
>> riscv_combine_info[] =
>>    {"zk",  ISA_SPEC_CLASS_NONE, 1, 0},
>>    {"zkn",  ISA_SPEC_CLASS_NONE, 1, 0},
>>    {"zks",  ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvkn", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvknc", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvkng", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvks", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvksc", ISA_SPEC_CLASS_NONE, 1, 0},
>> +  {"zvksg", ISA_SPEC_CLASS_NONE, 1, 0},
>>    /* Terminate the list.  */
>>    {NULL, ISA_SPEC_CLASS_NONE, 0, 0}
>>  };
>> @@ -1251,6 +1290,22 @@ static const riscv_ext_flag_table_t
>> riscv_ext_flag_table[] =
>>    {"zvfhmin",  &gcc_options::x_riscv_vector_elen_flags,
>> MASK_VECTOR_ELEN_FP_16},
>>    {"zvfh",     &gcc_options::x_riscv_vector_elen_flags,
>> MASK_VECTOR_ELEN_FP_16},
>>
>> +  {"zvbb",     &gcc_options::x_riscv_zvb_subext, MASK_ZVBB},
>> +  {"zvbc",     &gcc_options::x_riscv_zvb_subext, MASK_ZVBC},
>> +  {"zvkg",     &gcc_options::x_riscv_zvk_subext, MASK_ZVKG},
>> +  {"zvkned",   &gcc_options::x_riscv_zvk_subext, MASK_ZVKNED},
>> +  {"zvknha",   &gcc_options::x_riscv_zvk_subext, MASK_ZVKNHA},
>> +  {"zvknhb",   &gcc_options::x_riscv_zvk_subext, MASK_ZVKNHB},
>> +  {"zvksed",   &gcc_options::x_riscv_zvk_subext, MASK_ZVKSED},
>> +  {"zvksh",    &gcc_options::x_riscv_zvk_subext, MASK_ZVKSH},
>> +  {"zvkn",     &gcc_options::x_riscv_zvk_subext, MASK_ZVKN},
>> +  {"zvknc",    &gcc_options::x_riscv_zvk_subext, MASK_ZVKNC},
>> +  {"zvkng",    &gcc_options::x_riscv_zvk_subext, MASK_ZVKNG},
>> +  {"zvks",     &gcc_options::x_riscv_zvk_subext, MASK_ZVKS},
>> +  {"zvksc",    &gcc_options::x_riscv_zvk_subext, MASK_ZVKSC},
>> +  {"zvksg",    &gcc_options::x_riscv_zvk_subext, MASK_ZVKSG},
>> +  {"zvkt",     &gcc_options::x_riscv_zvk_subext, MASK_ZVKT},
>> +
>>    {"zvl32b",    &gcc_options::x_riscv_zvl_flags, MASK_ZVL32B},
>>    {"zvl64b",    &gcc_options::x_riscv_zvl_flags, MASK_ZVL64B},
>>    {"zvl128b",   &gcc_options::x_riscv_zvl_flags, MASK_ZVL128B},
>> diff --git a/gcc/config/riscv/arch-canonicalize
>> b/gcc/config/riscv/arch-canonicalize
>> index 490226beb0b..bbb9261bd87 100755
>> --- a/gcc/config/riscv/arch-canonicalize
>> +++ b/gcc/config/riscv/arch-canonicalize
>> @@ -68,6 +68,13 @@ IMPLIED_EXT = {
>>    "zvl16384b" : ["zvl8192b"],
>>    "zvl32768b" : ["zvl16384b"],
>>    "zvl65536b" : ["zvl32768b"],
>> +
>> +  "zvkn" : ["zvkned", "zvknhb", "zvbb", "zvkt"],
>> +  "zvknc" : ["zvkn", "zvbc"],
>> +  "zvkng" : ["zvkn", "zvkg"],
>> +  "zvks" : ["zvksed", "zvksh", "zvbb", "zvkt"],
>> +  "zvksc" : ["zvks", "zvbc"],
>> +  "zvksg" : ["zvks", "zvkg"],
>>  }
>>
>>  def arch_canonicalize(arch, isa_spec):
>> diff --git a/gcc/config/riscv/riscv-opts.h b/gcc/config/riscv/riscv-opts.h
>> index 208a557b8ff..cfcf608ea62 100644
>> --- a/gcc/config/riscv/riscv-opts.h
>> +++ b/gcc/config/riscv/riscv-opts.h
>> @@ -168,6 +168,40 @@ enum riscv_entity
>>  #define TARGET_VECTOR_ELEN_FP_16 \
>>    ((riscv_vector_elen_flags & MASK_VECTOR_ELEN_FP_16) != 0)
>>
>> +#define MASK_ZVBB      (1 << 0)
>> +#define MASK_ZVBC      (1 << 1)
>> +
>> +#define TARGET_ZVBB    ((riscv_zvb_subext & MASK_ZVBB) != 0)
>> +#define TARGET_ZVBC    ((riscv_zvb_subext & MASK_ZVBC) != 0)
>> +
>> +#define MASK_ZVKG      (1 << 0)
>> +#define MASK_ZVKNED    (1 << 1)
>> +#define MASK_ZVKNHA    (1 << 2)
>> +#define MASK_ZVKNHB    (1 << 3)
>> +#define MASK_ZVKSED    (1 << 4)
>> +#define MASK_ZVKSH     (1 << 5)
>> +#define MASK_ZVKN      (1 << 6)
>> +#define MASK_ZVKNC     (1 << 7)
>> +#define MASK_ZVKNG     (1 << 8)
>> +#define MASK_ZVKS      (1 << 9)
>> +#define MASK_ZVKSC     (1 << 10)
>> +#define MASK_ZVKSG     (1 << 11)
>> +#define MASK_ZVKT      (1 << 12)
>> +
>> +#define TARGET_ZVKG    ((riscv_zvk_subext & MASK_ZVKG) != 0)
>> +#define TARGET_ZVKNED  ((riscv_zvk_subext & MASK_ZVKNED) != 0)
>> +#define TARGET_ZVKNHA  ((riscv_zvk_subext & MASK_ZVKNHA) != 0)
>> +#define TARGET_ZVKNHB  ((riscv_zvk_subext & MASK_ZVKNHB) != 0)
>> +#define TARGET_ZVKSED  ((riscv_zvk_subext & MASK_ZVKSED) != 0)
>> +#define TARGET_ZVKSH   ((riscv_zvk_subext & MASK_ZVKSH) != 0)
>> +#define TARGET_ZVKN    ((riscv_zvk_subext & MASK_ZVKN) != 0)
>> +#define TARGET_ZVKNC   ((riscv_zvk_subext & MASK_ZVKNC) != 0)
>> +#define TARGET_ZVKNG   ((riscv_zvk_subext & MASK_ZVKNG) != 0)
>> +#define TARGET_ZVKS    ((riscv_zvk_subext & MASK_ZVKS) != 0)
>> +#define TARGET_ZVKSC   ((riscv_zvk_subext & MASK_ZVKSC) != 0)
>> +#define TARGET_ZVKSG   ((riscv_zvk_subext & MASK_ZVKSG) != 0)
>> +#define TARGET_ZVKT    ((riscv_zvk_subext & MASK_ZVKT) != 0)
>> +
>>  #define MASK_ZVL32B    (1 <<  0)
>>  #define MASK_ZVL64B    (1 <<  1)
>>  #define MASK_ZVL128B   (1 <<  2)
>> diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt
>> index 63d4710cb15..dd062f1c8bd 100644
>> --- a/gcc/config/riscv/riscv.opt
>> +++ b/gcc/config/riscv/riscv.opt
>> @@ -223,6 +223,12 @@ int riscv_vector_elen_flags
>>  TargetVariable
>>  int riscv_zvl_flags
>>
>> +TargetVariable
>> +int riscv_zvb_subext
>> +
>> +TargetVariable
>> +int riscv_zvk_subext
>> +
>>  TargetVariable
>>  int riscv_zicmo_subext
>>
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvbb.c
>> b/gcc/testsuite/gcc.target/riscv/zvbb.c
>> new file mode 100644
>> index 00000000000..b592f56f6cf
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvbb.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvbb" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvbb" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvbc.c
>> b/gcc/testsuite/gcc.target/riscv/zvbc.c
>> new file mode 100644
>> index 00000000000..37239fa91b3
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvbc.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvbc" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvbc" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvbc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvkg.c
>> b/gcc/testsuite/gcc.target/riscv/zvkg.c
>> new file mode 100644
>> index 00000000000..1e2a05aa1d8
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvkg.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkg" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvkg" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvkg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvkn-1.c
>> b/gcc/testsuite/gcc.target/riscv/zvkn-1.c
>> new file mode 100644
>> index 00000000000..83935b06832
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvkn-1.c
>> @@ -0,0 +1,29 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkned_zvknhb_zvbb_zvkt" { target { rv64
>> } } } */
>> +/* { dg-options "-march=rv32gc_zvkned_zvknhb_zvbb_zvkt" { target { rv32
>> } } } */
>> +
>> +#ifndef __riscv_zvkn
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkned
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvknhb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvkn.c
>> b/gcc/testsuite/gcc.target/riscv/zvkn.c
>> new file mode 100644
>> index 00000000000..af3db40c8f6
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvkn.c
>> @@ -0,0 +1,29 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkn" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvkn" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvkn
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkned
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvknhb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvknc-1.c
>> b/gcc/testsuite/gcc.target/riscv/zvknc-1.c
>> new file mode 100644
>> index 00000000000..eca27670895
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvknc-1.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkned_zvknhb_zvbb_zvkt_zvbc" { target {
>> rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvkned_zvknhb_zvbb_zvkt_zvbc" { target {
>> rv32 } } } */
>> +
>> +#ifndef __riscv_zvknc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkn
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkned
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvknhb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvknc-2.c
>> b/gcc/testsuite/gcc.target/riscv/zvknc-2.c
>> new file mode 100644
>> index 00000000000..e77343a27f3
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvknc-2.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkn_zvbc" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvkn_zvbc" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvknc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkn
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkned
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvknhb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvknc.c
>> b/gcc/testsuite/gcc.target/riscv/zvknc.c
>> new file mode 100644
>> index 00000000000..10bd471da45
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvknc.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvknc" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvknc" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvknc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkn
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkned
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvknhb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvkned.c
>> b/gcc/testsuite/gcc.target/riscv/zvkned.c
>> new file mode 100644
>> index 00000000000..fcdc4b45761
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvkned.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkned" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvkned" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvkned
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvkng-1.c
>> b/gcc/testsuite/gcc.target/riscv/zvkng-1.c
>> new file mode 100644
>> index 00000000000..f4f3cc8e417
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvkng-1.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkned_zvknhb_zvbb_zvkt_zvkg" { target {
>> rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvkned_zvknhb_zvbb_zvkt_zvkg" { target {
>> rv32 } } } */
>> +
>> +#ifndef __riscv_zvkng
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkn
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkned
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvknhb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvkng-2.c
>> b/gcc/testsuite/gcc.target/riscv/zvkng-2.c
>> new file mode 100644
>> index 00000000000..2631c1a1c25
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvkng-2.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkn_zvkg" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvkn_zvkg" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvkng
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkn
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkned
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvknhb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvkng.c
>> b/gcc/testsuite/gcc.target/riscv/zvkng.c
>> new file mode 100644
>> index 00000000000..e6c950e9323
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvkng.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkng" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvkng" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvkng
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkn
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkned
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvknhb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvknha.c
>> b/gcc/testsuite/gcc.target/riscv/zvknha.c
>> new file mode 100644
>> index 00000000000..1275f9d11c1
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvknha.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvknha" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvknha" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvknha
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvknhb.c
>> b/gcc/testsuite/gcc.target/riscv/zvknhb.c
>> new file mode 100644
>> index 00000000000..669ff019149
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvknhb.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvknhb" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvknhb" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvknhb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvks-1.c
>> b/gcc/testsuite/gcc.target/riscv/zvks-1.c
>> new file mode 100644
>> index 00000000000..28ad26af1c1
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvks-1.c
>> @@ -0,0 +1,29 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvksed_zvksh_zvbb_zvkt" { target { rv64 }
>> } } */
>> +/* { dg-options "-march=rv32gc_zvksed_zvksh_zvbb_zvkt" { target { rv32 }
>> } } */
>> +
>> +#ifndef __riscv_zvks
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksed
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksh
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvks.c
>> b/gcc/testsuite/gcc.target/riscv/zvks.c
>> new file mode 100644
>> index 00000000000..a48c9186d5e
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvks.c
>> @@ -0,0 +1,29 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvks" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvks" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvks
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksed
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksh
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvksc-1.c
>> b/gcc/testsuite/gcc.target/riscv/zvksc-1.c
>> new file mode 100644
>> index 00000000000..72d9676e68c
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvksc-1.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvksed_zvksh_zvbb_zvkt_zvbc" { target {
>> rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvksed_zvksh_zvbb_zvkt_zvbc" { target {
>> rv32 } } } */
>> +
>> +#ifndef __riscv_zvksc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvks
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksed
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksh
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvksc-2.c
>> b/gcc/testsuite/gcc.target/riscv/zvksc-2.c
>> new file mode 100644
>> index 00000000000..c78b4fe9077
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvksc-2.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvks_zvbc" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvks_zvbc" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvksc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvks
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksed
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksh
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvksc.c
>> b/gcc/testsuite/gcc.target/riscv/zvksc.c
>> new file mode 100644
>> index 00000000000..fb61561a2af
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvksc.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvksc" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvksc" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvksc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvks
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksed
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksh
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbc
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvksed.c
>> b/gcc/testsuite/gcc.target/riscv/zvksed.c
>> new file mode 100644
>> index 00000000000..439b546bb8a
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvksed.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvksed" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvksed" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvksed
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvksg-1.c
>> b/gcc/testsuite/gcc.target/riscv/zvksg-1.c
>> new file mode 100644
>> index 00000000000..8cbd0331168
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvksg-1.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvksed_zvksh_zvbb_zvkt_zvkg" { target {
>> rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvksed_zvksh_zvbb_zvkt_zvkg" { target {
>> rv32 } } } */
>> +
>> +#ifndef __riscv_zvksg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvks
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksed
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksh
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvksg-2.c
>> b/gcc/testsuite/gcc.target/riscv/zvksg-2.c
>> new file mode 100644
>> index 00000000000..d56c47e897c
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvksg-2.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvks_zvkg" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvks_zvkg" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvksg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvks
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksed
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksh
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvksg.c
>> b/gcc/testsuite/gcc.target/riscv/zvksg.c
>> new file mode 100644
>> index 00000000000..44dffb41395
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvksg.c
>> @@ -0,0 +1,37 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvksg" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvksg" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvksg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvks
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksed
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvksh
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvbb
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +#ifndef __riscv_zvkg
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvksh.c
>> b/gcc/testsuite/gcc.target/riscv/zvksh.c
>> new file mode 100644
>> index 00000000000..5359ca50281
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvksh.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvksh" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvksh" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvksh
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> diff --git a/gcc/testsuite/gcc.target/riscv/zvkt.c
>> b/gcc/testsuite/gcc.target/riscv/zvkt.c
>> new file mode 100644
>> index 00000000000..49822b75738
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/zvkt.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gc_zvkt" { target { rv64 } } } */
>> +/* { dg-options "-march=rv32gc_zvkt" { target { rv32 } } } */
>> +
>> +#ifndef __riscv_zvkt
>> +#error Feature macro not defined
>> +#endif
>> +
>> +int
>> +foo (int a)
>> +{
>> +  return a;
>> +}
>> --
>> 2.41.0
>>
>>

Reply via email to