This patch series adds support for the `FEAT_MOP4` extension (see https://arm-software.github.io/acle/main/acle.html#sme2-mop4-intrinsics). As part of this series, I also added support for `FEAT_SME_F8F16` and `FEAT_SME_F8F32`.
This patch series depends on https://inbox.sourceware.org/gcc-patches/[email protected]/ for the ability to have intrinsics with three type suffixes. * Changelog * V1: Initial revision * V2: Rebase on master. Merge commits 4,5,6. Address review comments. Claudio Bantaloukas (1): aarch64: Add SME2.1 structured sparsity outer product intrinsics Karl Meakin (3): aarch64: Fix comments for register constraints aarch64: Add `SME_MOP4` extensions aarch64: Add `SME_MOP4` instrinsics and corresponding insns gcc/config/aarch64/aarch64-c.cc | 4 + gcc/config/aarch64/aarch64-sme.md | 208 ++++++++++++++++++ .../aarch64/aarch64-sve-builtins-functions.h | 52 +++++ .../aarch64/aarch64-sve-builtins-shapes.cc | 84 +++++++ .../aarch64/aarch64-sve-builtins-shapes.h | 3 + .../aarch64/aarch64-sve-builtins-sme.cc | 40 ++++ .../aarch64/aarch64-sve-builtins-sme.def | 91 ++++++++ gcc/config/aarch64/aarch64-sve-builtins-sme.h | 3 + gcc/config/aarch64/aarch64-sve-builtins.cc | 93 +++++++- gcc/config/aarch64/aarch64-sve-builtins.def | 4 + gcc/config/aarch64/aarch64.cc | 2 + gcc/config/aarch64/aarch64.h | 7 + gcc/config/aarch64/constraints.md | 25 ++- gcc/config/aarch64/iterators.md | 118 ++++++++++ gcc/doc/invoke.texi | 3 + .../gcc.target/aarch64/pragma_cpp_predefs_4.c | 22 ++ .../aarch64/sme/acle-asm/test_sme_acle.h | 2 +- .../sme2/acle-asm/mop4a_za16_bf16_bf16.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za16_f16_f16.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za16_mf8_mf8.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za32_bf16_bf16.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za32_f16_f16.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za32_f32_f32.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za32_mf8_mf8.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za32_s16_s16.c | 87 ++++++++ .../aarch64/sme2/acle-asm/mop4a_za32_s8_s8.c | 87 ++++++++ .../aarch64/sme2/acle-asm/mop4a_za32_s8_u8.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za32_u16_u16.c | 87 ++++++++ .../aarch64/sme2/acle-asm/mop4a_za32_u8_s8.c | 87 ++++++++ .../aarch64/sme2/acle-asm/mop4a_za32_u8_u8.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za64_f64_f64.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za64_s16_s16.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za64_s16_u16.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za64_u16_s16.c | 87 ++++++++ .../sme2/acle-asm/mop4a_za64_u16_u16.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za16_bf16_bf16.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za16_f16_f16.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za32_bf16_bf16.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za32_f16_f16.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za32_s16_s16.c | 87 ++++++++ .../aarch64/sme2/acle-asm/mop4s_za32_s8_s8.c | 87 ++++++++ .../aarch64/sme2/acle-asm/mop4s_za32_s8_u8.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za32_u16_u16.c | 87 ++++++++ .../aarch64/sme2/acle-asm/mop4s_za32_u8_s8.c | 87 ++++++++ .../aarch64/sme2/acle-asm/mop4s_za32_u8_u8.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za64_f64_f64.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za64_s16_s16.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za64_s16_u16.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za64_u16_s16.c | 87 ++++++++ .../sme2/acle-asm/mop4s_za64_u16_u16.c | 87 ++++++++ .../aarch64/sme2/acle-asm/test_sme2_acle.h | 22 ++ .../sme2/acle-asm/tmopa_lane_za16_bf16_bf16.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za16_f16_f16.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za16_mf8_mf8.c | 83 +++++++ .../sme2/acle-asm/tmopa_lane_za32_bf16_bf16.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za32_f16_f16.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za32_f32_f32.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za32_mf8_mf8.c | 83 +++++++ .../sme2/acle-asm/tmopa_lane_za32_s16_s16.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za32_s8_s8.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za32_s8_u8.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za32_u16_u16.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za32_u8_s8.c | 76 +++++++ .../sme2/acle-asm/tmopa_lane_za32_u8_u8.c | 76 +++++++ .../aarch64/sve/acle/general-c/mop4_b16b16.c | 79 +++++++ .../aarch64/sve/acle/general-c/mop4_base.c | 106 +++++++++ .../aarch64/sve/acle/general-c/mop4_f16f16.c | 79 +++++++ .../aarch64/sve/acle/general-c/mop4_f64f64.c | 79 +++++++ .../aarch64/sve/acle/general-c/mop4_f8f16.c | 84 +++++++ .../aarch64/sve/acle/general-c/mop4_f8f32.c | 84 +++++++ .../aarch64/sve/acle/general-c/mop4_i16i64.c | 88 ++++++++ .../general-c/ternary_za_uint_dual_single_1.c | 87 ++++++++ gcc/testsuite/lib/target-supports.exp | 2 +- 73 files changed, 5331 insertions(+), 13 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za16_bf16_bf16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za16_f16_f16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za16_mf8_mf8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_bf16_bf16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_f16_f16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_f32_f32.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_mf8_mf8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_s16_s16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_s8_s8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_s8_u8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_u16_u16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_u8_s8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_u8_u8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_f64_f64.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_s16_s16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_s16_u16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_u16_s16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_u16_u16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za16_bf16_bf16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za16_f16_f16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_bf16_bf16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_f16_f16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_s16_s16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_s8_s8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_s8_u8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_u16_u16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_u8_s8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_u8_u8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_f64_f64.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_s16_s16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_s16_u16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_u16_s16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_u16_u16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za16_bf16_bf16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za16_f16_f16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za16_mf8_mf8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_bf16_bf16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_f16_f16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_f32_f32.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_mf8_mf8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_s16_s16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_s8_s8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_s8_u8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_u16_u16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_u8_s8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_u8_u8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_b16b16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_base.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_f16f16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_f64f64.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_f8f16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_f8f32.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_i16i64.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_za_uint_dual_single_1.c -- 2.51.0
