]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
RISC-V: Add support for vector crypto extensions
authorChristoph Müllner <christoph.muellner@vrull.eu>
Wed, 21 Dec 2022 17:57:14 +0000 (18:57 +0100)
committerPhilipp Tomsich <philipp.tomsich@vrull.eu>
Mon, 3 Jul 2023 22:05:14 +0000 (00:05 +0200)
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 is merged as 9fdc1b157b6e72f7dd98851a240c5fdb386a558e.
All extensions come with (passing) 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.muellner@vrull.eu>
29 files changed:
gcc/common/config/riscv/riscv-common.cc
gcc/config/riscv/arch-canonicalize
gcc/config/riscv/riscv-opts.h
gcc/config/riscv/riscv.opt
gcc/testsuite/gcc.target/riscv/zvbb.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvbc.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvkg.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvkn-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvkn.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvknc-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvknc-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvknc.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvkned.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvkng-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvkng-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvkng.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvknha.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvknhb.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvks-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvks.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvksc-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvksc-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvksc.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvksed.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvksg-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvksg-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvksg.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvksh.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zvkt.c [new file with mode: 0644]

index 3247d526c0a8c92a46ad50c03f10ebbc93cd62ab..6091d8f281b0dd517263fd298d6b87501757acec 100644 (file)
@@ -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},
index 490226beb0bb960fb996117e84ba521724d86a31..bbb9261bd87eaf71a7919003fb062f50f6a45cf0 100755 (executable)
@@ -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):
index 208a557b8fffcaeec6317bb3b300eb77830e09bc..cfcf608ea626a6b047f1ed1a131e9b285d607669 100644 (file)
@@ -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)
index 63d4710cb1501f00293ab7173a68dfae0aa9839a..dd062f1c8bd34ffde4076e1176323941d4b77c82 100644 (file)
@@ -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 (file)
index 0000000..b592f56
--- /dev/null
@@ -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 (file)
index 0000000..37239fa
--- /dev/null
@@ -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 (file)
index 0000000..1e2a05a
--- /dev/null
@@ -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 (file)
index 0000000..83935b0
--- /dev/null
@@ -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 (file)
index 0000000..af3db40
--- /dev/null
@@ -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 (file)
index 0000000..eca2767
--- /dev/null
@@ -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 (file)
index 0000000..e77343a
--- /dev/null
@@ -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 (file)
index 0000000..10bd471
--- /dev/null
@@ -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 (file)
index 0000000..fcdc4b4
--- /dev/null
@@ -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 (file)
index 0000000..f4f3cc8
--- /dev/null
@@ -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 (file)
index 0000000..2631c1a
--- /dev/null
@@ -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 (file)
index 0000000..e6c950e
--- /dev/null
@@ -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 (file)
index 0000000..1275f9d
--- /dev/null
@@ -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 (file)
index 0000000..669ff01
--- /dev/null
@@ -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 (file)
index 0000000..28ad26a
--- /dev/null
@@ -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 (file)
index 0000000..a48c918
--- /dev/null
@@ -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 (file)
index 0000000..72d9676
--- /dev/null
@@ -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 (file)
index 0000000..c78b4fe
--- /dev/null
@@ -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 (file)
index 0000000..fb61561
--- /dev/null
@@ -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 (file)
index 0000000..439b546
--- /dev/null
@@ -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 (file)
index 0000000..8cbd033
--- /dev/null
@@ -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 (file)
index 0000000..d56c47e
--- /dev/null
@@ -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 (file)
index 0000000..44dffb4
--- /dev/null
@@ -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 (file)
index 0000000..5359ca5
--- /dev/null
@@ -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 (file)
index 0000000..49822b7
--- /dev/null
@@ -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;
+}