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 relevant 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
        relevant extension is enabled.
---
 gcc/config/aarch64/aarch64-c.cc                         | 2 ++
 gcc/config/aarch64/aarch64-sve-builtins-shapes.h        | 1 +
 gcc/config/aarch64/aarch64.h                            | 2 ++
 gcc/doc/invoke.texi                                     | 3 +++
 gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c | 7 +++++++
 gcc/testsuite/lib/target-supports.exp                   | 2 +-
 6 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/gcc/config/aarch64/aarch64-c.cc b/gcc/config/aarch64/aarch64-c.cc
index 650d1858b2f..289253c3e37 100644
--- a/gcc/config/aarch64/aarch64-c.cc
+++ b/gcc/config/aarch64/aarch64-c.cc
@@ -312,6 +312,8 @@ aarch64_update_cpp_builtins (cpp_reader *pfile)
                        "__ARM_FEATURE_SME_F16F16", pfile);
   aarch64_def_or_undef (TARGET_SME_F64F64, "__ARM_FEATURE_SME_F64F64", 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_SME2p2, "__ARM_FEATURE_SME2p2", pfile);
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.h 
b/gcc/config/aarch64/aarch64-sve-builtins-shapes.h
index 14afae02ab5..bde05ab431d 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-shapes.h
+++ b/gcc/config/aarch64/aarch64-sve-builtins-shapes.h
@@ -171,6 +171,7 @@ namespace aarch64_sve
     extern const function_shape *const luti4_lane_zt;
     extern const function_shape *const luti4_zt;
     extern const function_shape *const mmla;
+    extern const function_shape *const mop4;
     extern const function_shape *const pattern_pred;
     extern const function_shape *const pmov_from_vector;
     extern const function_shape *const pmov_from_vector_lane;
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 3e02884984a..2bd78de2f3a 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -501,6 +501,8 @@ 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 (AARCH64_HAVE_ISA (SME_MOP4) && TARGET_STREAMING)
+
 /* 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 24d0420ca38..4b0735ac366 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -21995,6 +21995,9 @@ and SVE_B16B16 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 52548f20001..63b4844646e 100644
--- a/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
+++ b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
@@ -231,6 +231,13 @@
 #ifndef __ARM_FEATURE_SME2p2
 #error Foo
 #endif
+#pragma GCC target "+nothing+sve2+sme-mop4"
+#ifndef __ARM_FEATURE_SME_MOP4
+#error "__ARM_FEATURE_SME_MOP4 not defined"
+#endif
+#ifndef __ARM_FEATURE_SME2
+#error "__ARM_FEATURE_SME2 not defined"
+#endif
 
 #pragma GCC target "branch-protection=standard"
 #ifndef __ARM_FEATURE_BTI_DEFAULT
diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index fefc77ff332..95d260750f4 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -12854,7 +12854,7 @@ set exts {
     "sme-f8f16" "sme-f8f32"
     "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1" "sme2p2"
     "ssve-fp8dot2" "ssve-fp8dot4" "ssve-fp8fma" "sve-bfscale" "sme-lutv2"
-    "ssve-fexpa" "ssve-bitperm" "sme-tmop"
+    "ssve-fexpa" "ssve-bitperm" "sme-tmop" "sme-mop4"
 }
 
 foreach { aarch64_ext } $exts {
-- 
2.51.0

Reply via email to