* [PATCH v2] RISC-V: Add support for vector crypto extensions
@ 2023-07-03 11:07 Christoph Muellner
2023-07-03 13:42 ` Kito Cheng
0 siblings, 1 reply; 3+ messages in thread
From: Christoph Muellner @ 2023-07-03 11:07 UTC (permalink / raw)
To: gcc-patches, Kito Cheng, Jeff Law, Jim Wilson, Palmer Dabbelt,
Andrew Waterman, Philipp Tomsich
Cc: Nelson Chu, Nathan Huckleberry, nhuck, Christoph Müllner
From: Christoph Müllner <christoph.muellner@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.muellner@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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] RISC-V: Add support for vector crypto extensions
2023-07-03 11:07 [PATCH v2] RISC-V: Add support for vector crypto extensions Christoph Muellner
@ 2023-07-03 13:42 ` Kito Cheng
2023-07-03 22:07 ` Philipp Tomsich
0 siblings, 1 reply; 3+ messages in thread
From: Kito Cheng @ 2023-07-03 13:42 UTC (permalink / raw)
To: Christoph Muellner
Cc: Andrew Waterman, Jeff Law, Jim Wilson, Kito Cheng,
Nathan Huckleberry, Nelson Chu, Palmer Dabbelt, Philipp Tomsich,
gcc-patches, nhuck
[-- Attachment #1: Type: text/plain, Size: 34925 bytes --]
Thanks, LGTM :)
Christoph Muellner <christoph.muellner@vrull.eu>於 2023年7月3日 週一,19:08寫道:
> From: Christoph Müllner <christoph.muellner@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.muellner@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
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] RISC-V: Add support for vector crypto extensions
2023-07-03 13:42 ` Kito Cheng
@ 2023-07-03 22:07 ` Philipp Tomsich
0 siblings, 0 replies; 3+ messages in thread
From: Philipp Tomsich @ 2023-07-03 22:07 UTC (permalink / raw)
To: Kito Cheng
Cc: Christoph Muellner, Andrew Waterman, Jeff Law, Jim Wilson,
Kito Cheng, Nathan Huckleberry, Nelson Chu, Palmer Dabbelt,
gcc-patches, nhuck
[-- Attachment #1: Type: text/plain, Size: 36243 bytes --]
Thanks, applied to master.
--Philipp.
On Mon, 3 Jul 2023 at 15:42, Kito Cheng <kito.cheng@gmail.com> wrote:
> Thanks, LGTM :)
>
> Christoph Muellner <christoph.muellner@vrull.eu>於 2023年7月3日 週一,19:08寫道:
>
>> From: Christoph Müllner <christoph.muellner@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.muellner@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
>>
>>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-07-03 22:07 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-03 11:07 [PATCH v2] RISC-V: Add support for vector crypto extensions Christoph Muellner
2023-07-03 13:42 ` Kito Cheng
2023-07-03 22:07 ` Philipp Tomsich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).