gcc/ChangeLog:
* config/aarch64/aarch64-option-extensions.def (SME_F8F16): New opt
extension.
(SME_F8F32): Likewise.
(SME_MOP4): Likewise.
* doc/invoke.texi: Document new extension flags.
* config/aarch64/aarch64.h (TARGET_SME_F8F16): New target macro.
(TARGET_SME_F8F32): Likewise.
(TARGET_SME_MOP4): Likewise.
* config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Define
`__ARM_FEATURE_SME_F8F16`, `__ARM_FEATURE_SME_F8F32` and
`__ARM_FEATURE_SME_MOP4` macros when the relevent extension is enabled.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/pragma_cpp_predefs_4.c: Test that
`__ARM_FEATURE_SME_F8F16`, `__ARM_FEATURE_SME_F8F32`
and `__ARM_FEATURE_SME_MOP4` macros are defined when the relevelant
extension is enabled.
---
gcc/config/aarch64/aarch64-c.cc | 4 ++++
gcc/config/aarch64/aarch64-option-extensions.def | 5 +++++
gcc/config/aarch64/aarch64.h | 6 ++++++
gcc/doc/invoke.texi | 8 ++++++++
gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c | 5 +++++
5 files changed, 28 insertions(+)
diff --git a/gcc/config/aarch64/aarch64-c.cc b/gcc/config/aarch64/aarch64-c.cc
index de4444bacb7..062e7643be5 100644
--- a/gcc/config/aarch64/aarch64-c.cc
+++ b/gcc/config/aarch64/aarch64-c.cc
@@ -296,7 +296,11 @@ aarch64_update_cpp_builtins (cpp_reader *pfile)
aarch64_def_or_undef (AARCH64_HAVE_ISA (SME_F16F16),
"__ARM_FEATURE_SME_F16F16", pfile);
aarch64_def_or_undef (TARGET_SME_F64F64, "__ARM_FEATURE_SME_F64F64", pfile);
+ aarch64_def_or_undef (TARGET_SME_F8F16, "__ARM_FEATURE_SME_F8F16", pfile);
+ aarch64_def_or_undef (TARGET_SME_F8F32, "__ARM_FEATURE_SME_F8F32", pfile);
aarch64_def_or_undef (TARGET_SME2, "__ARM_FEATURE_SME2", pfile);
+ aarch64_def_or_undef (AARCH64_HAVE_ISA (SME_MOP4), "__ARM_FEATURE_SME_MOP4",
+ pfile);
aarch64_def_or_undef (AARCH64_HAVE_ISA (SME2p1),
"__ARM_FEATURE_SME2p1", pfile);
aarch64_def_or_undef (TARGET_FAMINMAX, "__ARM_FEATURE_FAMINMAX", pfile);
diff --git a/gcc/config/aarch64/aarch64-option-extensions.def
b/gcc/config/aarch64/aarch64-option-extensions.def
index 083515d890d..53ae1cabe00 100644
--- a/gcc/config/aarch64/aarch64-option-extensions.def
+++ b/gcc/config/aarch64/aarch64-option-extensions.def
@@ -251,6 +251,8 @@ AARCH64_OPT_EXTENSION("sme2p1", SME2p1, (SME2), (), (),
"sme2p1")
AARCH64_OPT_EXTENSION("sme-b16b16", SME_B16B16, (SME2, SVE_B16B16), (), (),
"smeb16b16")
+AARCH64_OPT_EXTENSION ("sme-f8f16", SME_F8F16, (SME2), (), (), "smef8f16")
+AARCH64_OPT_EXTENSION ("sme-f8f32", SME_F8F32, (SME2), (), (), "smef8f32")
AARCH64_OPT_EXTENSION("sme-f16f16", SME_F16F16, (SME2), (), (), "smef16f16")
AARCH64_OPT_FMV_EXTENSION("mops", MOPS, (), (), (), "mops")
@@ -287,6 +289,9 @@ AARCH64_OPT_EXTENSION("lut", LUT, (SIMD), (), (), "lut")
AARCH64_OPT_EXTENSION ("sme-lutv2", SME_LUTv2, (SME2), (), (), "sme-lutv2")
+AARCH64_OPT_EXTENSION ("sme-mop4", SME_MOP4, (SME2), (), (), "sme-mop4")
+
+
AARCH64_OPT_EXTENSION("cpa", CPA, (), (), (), "")
#undef AARCH64_OPT_FMV_EXTENSION
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 5a1d5a94670..540dfd00190 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -325,6 +325,9 @@ constexpr auto AARCH64_FL_DEFAULT_ISA_MODE ATTRIBUTE_UNUSED
/* The FEAT_SME_F64F64 extension to SME, enabled through +sme-f64f64. */
#define TARGET_SME_F64F64 AARCH64_HAVE_ISA (SME_F64F64)
+#define TARGET_SME_F8F16 AARCH64_HAVE_ISA (SME_F8F16)
+#define TARGET_SME_F8F32 AARCH64_HAVE_ISA (SME_F8F32)
+
/* SME2 instructions, enabled through +sme2. */
#define TARGET_SME2 AARCH64_HAVE_ISA (SME2)
@@ -463,6 +466,9 @@ constexpr auto AARCH64_FL_DEFAULT_ISA_MODE ATTRIBUTE_UNUSED
elements are enabled through +sme-lutv2. */
#define TARGET_SME_LUTv2 AARCH64_HAVE_ISA (SME_LUTv2)
+
+#define TARGET_SME_MOP4 (TARGET_SME2 && AARCH64_HAVE_ISA (SME_MOP4))
+
/* Prefer different predicate registers for the output of a predicated
operation over re-using an existing input predicate. */
#define TARGET_SVE_PRED_CLOBBER (TARGET_SVE \
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 8db0aa0ceb7..01d82aa0d64 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -23074,9 +23074,17 @@ Enable the Scalable Matrix Extension 2. This also
enables SME instructions.
@item sme-b16b16
Enable the FEAT_SME_B16B16 extension to SME. This also enables SME2
and SVE_B16B16 instructions.
+@item sme-f8f16
+Enable the FEAT_SME_F8F16 extension to SME. This also enables SME2
+@item sme-f8326
+Enable the FEAT_SME_F8F32 extension to SME. This also enables SME2
+instructions.
@item sme-f16f16
Enable the FEAT_SME_F16F16 extension to SME. This also enables SME2
instructions.
+@item sme-mop4
+Enable the FEAT_SME_MOP4 extension to SME. This also enables SME2
+instructions.
@item sme2p1
Enable the Scalable Matrix Extension version 2.1. This also enables SME2
instructions.
diff --git a/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
index 3799fb46df1..13c5035829a 100644
--- a/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
+++ b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
@@ -179,6 +179,11 @@
#error Foo
#endif
+#pragma GCC target "+nothing+sve2+sme-mop4"
+#ifndef __ARM_FEATURE_SME_MOP4
+#error "__ARM_FEATURE_SME_MOP4 not defined"
+#endif
+
#pragma GCC target "branch-protection=standard"
#ifndef __ARM_FEATURE_BTI_DEFAULT
#error Foo
--
2.43.0